AndEngine рдФрд░ Physbox2d рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ Phys22box рдХреЗ рд░реВрдк рдореЗрдВ AndEngine рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
AndEngine рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдореЗрдВ рд╕реЗ рдПрдХ, Andtoid рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрдлреНрдд рдЧреЗрдо рдЗрдВрдЬрди рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрдИ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ Physbox2dред рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдкрдХреЛ рдЦреЗрд▓ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рднреМрддрд┐рдХреА рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ AndEngine Habr├й stepango рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд╛ рд╣реИред рдореИрдВрдиреЗ рдЦреБрд╢реА рдХреЗ рд╕рд╛рде рдЙрдирдХреЗ рдХрд╛рдо рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдпрд╛ рдФрд░, рдЙрд╕реА рд╕рдордп, рдлрд┐рдЬрд┐рдХреНрд╕рдмреЙрдХреНрд╕ 2 рдбреА рдХреЛ рдЦрд░рд╛рдм рдХрд░ рджрд┐рдпрд╛ред рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рдирд┐рдХрд▓рд╛ред

рдореИрдВ рд╕рднреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрди рджреЛ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдЬреЛ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдФрд░ рдпрд╣рд╛рдБ рдХрд╣рд╛рдБ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ:

рд╣рдо рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдореЗрдВ andengine.jar, andenginephysicsbox2dextension.jar рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк libandenginephysicsbox2dextension.so рдФрд░ armeabilibxmp.so рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде armeabi рдлрд╝реЛрд▓реНрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред Nebeans рдореЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЗрд╡рд▓ рдпрд╣ рд╕рдм рд▓рд┐рдмрд╛рд╕ рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдбрд╛рд▓рдирд╛ рд╣реИред рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ - рдореИрдВ рдЗрд╕ рдмрд╛рдд рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд▓реЛрдЧреЛрдВ рдХреЛ рдХреНрдпрд╛ рдмрд╛рдзрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдирд╣реАрдВ рд░реЛрдХреЗрдВрдЧреЗ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдЕрдм рдЖрдк рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

1. рдПрдВрдбрдЧрд╛рдЗрди-рдЖрдзрд╛рд░рд┐рдд рдмреЗрд╕рдЧреИрдордХреНрдЯрд┐рд╡рд┐рдЯреА рд╕реЗ рд╣рдорд╛рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реЗрдВред
2. рд╣рдо onLadEngine рдФрд░ onLoadScene рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ:
public class MainActivity extends BaseGameActivity { //      private static final int CAMERA_WIDTH = 800; //     private static final int CAMERA_HEIGHT = 480; //       private static final FixtureDef FIXTURE_DEF = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f); // ,       private Camera mCamera; // ,       private Scene mScene; //  ,    . private PhysicsWorld mPhysicsWorld; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } //   public Engine onLoadEngine() { DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT); //      ,  //      . RatioResolutionPolicy    // .      ,    return new Engine(new EngineOptions(true, ScreenOrientation.PORTRAIT, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.mCamera)); } public void onLoadResources() { } public Scene onLoadScene() { //   .    ,     , . mScene = new Scene(1); //      ,  . this.mPhysicsWorld = new PhysicsWorld(new Vector2(0, SensorManager.GRAVITY_EARTH), false); //      mScene.registerUpdateHandler(mPhysicsWorld); return mScene; } public void onLoadComplete() { } } 


рд╣рдо рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ - рдФрд░ рд╣рдо рдПрдХ рджреЛрд╕реНрддрд╛рдирд╛ рд╡реИрдХреНрдпреВрдо рджреЗрдЦрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЕрднреА рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред

2. рдмрдирд╛рд╡рдЯ рд▓реЛрдб рдХрд░реЗрдВред Stepango рдЙрджрд╛рд╣рд░рдг рдХреЛ рдереЛрдбрд╝рд╛ рд╕реБрдзрд╛рд░рддреЗ рд╣реБрдП, рд╣рдо рд╕реНрдереИрддрд┐рдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЕрдлрд╡рд╛рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ:

 public class Textures { private Texture mTexture; private static TextureRegion mBallTextureRegion; private static TextureRegion mBackgroundTextureRegion; public Textures(final BaseGameActivity activity, final Engine engine) { //      -   ""   //  . mTexture = new Texture(1024, 1024, TextureOptions.BILINEAR_PREMULTIPLYALPHA); //   - 5121024. mBackgroundTextureRegion = TextureRegionFactory.createFromAsset( mTexture, activity, "gfx/bkg.png", 0, 0); //   -       // 512,0 -     . mBallTextureRegion = TextureRegionFactory.createFromAsset( mTexture, activity, "gfx/ball.png", 512, 0); engine.getTextureManager().loadTexture(mTexture); } public static TextureRegion getBackground() { return mBackgroundTextureRegion; } public static TextureRegion getBallTextureRegion() { return mBallTextureRegion; } } 


рдЗрд╕реА рд╡рд┐рдзрд┐ рдореЗрдВ рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:

 public void onLoadResources() { //   mTextures = new Textures(this, getEngine()); } 


рдпрд╣ рддрдереНрдп рдХрд┐ рд╣рдо рд╕реНрдереИрддрд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╕рд╛рд░ рдирд╣реАрдВ рд╣реИред рдЕрдЪреНрдЫреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╣рд╛рдБ рдХреБрдЫ рд╕рд┐рдВрдЧрд▓рдЯрди рдЖ рд░рд╣рд╛ рд╣реЛрдЧрд╛ред

3. рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрдирд╛рд╡рдЯ рд╣реИред рдпрд╣ onLoadScene рдкрджреНрдзрддрд┐ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рд╣реИ - рд╕рд╛рдЗрдб рдХреА рджреАрд╡рд╛рд░реЗрдВ, рдлрд░реНрд╢ рдФрд░ рдмреЙрд▓ред
рд╡рд┐рдзрд┐ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд░реВрдкрд╛рдВрддрд░рд┐рдд рд╣реИ:

 public Scene onLoadScene() { //   .    ,     , . mScene = new Scene(1); //      ,  . this.mPhysicsWorld = new PhysicsWorld(new Vector2(0, SensorManager.GRAVITY_EARTH), false); //      mScene.setBackground(new SpriteBackground(new Sprite(0, 0, Textures.getBackground()))); //   -   Line line_top = new Line(0, 0, CAMERA_WIDTH, 0, 5.0f * metrics.density); Line line_left = new Line(0, 0, 0, CAMERA_HEIGHT, 5.0f * metrics.density); Line line_right = new Line(CAMERA_WIDTH, 0, CAMERA_WIDTH, CAMERA_HEIGHT, 5.0f * metrics.density); Line line_bottom = new Line(0, CAMERA_HEIGHT, CAMERA_WIDTH, CAMERA_HEIGHT, 5.0f * metrics.density); //      Body wall_top = PhysicsFactory.createLineBody(mPhysicsWorld, line_top, FIXTURE_DEF); Body wall_left = PhysicsFactory.createLineBody(mPhysicsWorld, line_left, FIXTURE_DEF); Body wall_right = PhysicsFactory.createLineBody(mPhysicsWorld, line_right, FIXTURE_DEF); Body wall_bottom = PhysicsFactory.createLineBody(mPhysicsWorld, line_bottom, FIXTURE_DEF); //    Sprite mSprite = new Sprite(0.0f, 0.0f, 100, 100, Textures.getBallTextureRegion()); //      mSprite.setPosition(100, 100); //     Body mBody = PhysicsFactory.createCircleBody(mPhysicsWorld, 100, 100, 50, 0, BodyType.DynamicBody, FIXTURE_DEF); //       this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(line_top, wall_top, true, true)); this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(line_left, wall_left, true, true)); this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(line_right, wall_right, true, true)); this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(line_bottom, wall_bottom, true, true)); mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(mSprite, mBody, true, true)); //     this.mScene.attachChild(mSprite); this.mScene.attachChild(line_top); this.mScene.attachChild(line_left); this.mScene.attachChild(line_right); this.mScene.attachChild(line_bottom); mScene.registerUpdateHandler(mPhysicsWorld); return mScene; } 


рд╡рд╣ рд╕рдм рд╣реИред рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреГрд╖реНрдарднреВрдорд┐ рд╣реЛрдЧреА, рдФрд░ рдКрдкрд░реА рдмрд╛рдПрдБ рдореЗрдВ рдПрдХ рдЧреЗрдВрдж рд╣реЛрдЧреАред рд╡рд╣ рддреБрд░рдВрдд рдЧрд┐рд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рд╕реНрдХреНрд░реАрди рдХреЗ рдЕрдВрдд рддрдХ рдкрд╣реБрдБрдЪрддрд╛ рд╣реИ, рдЙрдЫрд▓рддрд╛ рд╣реИ ... рдФрд░ рдлрд┐рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХреЗ рдмрд┐рдирд╛, рдЬреАрд╡рди рдореЗрдВ рд╕рдм рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рд╣реИред

рдХреБрдЫ рд╕рдордп рдХреЗ рдбреЗрдЯрд┐рдВрдЧ рдХреЗ рдмрд╛рдж, рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ: Phys22box рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬ рд╣реИред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдПрдХ рд╕реНрдЯреЗрдкрдВрдЧреЛ рд▓реЗрдЦ рдХрд╛ рд▓рд┐рдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдЕрдкрдиреЗ рд╢реЛрдз рдореЗрдВ рдорджрдж рдХреА:
habrahabr.ru/blogs/android_development/120716

Source: https://habr.com/ru/post/In132810/


All Articles