【问题标题】:Move Body forward depending the direction is looking根据所看的方向向前移动身体
【发布时间】:2015-09-27 21:48:24
【问题描述】:

我正在使用 GDX 和 Box2D 制作一款太空射击水平滚动类型的游戏。我无法弄清楚子弹如何根据所看的方向向前移动。例如,如果子弹向右看,我使用 applyLinearImpulse,但如果子弹向上看,它就不起作用,它会一直向右移动。

这是子弹对象的代码

        BodyDef bd = new BodyDef();
    bd.bullet = true;
    bd.fixedRotation = true;
    bd.position.set(v);
    bd.type = BodyType.KinematicBody;
    bd.fixedRotation = true;

    CircleShape circle = new CircleShape();
    circle.setRadius(SIZE);

    FixtureDef fd = new FixtureDef();
    fd.shape = circle;
    fd.isSensor = true;

    World world = Game.level.getWorld();

    body = world.createBody(bd);
    @SuppressWarnings("unused")
    Fixture fixture = body.createFixture(fd);

    body.setTransform(body.getPosition(), magnitude);
    body.setLinearVelocity(SPEED, 0);

    circle.dispose();

【问题讨论】:

    标签: java libgdx box2d


    【解决方案1】:

    如果子弹已经向右移动,而您想让它向上移动,请尝试SetVelocity。它会直接改变它的速度,而不是 ApplyImpulse,它试图让它看起来更逼真。

    【讨论】:

    • 子弹一开始没有移动,我想先将子弹设置为朝向一个方向(例如顶部或右上角),然后再施加一个力让子弹向前移动。所以如果子弹向上看,子弹会移动到顶部,或者如果子弹向上看,子弹会朝那个方向前进
    • 那么我不明白你的问题;只需传递 ApplyLinearImpulse 其他参数,使其朝着您想要的方向移动。请注意ApplyLinearImpule 的第一个参数是相对于世界的,而不是对象的旋转。所以如果你给它传递一个指向右边的向量,它总是会向右移动,而不管你的身体如何旋转。简而言之:您必须自己跟踪旋转并使用适当的矢量施加脉冲。这能回答你的问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多