STG制作で詰まり、どうしてもわからなくなったのでお聞きしたいと思います。
「1匹の敵」が「自機狙い」を出すことは出来たのですが、
「2匹目の敵」が「自機狙い」を出すようにするとエラーが出てしまいます。
異なる形を持つ配列変数に代入しました
というエラーなので詳しく調べたつもりですが、いまいち原因が取り除けなくって困ってます。 (↓のソースの87行目) どっか勘違いを起こしているかも・・・はまっている感じがするのでまずい・・・
TMX(0) = 0 : TMY(0) = 0 ;座標 TMX(1) = 0 : TMY(1) = 0 ;座標ちなみに「TMX(0)」「TMY(1)」と()を使っているのは後でまとめてソ−スを小さくさせるためです。
単純に「TMX」「TMX2」とかにした場合正常に動き希望通りの動作になります。
作り方自体がちっと怪しいかも。作り方が悪かったら指摘してもらえるとうれしいです。
どのようにすればエラーが無く動き、希望する動きになりますでしょうか?
アドバイス等よろしくお願いいたします。
やりたいこと【自機狙いを2つだす】
そしてその後の事を考えて「ソースが大きく」ならないようにする。
--ソース--
screen 0,380,450 buffer 1 // picload "自機.bmp" gsel 0,1 buffer 3 // picload "でかい妖精2.bmp" gsel 0 buffer 4 // picload "青色.bmp" gsel 0 myx = 150 : myy = 200 ;自機座標 mySpd = 4 ;自機スピード ;敵 enex(0) = 0 : eney(0) = 0 ;座標 enex(1) = 0 : eney(1) = 0 ;敵弾 TM(0) = 0 ;フラグ TMX(0) = 0 : TMY(0) = 0 ;座標 ;2 TM(1) = 0 ;フラグ TMX(1) = 0 : TMY(1) = 0 ;座標 ;****************メインループ*********** *メイン redraw 0 : color 20,20,20 : boxf ;*************************************** gosub *自機の移動 gosub *敵 ;自機 pos myx,myy : gmode 4,29,42,255 : gcopy 1,1,0 ;敵 pos enex(0),eney(0) : gmode 4,58,45,255 : gcopy 3,0,0 pos enex(1),eney(1) : gmode 4,58,45,255 : gcopy 3,0,0 redraw 1 : await 1 goto *メイン ;****************敵機処理*************** *敵 enex(0) = 15 : eney(0) = 150 ;敵座標 ;敵弾処理 if TM(0) = 0 { TMS = 4 ;敵弾速さ r = atan(myy - eney(0), myx - enex(0)) ; 自機y - 敵y , TMxv(0) = cos(r)*TMS ;敵弾x方向 TMyv(0) = sin(r)*TMS ;敵弾y方向 TMX(0) = enex(0) : TMY(0) = eney(0) ;敵弾初期座標 ;敵弾x = 敵x TM(0) = 1 ;弾フラグ } if TM(0) = 1 { TMX(0) = TMxv(0) + TMX(0) ;敵弾x TMY(0) = TMyv(0) + TMY(0) ;敵弾y ; 敵弾 = 角度 + 敵弾 ;敵弾 pos TMX(0),TMY(0) : gmode 4,15,15,255 : gcopy 4,0,0 if TMX(0)>380 : TM(0) = 0 if TMX(0)<0 : TM(0) = 0 if TMY(0)>450 : TM(0)= 0 if TMY(0)<0 : TM(0) = 0 } ;****************2弾目****************** ;敵弾処理 enex(1) = 295 : eney(1) = 150 ;敵座標 ;敵弾処理 if TM(1) = 0 { TMS = 4 ;敵弾速さ r = atan(myy - eney(1), myx - enex(1)) ; 自機y - 敵y , TMxv(1) = cos(r)*TMS ;敵弾x方向 TMyv(1) = sin(r)*TMS ;敵弾y方向 //異なる形を持つ配列変数に代入しました // TMX(1) = enex(1) : TMY(1) = eney(1) ;敵弾初期座標 ; 敵弾 = 敵x TM(1) = 1 ;弾フラグ } if TM(1) = 1 { TMX(1) = TMxv(1) + TMX(1) ;敵弾x TMY(1) = TMyv(1) + TMY(1) ;敵弾y ; 敵弾 = 角度 + 敵弾 ;敵弾 pos TMX(1),TMY(1) : gmode 4,15,15,255 : gcopy 4,0,0 if TMX(1)>380 : TM(1) = 0 if TMX(1)<0 : TM(1) = 0 if TMY(1)>450 : TM(1)= 0 if TMY(1)<0 : TM(1) = 0 } return ;**************自機の移動*************** *自機の移動 stick key,15 ;キー取得 if key & 1 : myx = myx - mySpd ;←の移動スピード if key & 2 : myy = myy - mySpd ;↑の移動スピード if key & 4 : myx = myx + mySpd ;→の移動スピード if key & 8 : myy = myy + mySpd ;↓の移動スピード return