2012-11-04 49 views
2

大家好我想要开发像Jetpack这样的游戏,所以我想设置一个通常推下来的重力,当用户点击屏幕重力变化推高。我搜索了一个星期的教程,解释如何做到这一点,但我没有找到我搜索的内容。有人可以向我解释如何做到这一点,或发布指向教程的链接?物理与Box2d和Andengine教程

谢谢!

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 

     }}); 

回答

3

当用户触摸屏幕时,你不应该改变的严重性,因为它并不想被这样做。 当他触摸屏幕时,只需应用LinearImpulse(检查它是否已经达到最大速度)或类似的东西,以使其变得更高。重力不应该改变,因为它应该总是吸引你的所有物理对象。如果你改变了重力,你就改变了所有物体的行为,而不仅仅是一个物体。

编辑

为了有物理引擎工作,你必须调用每个渲染PhysicsWorld类的步骤()方法。 Andengine的问题在于,您根本不像Andengine那样直接访问render()方法。 所以你必须做的是在你的onLoadEngine()方法返回的Engine对象上注册一个IUpdateHandler。 这样,接口的onUpdate()方法将在每个渲染时被调用,在这里您可以调用step()方法来使物理部分工作。浮点值告诉你自从上次渲染以来经过了多少秒,但是你不必去关心它。该方法被称为每秒多次。

希望它有帮助。

EDIT 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() {} 
}); 
+1

啊好的,谢谢你..但我要的是如何设置的严重性......众所周知,代码示例,我可以传递给LinearImpulse :) –

+1

创建Box2DWorld时会设置重力。然后你也可以用setGravity()方法改变它。 – Flawyte

+1

我已经做了这个,但它不工作! ---注意--- –