HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0102
ネストが深すぎますとでてしまう。9解決


リンク

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



この記事に返信する


ねんねこ5787

リンク

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

なんか敵に当たったら敗北とゲーム画面がチラチラして敵から離れたらまた操作できるようになってしまいました



ABC

リンク

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 って何なんですかね...(覚えてない)



ONION software Copyright 1997-2023(c) All rights reserved.