シューティングゲームの当たり判定について、今製作中です。
そこで、コンパイルエラーは出ないのですが、
なぜか自機と弾が接触したときの当たり判定が仕事をしないという症状を発症してしまいました。
1つめの弾の当たり判定はうまくいきました。
それを真似して、2つめの弾の当たり判定も確かめましたが、それもうまくいきました。
ですが、3つめの弾の当たり判定を確かめたとき、3つめの弾の当たり判定がないことに気がつきました。
3つめの当たり判定処理を見直しましたが、僕が見る限りでは抜けたところはありませんでした。
3つめの当たり判定も、1つめの当たり判定を真似して作りました。
これがそのスクリプトです。
ご回答よろしくおねがいします。
*set
screen 0,800,800,0,500,100
title "神々が愛したドナ想郷 Level★ Stage1 ~八千億のドナの神~"
//ロード背景
color 0,0,255 : boxf
pos 10,10 : font "MS 明朝",30,0 : color 255,0,0 : mes "NOW LOADING..."
//画像ファイルを読み込む
buffer 2
picload "images/systemimage1.jpg" : gsel 0,1
buffer 3
picload "images/background1.bmp" : gsel 0,1
buffer 4
picload "images/jiki.bmp" : gsel 0,1
buffer 5
picload "images/moji1.bmp" : gsel 0,1
buffer 6
picload "images/tama1.bmp" : gsel 0,1
//音声ファイルを読み込む
mmload "sounds/dv1.wav",1
mmload "sounds/bgm1.mp3",2
//変数を作成
dim v,100
dim sys,100
dim tekix,100
dim tekiy,100
dim flag,100
dim i,100
dim tamax,100
dim tamay,100
dim n,1000
xx=390 : yy=650
speed = 2
hp = 10
score = 0
muteki = 0
;n
//bgm再生
mmplay 2
wait 100
//goto main
goto *main
*main
repeat
//*下レイヤーから描画していきます
//スコアを増やす
score+=1
//背景
color 255,255,255 : gmode 4,0,0,256
pos 0,0 : gcopy 3,0,0,500,804
//自機の設定//
//自機操作
getkey left,37
getkey up,38
getkey right,39
getkey down,40
if(left=1) : xx-=speed
if(up=1) : yy-=speed
if(right=1) : xx+=speed
if(down=1) : yy+=speed
//自機表示
color 255,255,255 : gmode 4,0,0,256
pos xx,yy : gcopy 4,0,0,16,25
//自機移動制限
if(xx>480) : xx-=speed
if(xx<10) : xx+=speed
if(yy>760) : yy-=speed
if(yy<30) : yy+=speed
//自機の設定ここまで//
//文字演出設定
if(sys(0)=0){
color 255,255,255 : gmode 4,0,0,256
pos 230,100 : gcopy 5,0,0,59,417
}
;ループ回数が一定値以上なら、文字を消す
if(cnt>200) : sys(0)=1
//弾表示処理//
//弾表示
if(flag(0)=0){;フラグ0
color 255,255,255 : gmode 4,0,0,256
pos 30+tamax(0),60+tamay(0) : gcopy 6,0,0,20,20
tamax(0)+=1 : tamay(0)+=3
pos 30+tamax(1),60+tamay(1) : gcopy 6,0,0,20,20
tamax(1)+=2 : tamay(1)+=3
pos 30+tamax(2),60+tamay(2) : gcopy 6,0,0,20,20
tamax(2)+=1 : tamay(2)+=1
;条件で指定した全ての弾が画面上から消えれば弾を消去
if(tamay(0)>800)&(tamay(1)>800)&(tamay(2)>800){
flag(0)=1
}
}
//当たり判定
if(flag(0)=0){
//tama1
if(tamax(0)+20>=xx)&(tamax(0)-5<=xx){
if(tamay(0)+20>=yy)&(tamay(0)-5<=yy){
hp-=1 : xx=390 : yy=650 : mmplay 1
}
}
if(tamax(1)+20>=xx)&(tamax(1)-5<=xx){
if(tamay(1)+20>=yy)&(tamay(1)-5<=yy){
hp-=1 : xx=390 : yy=650 : mmplay 1
}
}
if(tamax(2)+20>=xx)&(tamax(2)-5<=xx){
if(tamay(2)+20>=yy)&(tamay(2)-5<=yy){
hp-=1 : xx=390 : yy=650 : mmplay 1
}
}
}
//サイドバー表示
//*これは弾幕表示処理より後に書く
color 255,255,255 : gmode 4,0,0,256
pos 500,-30 : gcopy 2,0,0,1024,1280
;プレイヤーHP
color 0,0,255 : font "MS ゴシック",35 : pos 650,30 : mes ""+hp+""
;スコア
color 0,100,255 : font "MS ゴシック",35 : pos 530,160 : mes ""+score+""
//ループ終了
redraw 1
await 15
redraw 0
loop



