Java libgdx 匀速方向发射子弹

标签 java android libgdx

我试图让我的子弹以恒定的速度向(输入坐标)发射。 到目前为止,我能够让它朝这个方向射击,但我点击(触摸,Android 游戏)越远,子弹飞得越快。我通过缩放尝试了不同的方法,但惨败了,我一个月前才开始编码,并将其用作一个项目,以在我开发完整的游戏之前增加我对事物如何工作的了解,但在这方面遇到了太多麻烦。

这就是我一直用来让子弹朝我想要的方向移动的方法,前面带有//的代码是我在浏览互联网时获得的其他示例,希望得到我想要的东西。我想过不使用速度来设置方向,但我不知道还有其他方法。

编辑:总而言之,我无法让所有子弹以相同的速度移动,我点击得越远,子弹的速度就越高。

大家有什么帮助吗?非常感谢

玩家等级:

    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);
    }
}

项目符号类别:

    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
    }

最佳答案

嗯,标准化 vector 应该相当简单。取出你的分量,将它们平方,然后将它们加在一起(毕达哥拉斯定理),然后将每个分量除以这个结果。 IE。 vX = (targetX - position.x)/Math.sqrt(((targetX - position.x) * (targetX - position.x)) + ((targetY - position.y) *(targetY - position.y )))

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

关于Java libgdx 匀速方向发射子弹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24245043/

相关文章:

java - 如何在SWT Canvas 上绘制选择框?

java - 为给定位置精度的 Google map 确定合理的缩放级别

java - JBox2D libGDX 中的自顶向下汽车运动问题

java - 使用 libgdx (java) 的碰撞检测 Tmx map

java - 如何从图库中选择多张图片?

java - 参数索引超出范围(2 > 参数个数,即 1)

Java将时间戳对象转换为日期格式

android - 如何通过 Android 应用程序编辑日历事件

java - Android 2.2 SurfaceView#onTouchEvent() 每个事件被调用两次

java - 如何在 LibGDX 中的按钮上切换 "over"样式?