dポイントプレゼントキャンペーン実施中!

こんにちは初めまして。

現在「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*メイン

A 回答 (1件)

上の続きのプログラムです (別アカ)


------------------------------------
;**************自機の移動*******************************
*自機の移動
stick key,15;キー取得
if (key & 1) : myx -= mySpd;←の移動スピード
if (key & 2) : myy -= mySpd;↑の移動スピード
if (key & 4) : myx += mySpd;→の移動スピード
if (key & 8) : myy += mySpd;↓の移動スピード
return
;****************敵機の処理*****************************
*敵機の処理
TKTK +=1
if TKTK >= 300 : TK_STOP = 1

if TK_STOP = 0{
repeat TKMAX;敵の最大数(7)
if TK_KAN >= 210 {
if enemy.cnt = 0{
enemy.cnt = 1;フラグ
emx.cnt = 350 : emy.cnt = 0
TK_KAN == 0
}
}else{
TK_KAN += 1;カウンター
}loop
}
;敵の移動
repeat TKMAX;敵の最大数(7)
if enemy.cnt = 1 : emy.cnt += 1
;左に移動
if TK_KAN >= 210 {
if emy.cnt >= 300{
emx.cnt -= 1 : emy.cnt -= 1
}
}
;ストップ
if TK_KAN >= 210 {
if emx.cnt <= 10 : emx.cnt += 1
}loop
return
;****************自機の←弾******************************
*自機の←弾
getkey key,90;キーチェック,Zキー

repeat MYTMMAX;自機弾の最大数(7)
if(key)&(mytm.cnt = 0)&(TM_CO(0) = TM_WAIT(0)){;連射間隔(10)
mytm.cnt = 1
mytmx.cnt = myx - 10 : mytmy.cnt = myy - 16;自機弾の座標
TM_CO(0) = 0;自機弾のカウンター
}

if mytm.cnt = 1 : mytmy.cnt -= TM_SPD(0);自機弾のスピード(5)
if mytmy.cnt<-16 : mytm.cnt = 0
loop

if TM_CO(0) < TM_WAIT(0) : TM_CO(0)++
return;自機弾のカウンター < 連射間隔(10) : 自機弾のカウンター
;****************自機の→弾******************************
*自機の→弾
getkey key,90;キーチェック,Zキー

repeat MYTMMAX;自機弾の最大数(7)
if(key)&(mytm2.cnt = 0)&(TM_CO(1) = TM_WAIT(1)){;連射間隔(10)
mytm2.cnt = 1
mytmx2.cnt = myx + 15 : mytmy2.cnt = myy - 16;自機弾の座標
TM_CO(1) = 0;自機弾のカウンター
}

if mytm2.cnt = 1 : mytmy2.cnt -= TM_SPD(1);自機弾のスピード(5)
if mytmy2.cnt<-16 : mytm2.cnt = 0
loop

if TM_CO(1) < TM_WAIT(1) : TM_CO(1)++
return;自機弾のカウンター < 連射間隔(10) : 自機弾のカウンター

この回答への補足

この上のプログラムの続きです。
-----------------------------
;***************敵VS弾************************
*敵VS弾
repeat MYTMMAX;自機弾の最大数(7)
if PK == 2 : PK = 0
mytm_cnt = cnt;自機弾についてのカウント数
tmx(0) = mytmx.mytm_cnt : tmy(0) = mytmy.mytm_cnt;自機弾の座標

mytm_cnt2 = cnt;自機弾についてのカウント数
tmx(1) = mytmx2.mytm_cnt2 : tmy(1) = mytmy2.mytm_cnt2;自機弾の座標
;***************あたり判定****************************
MYMY(0) = mytm.mytm_cnt;自機弾フラグ
MYMY(1) = mytm2.mytm_cnt2;自機弾フラグ
if enemy.cnt and MYMY(PK) {
if(emx.cnt < tmx(PK)+8) and (tmx(PK)-32 < emx.cnt) and (emy.cnt < tmy(PK)+16) and (tmy(PK)-32 < emy.cnt){
enemy.cnt = 0;敵のフラグ
mytm.mytm_cnt = 0;自機弾フラグ
mytm2.mytm_cnt2 = 0;自機弾フラグ
}
}
PK++
loop
return

補足日時:2011/02/23 22:50
    • good
    • 0
この回答へのお礼

a

お礼日時:2011/02/26 06:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!