离开屏幕后移动实体

时间:2014-02-12 19:13:48

标签: android andengine

我有一个实体从右向左移动,我想重复使用它,所以我希望实体在离开屏幕时出现在屏幕右侧。

    physicsWorld.registerPhysicsConnector(new PhysicsConnector(this, body, true, false)
    {
        @Override
        public void onUpdate(float pSecondsElapsed)
        {
            super.onUpdate(pSecondsElapsed);

            if (GameScene.isRunning)
                body.setLinearVelocity(new Vector2(-100, body.getLinearVelocity().y)); 

            Log.d("TAG","MY X IS: " + getX());
            if (getX() <= -100) {
                Log.d("TAG","I SHOULD RESPAWN");
                setPosition(800, 100);
            }
        }
    });

日志:

02-12 20:14:36.059: D/TAG(9293): MY X IS: 179.99994
02-12 20:14:36.069: D/TAG(9293): MY X IS: 126.6666
02-12 20:14:36.089: D/TAG(9293): MY X IS: 73.33327
02-12 20:14:36.109: D/TAG(9293): MY X IS: 19.999931
02-12 20:14:36.119: D/TAG(9293): MY X IS: -33.333405
02-12 20:14:36.139: D/TAG(9293): MY X IS: -86.66674
02-12 20:14:36.159: D/TAG(9293): MY X IS: -140.00008
02-12 20:14:36.159: D/TAG(9293): I SHOULD RESPAWN
02-12 20:14:36.169: D/TAG(9293): MY X IS: -193.3334
02-12 20:14:36.169: D/TAG(9293): I SHOULD RESPAWN
02-12 20:14:36.189: D/TAG(9293): MY X IS: -246.66675
02-12 20:14:36.189: D/TAG(9293): I SHOULD RESPAWN
02-12 20:14:36.209: D/TAG(9293): MY X IS: -300.0001
02-12 20:14:36.209: D/TAG(9293): I SHOULD RESPAWN

所以它忽略了我:(

对此有何帮助?

该实体是Kinetic,以防它有帮助

2 个答案:

答案 0 :(得分:1)

使用正文时,不能使用精灵中的方法。 Body控制精灵的位置。尝试将新位置应用于身体。

Protip:如果你将来遇到类似的问题(并且你没有使用物理学),你可以使用MoveModifier和LoopModifier和你的精灵。

答案 1 :(得分:0)

固定。 SetPosition设置实体的位置,但是主体仍由物理控制,所以你必须使用setTransform

@Override
        public void onUpdate(float pSecondsElapsed)
        {
            super.onUpdate(pSecondsElapsed);

            if (GameScene.isRunning)
                body.setLinearVelocity(new Vector2(-8, body.getLinearVelocity().y)); 

            Log.d("TAG","MY X IS: " + getX());
            if (getX() <= -100) {
                Log.d("TAG","I SHOULD RESPAWN");
                final float widthD2 = getWidth() / 2;
                final float heightD2 = getHeight() / 2;
                final float angle = body.getAngle(); // keeps the body angle
                final Vector2 v2 = Vector2Pool.obtain((500 + widthD2) / PIXEL_TO_METER_RATIO_DEFAULT, (50 + heightD2) / PIXEL_TO_METER_RATIO_DEFAULT);
                body.setTransform(v2, angle);
                Vector2Pool.recycle(v2);
                setPosition(500 + widthD2,50+ heightD2);
            }
        }