如何在Andengine中制作物理

时间:2014-03-17 07:26:24

标签: android andengine

我有一个精灵,必须永远下去,但是当我点击屏幕时它必须上升,像Flappy Bird一样闷闷不乐。我接下来试试

  scene.registerUpdateHandler(detect);
    IUpdateHandler detect = new IUpdateHandler() {
    @Override
    public void reset() {
    }

    @Override
    public void onUpdate(float pSecondsElapsed) {
        MoveYModifier mod2=new MoveYModifier(0.8f,plSprite.getY(),plSprite.getY()+10);
        plSprite.registerEntityModifier(mod2);
    }
};

和我键入屏幕时的代码

  @Override
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
    Log.d("myLogs","touch");
    MoveYModifier mod2=new MoveYModifier(0.1f,plSprite.getY(),plSprite.getY()-40);
            plSprite.registerEntityModifier(mod2);
    return false;  //To change body of implemented methods use File | Settings | File Templates.
}

但它不起作用,问题在于下一步。精灵只会下降。

1 个答案:

答案 0 :(得分:1)

假设你有飞行猪游戏类似Flappy Bird。首先,你必须创建一个像这样的精灵:(x位置,y位置,纹理区域,顶点缓冲区对象管理器)

然后你附上一个肉体。你必须给你的物理世界,精灵,身体类型(你会对KinematicBody感兴趣)和夹具定义,它们是3个物理属性。

请记住将sprite和注册主体附加到您的物理世界。

最后,当你可以使用我提到的最后一种方法时,你应该将onTouch监听器注册到你的场景。它会对身体施加一股力量。请注意,要跳转,您需要传递负浮点参数。多亏了你的物理世界,如果指定引力,所有运动物体都会掉下来。

Sprite sPig = new Sprite(0, 155, ResourcesManager.getInstance().pig_region, vbom);
pigBody = PhysicsFactory.createBoxBody(physicsWorld, sPig, BodyType.KinematicBody, PhysicsFactory.createFixtureDef(10.0f, 0, 0));

physicsWorld.registerPhysicsConnector(new PhysicsConnector(sPig, pigBody, true, false) {
    @Override
    public void onUpdate(float pSecondsElapsed) {
      super.onUpdate(pSecondsElapsed);
      //you can do some stuff here if you want.
    });
attachChild(sPig);

//in onSceneTouchListener
pigBody.setLinearVelocity(0, -30);

//this is how i create physics world. 100f is y (down) gravitation force.
physicsWorld = new FixedStepPhysicsWorld(60, new Vector2(0, 100.0f), false);
registerUpdateHandler(physicsWorld);

PS你需要包含Box2D扩展名。我建议你看一些教程。