簡體   English   中英

Java libgdx以恆定速度向目標射擊

[英]Java libgdx Shooting bullet at direction with constant speed

我試圖使子彈以恆定的速度向(輸入坐標)發射。 到目前為止,我能夠使它朝特定方向射擊,但是我單擊(觸摸,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
    }

好吧,歸一化向量應該非常簡單。 拿起組件,將它們平方,然后將它們加在一起(畢達哥拉斯定理),然后將每個組件除以該結果。 vX = (targetX - position.x)/Math.sqrt(((targetX - position.x) * (targetX - position.x)) + ((targetY - position.y) *(targetY - position.y )))

然后,您可以將vX乘以某個常數,並對vY進行相同操作,然后設置速度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM