рдиреНрдпреВрдЯрди рдХреЗ рдХреЙрдЯреЗрдЬ рдХреНрд░реИрдбрд▓

рдирдорд╕реНрдХрд╛рд░ рдкреНрд░рд┐рдп рдкрд╛рдардХ! рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рд▓реЗрдЦ рдХреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдПрдХреНрд▓рд┐рдкреНрд╕ рдореЗрдВ Box2D рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрд╛ рдерд╛ред рдЖрдЬ, рдиреНрдпреВрдЯрди рдХреЗ рдкрд╛рд▓рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕ рдЕрджреНрднреБрдд рднреМрддрд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рд╣рдо рдХреНрдпрд╛ рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ?

рдЫрд╡рд┐

рдЪрд┐рддреНрд░ 1. рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛!

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ!

LibGDX рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП , рдкрд╣рд▓рд╛ рд▓реЗрдЦ рджреЗрдЦреЗрдВред

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдирд╣реАрдВ рдмрджрд▓реА рд╣реИ:

рдЫрд╡рд┐

рдЪрд┐рддреНрд░рд╛ 2. рдкрд░рд┐рдпреЛрдЬрдирд╛ред рдлрд╝реЛрд▓реНрдбрд░ рдФрд░ рдкреИрдХреЗрдЬред

рдореИрдВрдиреЗ рдХреЛрд░ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рд╛рде рдпреВрдЯрд┐рд▓реНрд╕ рдкреИрдХреЗрдЬ рдХреЛ рдЬреЛрдбрд╝рд╛, рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдерд┐рд░ - рдкреНрд░рддрд┐ рдореАрдЯрд░ рдкрд┐рдХреНрд╕рд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХрд┐ рджреБрдирд┐рдпрд╛ рд╡рд┐рд╢рд╛рд▓ рдирд╣реАрдВ рд╣реИред

рдпрд╣рд╛рдБ com.mygdx.game.desktop рд╕реЗ DesktopLauncher рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ:

рдЗрд╕ рдХреЛрдб рдХреЛ рдХрдХреНрд╖рд╛ рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рдПрдВред
package com.mygdx.game.desktop; import com.badlogic.gdx.backends.lwjgl.LwjglApplication; import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; import com.mygdx.game.MyGdxGame; public class DesktopLauncher { public static void main(String[] arg) { LwjglApplicationConfiguration config = new LwjglApplicationConfiguration(); //   config.width = 720; //   config.height = 480; config.backgroundFPS = 60; config.foregroundFPS = 60; new LwjglApplication(new MyGdxGame(), config); } } 


рд╣рдорд╛рд░реЗ рднреМрддрд┐рдХ рдореЙрдбрд▓ рдореЗрдВ, рд▓реЛрдЪ рдХрд╛ рдЧреБрдгрд╛рдВрдХ рдкреНрд░рд╛рдердорд┐рдХ рдорд╣рддреНрд╡ рдХрд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛, рдкреЗрдВрдбреБрд▓рдо рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рджреЛрд▓рди рдХрд░реЗрдЧрд╛ред Box2D рдореЗрдВ, FixtureDef рдХрд╛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рдкреИрд░рд╛рдореАрдЯрд░ 0 рд╕реЗ 1.0f рддрдХ рдорд╛рди рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ 0 рдмрд┐рд▓реНрдХреБрд▓ рд▓реЛрдЪрджрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдФрд░ 1.0f рдмрд┐рд▓реНрдХреБрд▓ рд▓реЛрдЪрджрд╛рд░ рд╣реИред рдиреНрдпреВрдЯрди рдХреЗ рдкрд╛рд▓рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдореЙрдбрд▓ рдореБрдЭреЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛ = 0.8 рдПрдл:

рдЫрд╡рд┐

рдЪрд┐рддреНрд░ 3 рд▓реЛрдЪ рдЧреБрдгрд╛рдВрдХ = 0.8 рдПрдл, рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдзреАрдореА рдЧрддрд┐ред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛрдб:
 package com.mygdx.game; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.physics.box2d.Body; import com.badlogic.gdx.physics.box2d.BodyDef; import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer; import com.badlogic.gdx.physics.box2d.CircleShape; import com.badlogic.gdx.physics.box2d.FixtureDef; import com.badlogic.gdx.physics.box2d.PolygonShape; import com.badlogic.gdx.physics.box2d.World; import com.badlogic.gdx.physics.box2d.joints.RevoluteJointDef; import utils.Constants; public class MyGdxGame extends ApplicationAdapter { private OrthographicCamera camera; private boolean DEBUG = false; private World world; private Body plos; private Body plos2; private Body plos3; private Body plos1; private Body plos4; private Box2DDebugRenderer b2dr; private Body ball; private Body ball1; private Body ball2; private Body ball3; private Body ball4; public void create() { float w = Gdx.graphics.getWidth(); float h = Gdx.graphics.getHeight(); camera = new OrthographicCamera(); camera.setToOrtho(false, w / 2, h / 2); world = new World(new Vector2(0, -9.8f), false); b2dr = new Box2DDebugRenderer(); //     plos = createplos(20 / Constants.PPM); plos1 = createplos(0 / Constants.PPM); plos2 = createplos(40 / Constants.PPM); plos3 = createplos(80 / Constants.PPM); plos4 = createplos(60 / Constants.PPM); //   ball = createball(20 / Constants.PPM); ball1 = createball(40 / Constants.PPM); ball2 = createball(60 / Constants.PPM); ball3 = createball(0 / Constants.PPM); ball4 = createball(80 / Constants.PPM); //       rotation(plos, ball); rotation(plos2, ball1); rotation(plos1, ball3); rotation(plos4, ball2); rotation(plos3, ball4); } //       public void rotation(Body body1, Body body2) { RevoluteJointDef rjd = new RevoluteJointDef(); rjd.bodyA = body1; rjd.bodyB = body2; rjd.collideConnected = false; //      rjd.localAnchorB.set((plos.getPosition().x) / Constants.PPM, plos.getPosition().y / Constants.PPM + 2); //      rjd.localAnchorA.set((plos.getPosition().y - 6.8f) / Constants.PPM, plos.getPosition().x / Constants.PPM); world.createJoint(rjd); } public void render() { update(Gdx.graphics.getDeltaTime()); Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); b2dr.render(world, camera.combined.scl(Constants.PPM)); } public void resize(int width, int height) { camera.setToOrtho(false, width / 2, height / 2); } public void dispose() { world.dispose(); b2dr.dispose(); } public void update(float delta) { world.step(1 / 60f, 6, 2); cameraUpdate(delta); inputUpdate(delta); } public void inputUpdate(float delta) { //    ,      -7 /  x, -7 /  y if (Gdx.input.isKeyPressed(Keys.SPACE)) { ball3.setLinearVelocity(-7, -7); } } //      public void cameraUpdate(float delta) { Vector3 position = camera.position; position.x = ball1.getPosition().x * Constants.PPM; position.y = ball1.getPosition().y * Constants.PPM; camera.position.set(position); camera.update(); } //   public Body createplos(float xo) { PolygonShape shape = new PolygonShape(); Body fBody; BodyDef def = new BodyDef(); def.type = BodyDef.BodyType.StaticBody; def.position.set(xo, 200 / Constants.PPM); def.fixedRotation = true; fBody = world.createBody(def); shape.setAsBox(10 / Constants.PPM, 10 / Constants.PPM); fBody.createFixture(shape, 0.001f); shape.dispose(); return fBody; } //   public Body createball(float xo) { Body pBody; BodyDef def = new BodyDef(); def.type = BodyDef.BodyType.DynamicBody; def.position.set(xo, 100 / Constants.PPM); def.fixedRotation = false; pBody = world.createBody(def); CircleShape shape = new CircleShape(); shape.setRadius(10 / Constants.PPM); pBody.createFixture(shape, 0.0001f); def.bullet = true; FixtureDef fd = new FixtureDef(); //   fd.restitution = 0.8f; //  fd.density = 10.0f; //   fd.friction = 0f; fd.shape = shape; pBody.createFixture(fd); shape.dispose(); return pBody; } } 


рдЖрдк рдЦреБрдж рдХреЛ рдЧреБрдгрд╛рдВрдХ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдзрд┐рдХ рдпрдерд╛рд░реНрдерд╡рд╛рдж рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджрд┐рдореЛрдВ рдкрд░ рдмрдирд╛рд╡рдЯ рд▓рд╛рдЧреВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдЕрдЧрд▓рд╛ рд▓реЛрдЪ рдХреЗ рдЧреБрдгрд╛рдВрдХ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреАрдЖрдИрдПрдл-рдЪрд┐рддреНрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЫрд╡рд┐

рдЪрд┐рддреНрд░рд╛ 4. рд▓реЛрдЪ 1 рдПрдл рдХреЗ рдмрд░рд╛рдмрд░ рдЧреБрдгрд╛рдВрдХред

рдЫрд╡рд┐

рдЪрд┐рддреНрд░рд╛ 5. рд▓реЛрдЪ рдЧреБрдгрд╛рдВрдХ 0.5 рдПрдл рдХреЗ рдмрд░рд╛рдмрд░ред

рдЫрд╡рд┐

рдЪрд┐рддреНрд░рд╛ 6. рд▓реЛрдЪ рдЧреБрдгрд╛рдВрдХ 0.2 рдПрдл рдХреЗ рдмрд░рд╛рдмрд░ред

рдЫрд╡рд┐

рдЪрд┐рддреНрд░ 7. 0 рдХреЗ рдмрд░рд╛рдмрд░ рд▓реЛрдЪ рдЧреБрдгрд╛рдВрдХред

рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ, рдореИрдВ рдпрдерд╛рд╕рдВрднрд╡ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдлреИрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ! рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд▓реЗрдЦ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдерд╛! рдЪрд▓реЛ рдмреЙрдХреНрд╕ 2 рдбреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдЦреЗрд▓ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рд╕рд╛рде рдЕрд╕рд▓реА рдЕрд░рд╛рдЬрдХрддрд╛ рд▓рд╛рдПрдВ!

рдкреАрдПрд╕ рдореИрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рднреА рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреВрдВрдЧрд╛ред

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


All Articles