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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0613
いかろbuttonとgosubのバグ?5解決


いかろ

リンク

2010/6/13(Sun) 17:40:58|NO.33251

以下のスクリプトを実行すると「サブルーチン外のreturnは無効です」と出ます。
gosub *test1の部分に戻ると思うのですが。
buttonのところをgoto *testに変えると正常(想定した動作)に動作しました。
HSPのバージョンは3.2です。

a=2 gosub *test1 stop *test1 button "test",*test stop *test return



この記事に返信する


SYAM

リンク

2010/6/13(Sun) 18:04:52|NO.33252

button のジャンプは gosub のネストをリセットする性質があったと思います。



ANTARES

リンク

2010/6/14(Mon) 02:56:10|NO.33265

 HSP2.61では以下のスクリプトは動作しますが、
何でこんな仕様になってしまったのでしょう?

gosub *test1 gsel 2,-1 gsel 0 mes "end" stop *test1 screen 2,640,480 button "test",*test stop *test return



kweb(xor)

リンク

2010/6/14(Mon) 03:33:07|NO.33266

たしかに過去のバージョンでは動いてますね。

個人的にサブルーチン飛んでいる間に stop 挟むのはあまり好きな記法じゃないですけど。



木村

リンク

2010/6/14(Mon) 21:45:24|NO.33271

>>button のジャンプは gosub のネストをリセットする性質があったと思います。

repeat : repeat : gosub *l1 : loop : loop *l1 : gosub *l2 *l2 : mes "looplev="+looplev+" : sublev="+sublev : button "Button",*btn : stop *btn : mes "looplev="+looplev+" : sublev="+sublev : stop
 SYAMさんのおっしゃる通り、looplevとsublevがgoto型buttonだとリセットされてしまいます。
 サブルーチンネストを活かしながらボタンを利用したいのならdo〜until構文を利用する
べきだと思います。以下は一例

gosub *label cls mes "帰還しました" stop *label button gosub "帰還",*帰還 do wait 5 until flag return *帰還 flag=1 return



ANTARES

リンク

2010/6/15(Tue) 04:57:40|NO.33273

 なるほど。ありがとうございます。
でも、ちょっと面倒ですね。



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