実現したいこと
ここに実現したいことを箇条書きで書いてください。
- 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 @Override 55 void setP( PVector p ){ 56 this.x = super.p.x; 57 this.y = super.p.y; 58 } 59 60 @Override 61 void setV( PVector v ){ 62 this.r = v.x; 63 this.dr = v.y; 64 } 65 66 @Override 67 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
・ほかのクラス(自機やゲーム終了やリスタートなど画面遷移、自機の操作等)は完成済み

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/02/08 00:32
2023/02/08 01:02