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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0815
Slimeonkeyでgotoを使いプログラムジャンプすると…9解決


Slime

リンク

2011/8/15(Mon) 17:23:11|NO.40600

サブルーチン内で onkey goto *label でプログラムジャンプを行い
その後 return でサブルーチンから復帰しようとすると
エラーNo.10(サブルーチン外のreturnは無効です)となります。
onkey での goto は扱いが違うのでしょうか?
意味不明なことを言っていたらすみません

gosub *label_1 *label_1 //以下サブルーチン onkey goto *label_2 stop *label_2 return



この記事に返信する


backdrop

リンク

2011/8/15(Mon) 17:43:28|NO.40601

サブルーチンジャンプにはgotoではなくgosubを使います。
gosubを使わないとreturnで戻れません。

したがって「onkey goto *label」は「onkey gosub *label」としなければなりません。



れみはる

リンク

2011/8/15(Mon) 19:04:10|NO.40604

gotoとgosubを逆に覚えてません?
	goto *label_1
*label_1 //以下サブルーチン onkey gosub *label_2 stop *label_2 return
gotoはただのラベルへのジャンプです。 gosubはサブルーチンジャンプです。
「go"sub"」ですから。



Slime

リンク

2011/8/15(Mon) 20:19:46|NO.40608

すみません、まだよく分かりません。
はじめのgosubでサブルーチンジャンプを行い、
サブルーチン内でnokeyを使ったgotoで違うラベルへジャンプすると
returnを使い、一番初めのgosubの次の行へ戻れません。
つまり *label_1 自体がサブルーチンと言うことなのです。
すみません、すごく分かりにくいですね。
簡単に言うと下のスクリプトで"returnしました"とメッセージを出したいわけです。

gosub *label_1 mes"returnしました" stop *label_1 //以下サブルーチン onkey goto *label_2 stop *label_2 return

これを実行すると先ほど行ったようになります。ですが
onkey goto *label_2 の代わりに goto *label_2 だとうまくいきます

gosub *label_1 mes"returnしました" stop *label_1 //以下サブルーチン goto *label_2 stop *label_2 return <pre/>



ぬこ

リンク

2011/8/15(Mon) 20:49:02|NO.40609

onkeyの使い方もわかってないようですので説明します。
onkeyはgetkeyなどと違ってonkeyが呼ばれてからキーが押されると、
どこを処理していてもラベルにジャンプします。

onkey gosub *label_1 stop *label_1 mes "returnします。" return
これを実行すると分かると思います。



Slime

リンク

2011/8/15(Mon) 21:31:47|NO.40610

すみませんがまだ分かりません。
分かりにくかったかもしれませんが
一応サブルーチン内でonkeyを使い他のラベルにジャンプし、その後にreturnしたいのですが…
上のスクリプトではonkeyでサブルーチンに行きreturnして戻ってくるだけなので
やりたいこととちょっと違います。
何度もすみませんが、そこのところを教えてほしいです。
何でそんなことやる必要があるのか、分からないと思いますが
今作っているものを要らない部分を省略し、書いたのでこうなりました。
ほんとに何度もすみません。



晩御飯

リンク

2011/8/15(Mon) 22:04:04|NO.40611

よくわからないので勘で。
	onkey *label_2
*label_base mes "base" *label_1 mes "1" stop *label_2 mes "2" goto *label_base
でもこれだとlabel1の存在意義がない!



木村

リンク

2011/8/15(Mon) 22:09:05|NO.40612

 onkey命令によるgotoジャンプはサブルーチンネストを初期化する働きがあるようです。以下が一例

gosub *label_1 mes"returnしました" stop *label_1 //以下サブルーチン onkey goto *label_2 mes "ラベル1時点でのsublev="+sublev stop *label_2 mes "ラベル2時点でのsublev="+sublev return
 onkey命令以外にもbutton命令で設置したボタンからのジャンプでもサブルーチンネストは初期化されます。

 サブルーチンネストを活かしつつも、onkey命令を利用したいのならば、他の皆様がおっしゃられる通りgosub方式のonkey命令を利用すれば良いかと思います。以下は一例

gosub *label_1 mes"returnしました" stop *label_1 //以下サブルーチン onkey gosub *label_2 mes "ラベル1時点でのsublev="+sublev repeat -1 wait 10 if stat : break loop return *label_2 mes "ラベル2時点でのsublev="+sublev return 1



Slime

リンク

2011/8/15(Mon) 22:26:35|NO.40613

>>木村さん
>>onkey命令によるgotoジャンプはサブルーチンネストを初期化する働きがあるようです。
大変分かりにくい文章でしたが理解してくれてうれしいです
そして大変分かりやすい説明ありがとうございます
また、ほかの方々も本当にありがとうございましたm(_ _)m



Slime

リンク

2011/8/15(Mon) 22:28:46|NO.40614

あと、button命令でも同じようになると言うことも初耳です
ありがとうございました



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