大家好我正在尝试开发像Jetpack这样的游戏,所以我想设置一个通常按下的重力,当用户点击屏幕时,重力会改变它向上推。我搜索了一个星期的教程,解释如何做到这一点,但我找不到我搜索的内容。有人可以解释我如何做到这一点或发布教程的链接?
谢谢!
main = new Sprite(sX, sY, mainTextureRegion);
main.setScale(1);
main.setFlippedHorizontal(true);
scene.attachChild(main);
mPhysicsWorld = new PhysicsWorld(new Vector2(0, SensorManager.GRAVITY_EARTH), false);
final FixtureDef objectFixtureDef = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f);
final Body body = PhysicsFactory.createBoxBody(mPhysicsWorld, main, BodyType.DynamicBody, objectFixtureDef);
mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(main, body, true, true));
final Vector2 gravity = new Vector2(0, 5f);
mPhysicsWorld.setGravity(gravity);
scene.registerUpdateHandler(new IUpdateHandler() {
@Override
public void onUpdate(float pSecondsElapsed) {
}
@Override
public void reset() {
// TODO Auto-generated method stub
}});
答案 0 :(得分:3)
当用户触摸屏幕时,您不应该改变重力,因为不应该这样做。 当他触摸屏幕时,只需应用LinearImpulse(检查它是否已经达到最大速度)或类似的东西使其上升。引力不应该改变,因为它应该总是吸引你所有的物理对象。如果你改变了引力,你就会改变所有物体的行为,而不仅仅是玩家的行为。
修改强>
要让物理引擎工作,你必须在每次渲染时调用PhysicsWorld类的step()方法。 Andengine的问题在于你不能直接访问render()方法,因为Andengine完全处理它。 因此,您需要在onLoadEngine()方法中返回的Engine对象上注册IUpdateHandler。 这样,接口的onUpdate()方法将在每个渲染时调用,在这里你可以调用step()方法来使物理部分工作。浮点值告诉您自上次渲染以来经过了多少秒,但您不必处理它。该方法每秒调用多次。
希望它有所帮助。
编辑2
我认为这应该有效:
//on the Scene object or on the Engine one
scene.registerUpdateHandler(new IUpdateHandler() {
@Override
public void onUpdate(float pSecondsElapsed) {
mPhysicsWorld.onUpdate(pSecondsElapsed);
}
@Override
public void reset() {}
});