processing 動作済みの弾の初期化と、移動する自機のある時点の座標に向かって移動するコード

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • gameReset() に、弾が初期化前と同じ動きになるように初期化するコードを書きたい。
  • 自機の座標の取得を発射時のみにして、自機を追跡し続けるのを止めたい。

前提

・processing で弾幕を避けるゲームを作っています。
gameReset() は、ゲーム終了かリスタート時に動作させるもので、自機の初期化と動作するタイミングなどについては既に完成済みです。
弾の初期化が、うまくいかないのでアドバイスが欲しいです。

・自機の座標を取得して、弾を自機に向かって動かすコードは書けたのですが、自機を追跡し続けてしまう。
自機を動かしても最初に取得した座標に向かうコードについてアドバイスが欲しいです。

該当のソースコード

processing

1import java.util.List;2import java.util.ArrayList;3 4List<Unit> unit = new ArrayList<Unit>();5List<Unit> b = new ArrayList<Unit>();6 7PVector p, v;8float rad;9int m, n;10 11void setup(){12 size( 800, 800 );13 14 p = new PVector( 0, 0 );15 v = new PVector( 0, 0 );16 17 unit.add( new User( 1, p, v, color( 255 ) ) );18 19 n = 0;20 m = 0;21 22}23 24void draw(){25 background( 0 );26 translate( width / 2, height / 2 ); //原点を中央に配置27 28 unit.get( 0 ).move(); //ユーザーを動かす29 30 if( frameCount % 15 == 0 ){ //0.25秒毎に、弾を生成し連射31 if( n <= 16 ){32 b.add( new Bullet( 2, new PVector( 600 * cos( radians( 22.5 * n ) ), 600 * sin( radians( 22.5 * n ) ) ), new PVector( 0, 0 ), color( 255 ) ) );33 n++;34 }35 }36 for( n = 0; n < b.size(); n++ ){37 b.get( n ).move();38 }39-----------------------------------------------40class Bullet extends User{ //ウィンドウの中心を原点にした円周上に配置して、自機の座標に弾を撃つクラス41 42 Unit u = unit.get( 0 ); //ユーザーのインスタンス呼び出し43 44 float rad, x, y, r, dr;45 46 Bullet( int id, PVector p, PVector v, color c ){47 super( id, p, v, c );48 }49 50 void setRad( float rad ){51 this.rad = rad;52 }53 54 @Override55 void setP( PVector p ){56 this.x = super.p.x;57 this.y = super.p.y;58 }59 60 @Override61 void setV( PVector v ){ 62 this.r = v.x;63 this.dr = v.y;64 }65 66 @Override67 void myShape(){ 68 fill( super.c );69 noStroke();70 71 pushMatrix();72 ellipse( this.r * cos( this.rad ) + this.x, this.r * sin( this.rad ) + this.y, 15, 15 );73 popMatrix();74 }75 76 void Reset(){77 if( this.x <= -650 || this.x >= 650 || this.y <= -650 || this.y >= 650 ){78 super.id = 0;79 }80 if( super.id == 0 ){81 super.p.set( 600 * cos( radians( 22.5 * n ) ), 600 * sin( radians( 22.5 * n ) ) );82 super.v.set( 0, 0 );83 }84 }85 86 void update(){87 if( super.id == 2 ){88 this.setRad( atan2( u.getP().y - this.y, u.getP().x - this.x ) );89 this.setP( new PVector( 600 * cos( radians( 22.5 * n ) ), 600 * sin( radians( 22.5 * n ) ) ) );90 this.setV( new PVector( r, 10 ) );91 }92 93 this.r += this.dr;94 }95 96 void move(){97 this.update();98 this.myShape();99 this.Reset();100 }101 102}103-------------------------------------------------------104void gameReset(){105 unit.set( 0, new User( 1, p, v, color( 255 ) ) );106 107}

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

・processing-4.0.1
・ほかのクラス(自機やゲーム終了やリスタートなど画面遷移、自機の操作等)は完成済み

コメントを投稿

0 コメント