|
|
|
2022/1/2(Sun) 15:50:05|NO.94849
何度も敵にあたると、ネストが深すぎんす。と出てしまいます。
https://hsp.tv/play/pforum.php?mode=all&num=94840
を見て直そうとしましたが、どうしてもrepeatを使うのと、gotoを使うので、無理でした。
解決方法がわかる方、教えてください。
↓内容
*hazime
screen 1,200,150
width ,,300,200
screen 0,550,600
width ,,500,200
gsel 1
//画像読み込み
buffer 2
mes "自"
//picload "zikidona.jpg"
buffer 3
mes "敵"
//picload "スタート玉.png"
//効果音読み込み
//mmload "nn.wav",40
//mmload "shu2noBGM.wav",30,1
gsel 1
mes "shift↑ で低速移動"
goto *hado
stop
*start
gsel 0
cls
frame = 0
randomize
//スタート位置
x = 250.0
y = 400.0
//弾幕情報初期化
maxbullet = 20
dim b ,maxbullet
dimtype b_x ,vartype("double"),maxbullet
dimtype b_y ,vartype("double"),maxbullet
dimtype b_vx ,vartype("double"),maxbullet
dimtype b_vy ,vartype("double"),maxbullet
pos 300,0
font "HG行書体",200
mes "1"
mes "秒"
mes "後"
mes "秒"
pos 10,0
mes "開"
mes "始"
title "1"
wait 10
title "1秒"
wait 10
title "1秒後"
wait 10
title "1秒後開"
wait 10
title "1秒後開始"
wait 20
title "シューティング2game"
font "HG行書体",30
//ループ
mmplay 30
*game
if frame > zikan {
goto *onebos
stop
}
//画面クリア
color 0,255,155
boxf
//移動制御
redraw 0
getkey shiftkey,16
if shiftkey = 1 {
////////////////////
stick key,%1111
if(key & 256):x-=10:if(x<0):x=0
if(key & 512):x+=10:if(x>540):x=540
if(key&1):x-=1:if(x<0):x=0
if(key&2):y-=1:if(y<0):y=0
if(key&4):x+=:if(x>540):x=540
if(key&8):y+=1:if(y>550):y=550
if(frame\1 == 0){
getkey spasekey,32
if spasekey = 1 {
gosub *tama
}
gosub *search
if(nunber != -1){
//玉の〇射
b(nunber) = 1
b_x(nunber) = rnd(550)
b_y(nunber) = 0.0
b_vx(nunber) = -0.5+0.01*rnd(100)
b_vy(nunber) = 1.0+0.01*rnd(100)
}
}
////////////////////
goto *tesokido
}
stick key,%1111
if(key & 256):x-=20:if(x<0):x=0
if(key & 512):x+=20:if(x>540):x=540
if(key&1):x-=2:if(x<0):x=0
if(key&2):y-=2:if(y<0):y=0
if(key&4):x+=2:if(x>540):x=540
if(key&8):y+=2:if(y>550):y=550
if(frame\1 == 0){
getkey spasekey,32
if spasekey = 1 {
gosub *tama
}
gosub *search
if(nunber != -1){
//玉の〇射
b(nunber) = 1
b_x(nunber) = rnd(550)
b_y(nunber) = 0.0
b_vx(nunber) = -0.5+0.01*rnd(100)
b_vy(nunber) = 1.0+0.01*rnd(100)
}
}
*tesokido
//玉の移動
repeat maxbullet
if( b(cnt) == 1 ){
b_x(cnt) = b_x(cnt) + b_vx(cnt)
b_y(cnt) = b_y(cnt) + b_vy(cnt)
if(b_x(cnt)<-8 || b_x(cnt)>550 || b_y(cnt)>660 ) : b(cnt) =c0
//当たり判定
dx = x - b_x(cnt) : dy = y - b_y(cnt)
dx*=dx : dy*=dy
if(dx + dy <= 690.0){
//被弾
mmplay 4
oonwait = 70
pos 20,100
font "HG行書体",250
color 0,0,0
mes "敗北"
redraw 1
wait 30
pos 0,0
return
b(cnt) = 0
}
}
loop
//フレームカウンター表示
color 0,5,200
pos 0,0
mes frame
//自分描画
pos x,y
gmode 0,25,25
gcopy 2
//玉の描画
repeat maxbullet
if( b(cnt) == 1 ){
pos b_x(cnt) , b_y(cnt)
gmode 1,26,27,255
gcopy 3
}
loop
//画面更新
redraw 1
redraw 0
await matu
frame =frame + 1
//ループ
goto *game
*search
nunber = -1
repeat maxbullet
if(b(cnt)!= 1) : nunber = cnt : break
loop
return
*oon
*kuria
cls
stop
*hado
modo= "ハード"
maxbullet=28
matu=4
zikan=5000
gosub *start
goto *hado
*tama
end
return
*onebos
color 0,255,155
boxf
redraw 1
redraw 0
mmstop 30
wait 50
///mmload "shu2noBOSBGM.wav",30,1
mmplay 30
| |
|
2022/1/2(Sun) 16:25:43|NO.94850
*game
を
repeat
にして、
goto *game
を
loop
にしました。
*hazime
screen 1,200,150
width ,,300,200
screen 0,550,600
width ,,500,200
gsel 1
//画像読み込み
buffer 2
mes "自"
//picload "zikidona.jpg"
buffer 3
mes "敵"
//picload "スタート玉.png"
//効果音読み込み
//mmload "nn.wav",40
//mmload "shu2noBGM.wav",30,1
gsel 1
mes "shift↑ で低速移動"
goto *hado
stop
*start
gsel 0
cls
frame = 0
randomize
//スタート位置
x = 250.0
y = 400.0
//弾幕情報初期化
maxbullet = 20
dim b ,maxbullet
dimtype b_x ,vartype("double"),maxbullet
dimtype b_y ,vartype("double"),maxbullet
dimtype b_vx ,vartype("double"),maxbullet
dimtype b_vy ,vartype("double"),maxbullet
pos 300,0
font "HG行書体",200
mes "1"
mes "秒"
mes "後"
mes "秒"
pos 10,0
mes "開"
mes "始"
title "1"
wait 10
title "1秒"
wait 10
title "1秒後"
wait 10
title "1秒後開"
wait 10
title "1秒後開始"
wait 20
title "シューティング2game"
font "HG行書体",30
//ループ
mmplay 30
repeat
if frame > zikan {
goto *onebos
stop
}
//画面クリア
color 0,255,155
boxf
//移動制御
redraw 0
getkey shiftkey,16
if shiftkey = 1 {
////////////////////
stick key,%1111
if(key & 256):x-=10:if(x<0):x=0
if(key & 512):x+=10:if(x>540):x=540
if(key&1):x-=1:if(x<0):x=0
if(key&2):y-=1:if(y<0):y=0
if(key&4):x+=:if(x>540):x=540
if(key&8):y+=1:if(y>550):y=550
if(frame\1 == 0){
getkey spasekey,32
if spasekey = 1 {
gosub *tama
}
gosub *search
if(nunber != -1){
//玉の〇射
b(nunber) = 1
b_x(nunber) = rnd(550)
b_y(nunber) = 0.0
b_vx(nunber) = -0.5+0.01*rnd(100)
b_vy(nunber) = 1.0+0.01*rnd(100)
}
}
////////////////////
goto *tesokido
}
stick key,%1111
if(key & 256):x-=20:if(x<0):x=0
if(key & 512):x+=20:if(x>540):x=540
if(key&1):x-=2:if(x<0):x=0
if(key&2):y-=2:if(y<0):y=0
if(key&4):x+=2:if(x>540):x=540
if(key&8):y+=2:if(y>550):y=550
if(frame\1 == 0){
getkey spasekey,32
if spasekey = 1 {
gosub *tama
}
gosub *search
if(nunber != -1){
//玉の〇射
b(nunber) = 1
b_x(nunber) = rnd(550)
b_y(nunber) = 0.0
b_vx(nunber) = -0.5+0.01*rnd(100)
b_vy(nunber) = 1.0+0.01*rnd(100)
}
}
*tesokido
//玉の移動
repeat maxbullet
if( b(cnt) == 1 ){
b_x(cnt) = b_x(cnt) + b_vx(cnt)
b_y(cnt) = b_y(cnt) + b_vy(cnt)
if(b_x(cnt)<-8 || b_x(cnt)>550 || b_y(cnt)>660 ) : b(cnt) =c0
//当たり判定
dx = x - b_x(cnt) : dy = y - b_y(cnt)
dx*=dx : dy*=dy
if(dx + dy <= 690.0){
//被弾
mmplay 4
oonwait = 70
pos 20,100
font "HG行書体",250
color 0,0,0
mes "敗北"
redraw 1
wait 30
pos 0,0
return
b(cnt) = 0
}
}
loop
//フレームカウンター表示
color 0,5,200
pos 0,0
mes frame
//自分描画
pos x,y
gmode 0,25,25
gcopy 2
//玉の描画
repeat maxbullet
if( b(cnt) == 1 ){
pos b_x(cnt) , b_y(cnt)
gmode 1,26,27,255
gcopy 3
}
loop
//画面更新
redraw 1
redraw 0
await matu
frame =frame + 1
//ループ
loop
*search
nunber = -1
repeat maxbullet
if(b(cnt)!= 1) : nunber = cnt : break
loop
return
*oon
*kuria
cls
stop
*hado
modo= "ハード"
maxbullet=28
matu=4
zikan=5000
gosub *start
goto *hado
*tama
end
return
*onebos
color 0,255,155
boxf
redraw 1
redraw 0
mmstop 30
wait 50
///mmload "shu2noBOSBGM.wav",30,1
mmplay 30
| |
|
2022/1/2(Sun) 16:40:30|NO.94852
すみません...出ました...
|
|
2022/1/2(Sun) 18:21:48|NO.94853
ざっくりとしか見ていませんが、*tesokidoの194行目から229行目までのrepeat 〜 loop内にreturnがあるのが問題になっているんじゃないかと思います。
221行目のreturnをcheck=1 : breakに変更して、repeatとloopの外側に次のような命令を加えてみてください。
check=0 : ; ←これを追加
repeat maxbullet
〜〜
loop
if check=1 : return : ; ←これも追加
|
|
2022/1/2(Sun) 20:45:18|NO.94855
なんか敵に当たったら敗北とゲーム画面がチラチラして敵から離れたらまた操作できるようになってしまいました
|
|
2022/1/2(Sun) 21:13:17|NO.94856
メルクーフさんの
if check=1 : return
を
if check=1 {
check = 0
return
}
にすれば良いかと
|
|
2022/1/3(Mon) 02:17:39|NO.94858
同じ症状が出ました
|
|
2022/1/3(Mon) 08:15:37|NO.94859
*tesokidoに入った時に最初にcheckは0にセットされるので、if文内にcheck=0を入れる必要はないはずです。
手持ちのWAVファイルを使って最初のスクリプトに私の追加・変更を加えて実際に実行してみましたが、敵に当たった後、敗北、1秒後開始と表示された後にまた敵が上から降ってくるだけで、画面がちらつくような現象は発生しませんでした。
考えられることは、追加・変更部分の変数名や数値に入力ミスがあるか、追加・変更する箇所を間違えているか、追加・変更を加えた時のスクリプトがすでに加工されていて最初の物とは違う物になっているかです。
追加部分を入れるrepeatとloopは、『//玉の移動』の下、『//フレームカウンター表示』の上にある物です。
|
|
2022/1/3(Mon) 12:57:40|NO.94862
すみません。玉の描画のところに置いていたようです。
おかげて解決しました。ありがとうございました
|
|
2022/1/3(Mon) 16:55:00|NO.94863
というか*tekisodo って何なんですかね...(覚えてない)
|
|