使用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方向上添加速度,它不会响应滑动屏幕。谢谢你的帮助
答案 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位置,第四个参数是更新旋转。 这样您就不必自己更新精灵位置了。