2017-05-22 6 views
0

私はJava Processing 3を使用しており、2人のタンクゲームを作っています。以下は私のタレットのコードです。現在、私はtDirのマウスの後ろにある砲台の目標を持っています。上向き矢印と下向き矢印を使用して目的を0〜90度上と下に移動したいと考えました。Java Processing目的の矢印キーを使用

どうすればいいですか?ありがとう。

/* 
Uzair 
*/ 

PVector mPos; //mouse position 
PVector tPos; //position of turret 
PVector tDir; //the firing direction of the turret 
int gravMult = 3; 

void setup() { 
    size(1200, 600); 
    init(); 
} 

void init() { 
    //PVector initializations 
    mPos = new PVector(); //zero til mouse x and y exist 
    tPos = new PVector(width/8, height); 
    tDir = new PVector(); // 
} 
void draw() { 
    //clear last frame 
    background(100,100,140); 

    //check keys to see if there is new key input for turret 
    if (keyPressed){ 
    if (key == 'w'){ 
     tDir.y -= 10; 
    } 
    else if (key == 's'){ 
     tDir.y += 10; 
    } 
    } 

    mPos.set(mouseX, mouseY); 
    tDir = PVector.sub(mPos, tPos); 
    tDir.normalize(); 
    tDir.mult(50); 

    //draw 
    fill(255); 
    ellipse(tPos.x, tPos.y, 40, 40); 
    strokeWeight(5); 
    line(tPos.x, tPos.y, tPos.x + tDir.x, tPos.y + tDir.y); 
    fill(255, 0, 0); 
    ellipse(tPos.x + tDir.x, tPos.y + tDir.y, 10, 10); 
} 
+1

Javaが処理されていません。あなたは処理モードの代わりにJavaモードになる人々をたくさん集めるつもりです。だから、これはJava固有の問題ではないので、Javaへの参照を削除することをお勧めします。 – Makoto

答えて

1
は、0〜90度

から上方及び下方目指し

これは角度/回転をインクリメントの代わりに現在あるようにY位置をインクリメントするように聞こえます。

極座標(角度/半径)をデカルト座標(x、y)に変換する必要があります。

これ

は、式を使用して行うことができます。

x = cos(angle) * radius 
y = sin(angle) * radius 

あなたのケース

tDir.x = cos(angle) * 50; 
tDir.y = sin(angle) * 50; 

で...それは心のP-VECTORに保つ価値があるものの、すでにfromAngle()を経由してこの機能を提供します。

PVector mPos; //mouse position 
PVector tPos; //position of turret 
PVector tDir; //the firing direction of the turret 
int gravMult = 3; 
//angle in radians 
float angle = 0; 

void setup() { 
    size(1200, 600); 
    init(); 
} 

void init() { 
    //PVector initializations 
    mPos = new PVector(); //zero til mouse x and y exist 
    tPos = new PVector(width/8, height * .75); 
    tDir = new PVector(); // 
} 
void draw() { 
    //clear last frame 
    background(100,100,140); 

    //check keys to see if there is new key input for turret 
    if (keyPressed){ 
    if (key == 'w'){ 
     angle -= 0.1; 
     tDir = PVector.mult(PVector.fromAngle(angle),50); 
    } 
    else if (key == 's'){ 
     angle += 0.1; 
     tDir = PVector.mult(PVector.fromAngle(angle),50); 
    } 
    }else if(mousePressed){ 
    mPos.set(mouseX, mouseY); 
    tDir = PVector.sub(mPos, tPos); 
    tDir.normalize(); 
    tDir.mult(50); 
    } 
    //draw 
    fill(255); 
    ellipse(tPos.x, tPos.y, 40, 40); 
    strokeWeight(5); 
    line(tPos.x, tPos.y, tPos.x + tDir.x, tPos.y + tDir.y); 
    fill(255, 0, 0); 
    ellipse(tPos.x + tDir.x, tPos.y + tDir.y, 10, 10); 
} 

あなたはまた、役に立つthis answerを見つけるかもしれない:

はここでこのアイデアを使用するように微調整あなたのコードです。

1

スタックオーバーフローが本当にタイプの質問「どのように私はこれを行うのですか」一般用に設計されていません。それは具体的なものです。「私はXを試しましたが、Yは期待されましたが、代わりにZがあります。つまり、私は一般的な意味で助けようとします。

問題を小さなステップに分割し、それらのステップを1つずつ実行する必要があります。矢印キーを押したときに何かをコンソールに表示する別個のスタンドアロンスケッチを作成できますか?

スケッチとは別に、スケッチの上部にある変数に位置または角度を格納する別のスケッチを作成できますか?これらの変数を使用してシーンを描画し、再びそれ自体で作業します。

自分で作業している場合は、ユーザーが矢印キーを押したときにスケッチレベルの変数を変更することでそれらを組み合わせることが考えられます。

具体的な手順を踏まえていない場合は、新しい質問にMCVEと投稿してください。がんばろう。

関連する問題