tiutiu2 の回答履歴
- HSP 自機狙い
こんにちは。HSPでSTGを制作しております まず「自機狙い」を作ることに成功しました ですが2つ弾を用意した場合、エラーが出てしまいます(異なる形を持つ配列変数に代入しました) 原因を探ってみたのですがいまいちわからない状態です ちなみに「ene(0)」「ene(1)」となっているのは後でまとめるからです。 何故まとめるかというと、「ene」「ene1」「ene2」・・・と単純に張り付けするとソースが大きくなるからです。 どこの何が原因でこのようなエラーが出るのかわかる方いましたら教えてください --ソース-- 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 ;敵 ene(0) = 0 ;フラグ enex(0) = 0 : eney(0) = 0 ;座標 ene(1) = 0 ;フラグ enex(1) = 0 : eney(1) = 0 ;座標 ;敵弾 TM(0) = 0 ;フラグ TMX(0) = 0 : TMY(0) = 0 ;座標 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 ;敵 if ene(0) = 1 : pos enex(0),eney(0) : gmode 4,58,45,255 : gcopy 3,0,0 if ene(1) = 1 : pos enex(1),eney(1) : gmode 4,58,45,255 : gcopy 3,0,0 ;敵弾 if TM(0) = 1 : pos TMX(0),TMY(0) : gmode 4,15,15,255 : gcopy 4,0,0 if TM(1) = 1 : pos TMX(1),TMY(1) : gmode 4,15,15,255 : gcopy 4,0,0 redraw 1 : await 1 goto *メイン ;*************敵弾処理****************** *敵弾処理 if TM(0) = 0 { ;敵弾フラグ TMS = 2 ;敵弾速さ ;敵X座高 ENX(0) = 15 ;敵Y座高 ENY(0) = 150 r = atan(myy-30 - ENY(0) , myx-13 - ENX(0)) DKxv(0) = cos(r) * TMS ;敵弾x移動量(2) DKyv(0) = sin(r) * TMS ;敵弾y移動量(2) TMX(0) = ENX(0)+20 : TMY(0) = ENY(0)+40 ;敵弾初期座標 TM(0) = 1 ;敵弾フラグ } if TM(0) = 1 { ;敵弾フラグ TMX(0) = DKxv(0) + TMX(0) ;敵弾x軸座標指定 TMY(0) = DKyv(0) + TMY(0) ;敵弾x軸座標指定 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 ;当たり判定 dx = myx+0 - TMX(0) dy = myy+10 - TMY(0) dx*=dx dy*=dy if(dx + dy <= 49){ TM(0) = 0 : HIT += 1 } }
- ベストアンサー
- sakana20zb
- その他(プログラミング・開発)
- 回答数1
- HSP 耐久力のある敵
こんにちは。HSPでSTGを制作しております そこで「耐久力のある敵」を作ったのですが 【敵と敵2のヒットが一緒になってしまうので、敵と敵2が同時に消えてしまいます】 原因は「敵と敵2」を一緒にしていることなんですが、 一緒にしないとこの先ソースが大きくなってしまうため一緒にするしかないと思ってます この場合選択肢がいくつかあると思います 1:敵を一緒にまとめたソース(これ)で解決する 2:敵を一緒にまとめる方法を変えて改善するか 3:当たった時の処理を変えるか 1を選択しなんとかしたいのですが、何かもっとよい方法がありましたら教えてください それではよろしくお願いします -- ソース -- screen 0,380,450 buffer 1 // picload "自機.bmp" gsel 0,1 buffer 3 // picload "でかい妖精2.bmp" gsel 0 myx = 150 : myy = 350 ;自機座標 mySpd = 4 ;自機スピード ;←自機弾 TMMAX = 100 dim SHOT,100 dim SX,100 : dim SY,100 ;妖精 DKMAX = 2 repeat DKMAX DK_ene(DTK) = 0 DK_enex(DTK) = 0 : DK_eney(DTK) = 0 DTK++ loop ;****************メインループ************************* *メイン redraw 2 : color 20,20,20 : boxf ;****************カウンター************************* color 255,0,0 pos 10,90 : mes "←敵カウンター " + HIT pos 10,110 : mes "→敵カウンター " + HIT2 ;**************************************************** gosub *弾移動 gosub *自機移動 gosub *妖精 gosub *敵VS弾 ;自機 pos myx,myy : gmode 4,29,42,255 : gcopy 1,1,0 ;妖精 DTK = 0 repeat DKMAX if DK_ene(DTK) = 1 : pos DK_enex(DTK),DK_eney(DTK) : gmode 4,58,45,255 : gcopy 3,0,0 DTK++ loop ;自機弾 repeat TMMAX if SHOT(cnt) = 1{ pos SX(cnt),SY(cnt) : gmode 2,9,8,255 : gcopy 1,1,43 }loop redraw : await 15 goto *メイン ;**************自機の移動******************************* *自機移動 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 ;****************弾の移動****************************** *弾移動 getkey keyZ,90 ;Zキー repeat TMMAX if (keyZ) and SHOT(cnt) = 0 and rensya = 0 { SHOT(cnt) = 1 : SX(cnt) = myx + 10 : SY(cnt) = myy - 10 : rensya = 500 } if SHOT(cnt) = 1 : SY(cnt) -= 10 if SY(cnt) < 0 : SHOT(cnt) = 0 if rensya > 0 : rensya -= 1 loop return ;****************妖精***************************** *妖精 ;敵X座高 DK_ENX(0) = 100 DK_ENX(1) = 200 ;位置 DTK = 0 repeat DKMAX if DK_ene(DTK) = 0 : DK_ene(DTK) = 1 : DK_enex(DTK) = DK_ENX(DTK) : DK_eney(DTK) = 150 DTK++ loop return
- ベストアンサー
- sakana20zb
- その他(プログラミング・開発)
- 回答数2
- HSP あたり判定
こんにちは初めまして。 現在「HSP」でSTG(シューテングゲーム)を作っております。 当たり判定がいまいち反応が悪くって困っております。 原因がわかる方いましたらよろしくお願いいたします。 ●解決したいこと【当たり判定がちゃんと綺麗に処理される】 プログラム -------------------------------------------------- screen 0,380,450 buffer 1 // picload "自機.bmp" gsel 0,1 buffer 2 // picload "敵.bmp" gsel 0,1 myx = 150 : myy = 350 ;自機の座標 mySpd = 5 ;自機スピード ;←弾 TM_SPD(0) = 5 ;自機弾のスピード(5) TM_CO(0) = 0 ;自機弾のカウンターの初期化(連射間隔を調整) TM_WAIT(0) = 10 ;連射間隔(10) ;→弾 TM_SPD(1) = 5 ;自機弾のスピード(5) TM_CO(1) = 0 ;自機弾のカウンターの初期化(連射間隔を調整) TM_WAIT(1) = 10 ;連射間隔(10) MYTMMAX = 7 ;自機弾の最大数 repeat MYTMMAX ;自機弾の最大数(7) ;←弾 mytm.cnt = 0 ;自機弾フラグ mytmx.cnt = 0 : mytmy.cnt = 0 ;自機弾の座標 ;→弾 mytm2.cnt = 0 ;自機弾フラグ mytmx2.cnt = 0 : mytmy2.cnt = 0 ;自機弾の座標 loop ;敵 TKMAX = 7 ;敵の最大数 repeat TKMAX ;敵の最大数(7) enemy.cnt= 0 ;敵フラグ emx.cnt = 0 : emy.cnt = 0 ;敵の座標 loop ;****************メインループ************************* *メイン redraw 2 : color 20,20,20 : boxf ;敵 gosub *敵機の処理 ;自機 gosub *自機の移動 gosub *自機の←弾 gosub *自機の→弾 ;当たり判定 gosub *敵VS弾 ;自機 pos myx,myy : gmode 2,29,42,255 : gcopy 1,1,0 ;敵 repeat TKMAX ;敵の最大数(7) if enemy.cnt = 1 : pos emx.cnt,emy.cnt : gmode 2,26,22,255 : gcopy 2,1,1 loop ;自機弾 repeat MYTMMAX ;自機弾の最大数(7) ;←弾 if mytm.cnt = 1 { pos mytmx.cnt,mytmy.cnt gmode 2,9,8,255 : gcopy 1,1,43 } ;→弾 if mytm2.cnt = 1 { pos mytmx2.cnt,mytmy2.cnt gmode 2,9,8,255 : gcopy 1,1,43 }loop redraw : await 10 goto*メイン
- ベストアンサー
- sakana20zb
- その他(プログラミング・開発)
- 回答数1