2011-01-12 14 views
1

私がやっていることは、物体(プレーヤー)が弾丸を一直線に発射することです「ガン」が35度の角度で指されている場合(スクリーンの右に0度が360度反時計回りになる)、弾丸は一定の速度で移動します(例えば、5)を原点からその角度で表示する。点Aから点Bまで直線で一定の速度で移動する

私は私の動きをやっている方法は私はすべての図面を扱うだろうと何をしていないし、その後、それはちょうど垂直速度と水平速度すでに存在しているxとyに変更するのは難しく、その角度で一定の速度で移動するのに適した水平と垂直の速度が追加されるので、どんな助けにも感謝します。 -Heath

答えて

1

最後に呼び出されてからの時間を測定するupdate()メソッドを作成し、それに基づいて箇条書きの場所を更新することはできますか?
弾丸がほぼ一定の速度で動くようになります。

public class Bullet { 
    // speed is in units/second 
    // angle is in radians 
    double x; 
    double y; 
    double sv; 
    double sh; 
    public Bullet(double x, double y, double angle, double speed) { 
    this.x = x; 
    this.y = y; 
    sv = Math.sin(angle)*speed; 
    sh = Math.cos(angle)*speed; 
    last_updated = System.currentTimeMillis(); 
    } 

    long last_updated; 

    public void update() { 
    long time_elapsed = System.currentTimeMillis() - last_updated; 
    last_updated = System.currentTimeMillis(); 
    this.x += this.hs*(this.time_elapsed/1000) 
    this.y += this.vs*(this.time_elapsed/1000) 
    } 
} 

たぶん、あなたは、あなたの座標系に適したものとするために角度を再生する必要があります:

EDIT2(FPSが十分な大きさであることを考えると)。 (角度を無効にする、Piを追加/減算するなどのようなものです)

これは役立ちます。

+0

私はそれを試みることができましたが、私はまだそれが正しく動かないようにします – Foxx

+0

そのメソッドのコードを投稿できますか?どこかpastebin.comのように。私たちはそれを見て何かを提案することができます。 – Rogach

+0

そのかなり多く 作成:bullet(x、y、vs、hs)/ update:update(){this.x + = vs; this.y + = hs;} – Foxx

関連する問題