gpt4 book ai didi

android - 使用 Box2d 和 Andengine 的物理教程

转载 作者:搜寻专家 更新时间:2023-11-01 09:04:07 25 4
gpt4 key购买 nike

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

}});

最佳答案

当用户触摸屏幕时,你不应该改变重力,因为它不应该那样做。当他触摸屏幕时,只需应用 LinearImpulse(检查它是否尚未达到最大速度)或类似的东西使其上升。重力不应该改变,因为它应该总是吸引你所有的物理对象。如果您改变重力,您会改变所有对象的行为,而不仅仅是玩家对象。

编辑

要让物理引擎工作,您必须在每次渲染时调用 PhysicsWorld 类的 step() 方法。 Andengine 的问题是您根本不直接访问 render() 方法,因为 Andengine 会处理它。因此,您需要做的是在您在 onLoadEngine() 方法中返回的 Engine 对象上注册一个 IUpdateHandler。这样接口(interface)的 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() {}
});

关于android - 使用 Box2d 和 Andengine 的物理教程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13220800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com