2

大家好,我正在尝试开发像 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

        }});
4

1 回答 1

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() {}
});
于 2012-11-04T17:17:37.783 回答