Java libgdx以恒定速度射向子弹

时间:2014-06-16 13:35:40

标签: java android libgdx

我试图让我的子弹以恒定的速度射向(输入坐标)。 到目前为止,我能够让它朝着这个方向射击,但是我点击(触摸,安卓游戏)的距离越快。我已经通过缩放尝试了不同的方法但是失败了,我在一个月前开始编码并使用它作为一个项目来增加我对完成游戏之前的工作方式的了解但是对此有太多麻烦。

这是我一直用来让子弹向我想要的方向移动,前面的//代码是我在浏览互联网时获得的其他样本,希望得到我想要的东西。我曾想过不使用速度来设定方向,但我不知道另一种方法。

编辑:总之,我无法让所有的子弹以相同的速度移动,我点击的速度更快,更高速度的子弹有。

任何帮助人?非常感谢

玩家等级:

    public void update(float delta) {
    if (Gdx.input.isTouched()) {
        if (System.currentTimeMillis() - lastShot >= FIRE_RATE) {
            bullets.add(new Bullet(position.x + 6,position.y + 6,4,4,Gdx.input.getX() / 2,Gdx.input.getY() / 2));
            lastShot = System.currentTimeMillis();
        }
    }
    for (int i=0;i<bullets.size();i++) {
        bullets.get(i).update(delta);
    }
}

Bullet Class:

    public Bullet(float x, float y, int width, int height, float targetX, float targetY) {
    this.width = width;
    this.height = height;
    position = new Vector2( x , y );
    velocity = new Vector2( 0 , 0 );
    velocity.set(targetX - position.x,targetY - position.y);
    //velocity.set(targetX - position.x, targetY - position.y).nor().scl(Math.min(position.dst(targetX, targetY), speedMax));
}

public void update(float deltaTime) {
    //position.add(position.x + speedMax * deltaTime * ax,position.y + speedMax * deltaTime * ay);
    position.add(velocity.x * deltaTime, velocity.y * deltaTime);
    //velocity.scl(1 - (0.98f * deltaTime)); 
    // Linear dampening, otherwise the ball will keep going at the original velocity forever
    }

1 个答案:

答案 0 :(得分:0)

那么,归一化矢量应该相当简单。取你的组件,将它们加起来,然后将它们加在一起(毕达哥拉斯定理),然后用这个结果除去每个组件。即vX = (targetX - position.x)/Math.sqrt(((targetX - position.x) * (targetX - position.x)) + ((targetY - position.y) *(targetY - position.y )))

然后你可以将vX乘以某个常数,并对vY执行相同操作,然后设置你的速度。