Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Libgdx:作为身体的演员_Java_Android_Libgdx_Box2d_Actor - Fatal编程技术网

Java Libgdx:作为身体的演员

Java Libgdx:作为身体的演员,java,android,libgdx,box2d,actor,Java,Android,Libgdx,Box2d,Actor,我是libgdx的初学者,我一直在寻找如何链接演员和身体(box2d)的答案,所以请帮助我:( 我有以下代码: /// CLASS ACTOR public class MyActor extends Actor { Texture texture; float actorX = 0, actorY = 0; public boolean clicked = false; public String id;

我是libgdx的初学者,我一直在寻找如何链接演员和身体(box2d)的答案,所以请帮助我:(

我有以下代码:

/// CLASS ACTOR
public class MyActor extends Actor
    {
        Texture texture;
        float actorX = 0, actorY = 0;
        public boolean clicked = false;
        public String id;

        public MyActor(float x, float y, String id, String tekstura)
        {
            this.texture = new Texture(Gdx.files.internal(tekstura));
            this.id = id;
            actorX = x;
            actorY = y;

            setBounds(actorX, actorY, texture.getWidth(), texture.getHeight());
            addListener(new InputListener()
            {
                public boolean touchDown(InputEvent event, float x, float y,
                        int pointer, int button)
                {
                    MyActor co = ((MyActor) event.getTarget());
                    co.clicked = true;
                    System.out.println(co.id);
                    co.remove();
                    return true;
                }
            });
        }


        @Override
        public void draw(SpriteBatch batch, float alpha)
        {
            batch.draw(texture, actorX, actorY);
        }


    }

/*....................
.......................
........................
..........................*/
//CREATING SIMPLE OBJECT

        MyActor samolot1 = new MyActor(100, 300, "samolot1", "data/jet.png");
        samolot1.setTouchable(Touchable.enabled);
        stage.addActor(samolot1);


        // //////////////// WORLD /////////////////////////////////////////////

        // 1
        BodyDef bodydef_mojapostac = new BodyDef();
        bodydef_mojapostac.type = BodyType.DynamicBody;
        bodydef_mojapostac.position.set(400, 100);

        CircleShape shape_mojapostac = new CircleShape();
        shape_mojapostac.setRadius(30);

        FixtureDef fixturedef_mojapostac = new FixtureDef();
        fixturedef_mojapostac.density = 0.1f;
        fixturedef_mojapostac.friction = 0.8f;
        fixturedef_mojapostac.restitution = 0.7f;
        fixturedef_mojapostac.shape = shape_mojapostac;

        Body BodyMojaPostac = world.createBody(bodydef_mojapostac);
        BodyMojaPostac.createFixture(fixturedef_mojapostac);


        BodyMojaPostac.setUserData(samolot1);
和render()


我可以将body与sprite链接,但我不知道如何使用actor:(

在使用此组合时遇到问题后,我想与大家分享我的解决方案:

public class PhysicsActor extends Image {
private Body body;
private Fixture fixture;

public PhysicsActor(World world, BodyDef bodyDef, FixtureDef fixtureDef, TextureRegion textureRegion) {
    super(textureRegion);

    body = world.createBody(bodyDef);
    setFixture(getBody().createFixture(fixtureDef));
}

@Override
public void draw(Batch batch, float parentAlpha) {
    super.draw(batch, parentAlpha);
}

public Body getBody() {
    return body;
}

public Fixture getFixture() {
    return fixture;
}
我是这样使用它的:

bodyDef = new BodyDef();
bodyDef.type = BodyType.DynamicBody;
bodyDef.position.set(Toolkit.Screen2World(x), Toolkit.Screen2World(y));

pShape = new PolygonShape();
pShape.setAsBox(Toolkit.Screen2World(width/2), Toolkit.Screen2World(height/2)); //In Toolkit I have my methods to scale the world

fixtureDef = new FixtureDef();
fixtureDef.shape = pShape;
//Set some more attributes i.e. density

//Add the PhysicsActor
PhysicsActor leftBar = new PhysicsActor(world, bodyDef, fixtureDef, new TextureRegion(Resources.barLeftTexture, 0, 0, width, height));
leftUpperBar.setSize(width, height);
this.addActor(leftUpperBar);
您只需手动设置宽度和高度(在我的情况下,我使用纹理的分辨率)

Resources.barLeftTexture:

public static Texture barLeftTexture;

barLeftTexture = new Texture(Gdx.files.internal("data/barLeft.png"));

我注意到你的问题对你来说可能已经过时了(OP)但是,这可能会帮助一些人在这个问题上结结巴巴。

您可能想看看这个问题:在您的解决方案中,没有任何地方显示或解释如何将您的身体位置迁移到GameActor的位置。此外,PhysicsActor Constructor中不需要getBody调用。您的身体就在那里。
public static Texture barLeftTexture;

barLeftTexture = new Texture(Gdx.files.internal("data/barLeft.png"));