2017-03-29 8 views
0

私は処理が新しく、私は船から弾丸を撃つメカニックのスペースインベーダーを作成しようとしていますが、私がクリックしたX座標から弾丸を撃ち、X軸を上り、船から離し続けます。私はmouseClickedを使ってみようとしていますが、mouseXをたどっていたり、Y軸上を動かさなかったりすると、どんな助けにも感謝しています。クリックした場所から移動するオブジェクトを作成する方法

Hero theHero; 
Bullet theBullet; 

void setup(){ 
    size(300,600); 
    theHero = new Hero(color(255,0,0),mouseX,mouseY); 
    theBullet = new Bullet(color(255,255,0),300,600,-4); 
} 

void draw(){ 
background(255); 
theHero.move(); 
theHero.display(); 
theBullet.displayb(); 
theBullet.mouseClicked(); 
} 

class Hero { 
color c; 
float xpos; 
float ypos; 

Hero(color tempC,float tempXpos, float tempYpos){ 
    c = tempC; 
    xpos = tempXpos; 
    ypos = tempYpos; 
} 

void display() { 
    stroke(0); 
    fill(c); 
    rectMode(CENTER); 
    rect(xpos, ypos, 20, 10); 
} 

void move() { 
xpos = mouseX; 
ypos = 580; 

} 
} 

class Bullet { 
color c; 
float xpos; 
float ypos; 
float yspeed; 

Bullet(color tempC, float tempXpos, float tempYpos, float tempYspeed) { 
    c = tempC; 
    xpos = tempXpos; 
    ypos = tempYpos; 
    yspeed = tempYspeed; 
} 

void displayb() { 
    stroke(0); 
    fill(c); 
    rectMode(CENTER); 
    rect(xpos, ypos, 5, 5); 
} 



void mouseClicked(){ 
    xpos = mouseX; 
    ypos = ypos + yspeed; 
    if (ypos < 0) { 
    ypos = 580; 
    xpos = mouseX; 

    } 
} 
} 

答えて

1

そのあなたがのmouseClicked()メソッドにドローループのすべてのフレームを呼び出しているので。常に弾丸のxposをmouseXの位置に変更します。 draw()関数からtheBullet.mouseClicked()を削除します。

また、箇条書きオブジェクトの配列を作成する必要があります。そして、それぞれを描く。 mouseClicked()(マウスがクリックされるたびに呼び出されます)では、現在のHero位置のxposで新しいBulletオブジェクトを作成します。これは次のようになります。あなたは配列を必要とする弾丸オブジェクトのすべてを作成して描画するために

void mouseClicked(){ 
    bulletCount++; 
    float startX = theHero.xpos; 
    bullets[bulletCount] = new Bullet(color(255,0,0),startX,theHero.ypos, -5 /*YSPEED*/); 
} 

。これは、作成されたので、同様に表示することができる。

Hero theHero; 
public Bullet[] bullets = new Bullet[10000]; 
public static int bulletCount = 0; 
void setup(){ 
    size(300,600); 
    theHero = new Hero(color(255,0,0),mouseX,mouseY); 
} 

void draw(){ 
background(255); 
for(int i = 1; i <= bulletCount;i++){ 
    bullets[i].updatePos(); 
    bullets[i].displayb(); 
} 
theHero.move(); 
theHero.display(); 
} 

アイブはまた、Y速度によってフレーム毎に、そのY位置をインクリメント弾丸オブジェクトにupdatePos()を加えました。完全なコードが必要な場合は、このペーストビンをコピーしてください:​​

+0

ありがとうございました! –

関連する問題