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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0609
7909pprエラーになる9解決


7909ppr

リンク

2012/6/9(Sat) 17:41:15|NO.47101

このゲームを実行し、何回も死ぬと
「サブルチーンやループのネストが深すぎます」
とゆうようなエラーになってしまいます。
このような解決法はあるのでしょうか。

ゲームプレイについて
レーザーや敵との当たり判定機能を追加しました。
敵が多いのはわざと死ぬようにしています。もし、敵を減らす場合は30行目の値を変えてください。



この記事に返信する


7909ppr

リンク

2012/6/9(Sat) 17:41:50|NO.47102




流星群

リンク

2012/6/9(Sat) 18:33:32|NO.47113

そのままの意味で
repeatやgosubを使うと
ポイントみたいなものが少しづつ溜まっていきます。
どこかで途切れればよいのですが
ずっと続いているとそれが表示される時があります。
どこかでgosub、又はrepeatがずっと行われているような所がありませんか?
説明下手ですいませんがイメージはこんな感じです



流星群

リンク

2012/6/9(Sat) 18:41:26|NO.47114

適当に作った
このスクリプトを例にします

repeat 10 *a repeat 10 repeat 10 redraw 0 color 0,0,0 : boxf color 255,255,255 pos 0,0 : mes ""+rnd(256) redraw 1 wait 0.1 goto*a loop loop goto*a loop
この場合
3行目のrepeat10で
エラーが起きていますね。

ネストというものが
普通ならrepeatの3つが終わった所で
リセットされるはずなのですが
goto*aのせいでリセットされず、
結果「ネスト」が深くなって(ネストはrepeatやgosubの数が多いほど深くなる)
エラーが起きました。
これでわかりますか??



7909ppr

リンク

2012/6/9(Sat) 19:46:01|NO.47118

あと、(おまけ)


repeat 10 *aa wait 0.1 goto *aa loop このように同じループ内でgotoしてループ内のラベルへジャンプすることは良いのでしょうか。



GrapeColor(DION)

リンク

2012/6/9(Sat) 21:34:15|NO.47119

>>NO.47118
おまけ?
どういうシチュエーションでそんなことをするのか良く分かりませんが、
エラーは出ないものの、好ましい形では無いと思います。

やっぱりプログラムはメインルーチンサブルーチン構成が一番良いと思います



流星群

リンク

2012/6/9(Sat) 22:08:09|NO.47122

7909pprさん、
それってrepeatの中無限ループになってますよね??
たぶんgosubではなくgotoなので
エラーのダイアログは出ませんが、
repeatが意味を果たしていませんよね・・・



y.ack

リンク

2012/6/10(Sun) 07:49:13|NO.47123

>NO.47118
loopの中でgotoしたいならforの方が安全ですよ

for i,0,10,1 *aa wait 0.1 goto *aa next
みたいに
後、失敗したサンプルスクリプトなんですけどerror出ませんw

i=0 *aa for i,i,10,1 wait 0.1 mes i goto *aa next mes "end"



7909ppr

リンク

2012/6/10(Sun) 08:55:57|NO.47124

なるほど〜
修復後、エラーにならずにすんだので良かったです。
ありがとうございました。



y.ack

リンク

2012/6/10(Sun) 14:30:27|NO.47129

>NO.47114
error出ないように書き換えてみました

next通ってないんでカウンタ増えないですが^^;
repeatの代わりにfor使うとネストしても大丈夫です
ループの中でどっか行きたいならfor使ってください

for i,0,10 *a for ii,0,10 for iii,0,10 logmes "i:"+i+" ii:"+ii+" iii:"+iii wait 0.1 goto*a next next goto*a next



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