是否可以使运动体沿x轴移动,但仍然响应用户输入以沿y方向移动

时间:2014-02-06 02:39:35

标签: andengine

使用andengine我正在尝试创建一个以设定的速度在屏幕上移动的球,但我希望能够在用户向上或向下滑动时移动球。这就是我必须沿x方向移动

FixtureDef BoxBodyFixtureDef =
            PhysicsFactory.createFixtureDef(20f, 0f, 0.5f);
    kinematicBody = PhysicsFactory.createBoxBody(mPhysicsWorld,
            mMarbleSprite, BodyType.KinematicBody, BoxBodyFixtureDef);
            mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(
            mMarbleSprite, kinematicBody));

            kinematicBody.setLinearVelocity(1f, 0f);
            kinematicBody.setAngularVelocity((float) (-Math.PI));

在onSceneTouchEvent我有

mMarbleSprite.setY(pSceneTouchEvent.getY());

我之前可以轻松移动Sprite,但由于在x方向上添加速度,它不会响应滑动屏幕。谢谢你的帮助

2 个答案:

答案 0 :(得分:2)

如果您将精灵连接到物理世界,那么您必须更新您的身体而不是精灵,如下所示:

kinematicBody.setTransform(pSceneTouchEvent.x/PTM_RATIO, pSceneTouchEvent.y/PTM_RATIO, 0);

然后,您必须每次在更新处理程序中更新精灵位置,如下所示:        得到世界上所有的身体       现在获取正文的位置然后更新精灵位置

Iterator<Body> it = bxWorld.getBodies();`
    while(it.hasNext()) {
                    Body b = it.next();
                    Object userData = b.getUserData();

                    if (userData != null && userData instanceof Sprite) {
                        //Synchronize the Sprites position and rotation with the corresponding body
                        final Sprite sprite = (Sprite)userData;
                        final Vector2 pos = b.getPosition();
                        sprite.setPosition(pos.x * PTM_RATIO, pos.y * PTM_RATIO);
                        sprite.setRotation(-1.0f * ccMacros.CC_RADIANS_TO_DEGREES(b.getAngle()));

                    }   
                }

答案 1 :(得分:0)

你应该更好地移动你的身体而不是精灵,就像拉玛说的那样:

kinematicBody.setTransform(pSceneTouchEvent.x/PTM_RATIO, pSceneTouchEvent.y/PTM_RATIO, 0);

并且还将两个额外的布尔参数传递给PhysicsConnector构造函数,如下所示:

mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(mMarbleSprite, kinematicBody, true, true));

第三个参数是告诉连接器是否要在主体移动时更新自动 Sprite位置,第四个参数是更新旋转。 这样您就不必自己更新精灵位置了。