• ベストアンサー

HSP超初心者の質問。

↓のスクリプトで、テストを押した後画面をクリックしても*test1に戻りません。 どうすればいいでしょうか。 複数のラベルから呼び出したいので、goto命令は使わない方法でお願いします。 *test1 cls button gosub "テスト",*test2 stop *test2 cls mes "クリックして下さい" getkey a,1 if a=1 : return stop

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

ざっと調べてみたところ、 gusub~returnはgosubの次に処理が移るが、 button gosubはbuttonには戻ってこないとの事。 個人的にはbutton gosubは使いたくない。 (情報が少ない) if repeat gosubによってネストレベルが蓄積され、 7になるとエラーを起こすそうです。 breakによってネスト情報やループカウンタが破棄される。 *test1 button gosub "GO2TEST",*test2 stop *test2 処理  goto *test1 の様にreturnで戻らずgotoで戻るのも ネストレベルが蓄積されるとの事 ------------------------------------- 結論はあまりネストを深くしない事でしょうか。 どのボタンをクリックしたかは、statにオブジェクトIDが入るので、 飛び先でif stat==0:処理 のようにしボタンを一括で制御する方法もあります。 onclick goto/gosub *labelなら stopしていてもマウス割り込みを受け付けるようです。

nanashi-774
質問者

お礼

ん~・・・まだ超初心者なので難しくてよく分かりません。 試行錯誤してみてもムリだったので自分なりの他の方法でやってみようとございます。 ありがとうございました。

その他の回答 (2)

回答No.2

*test2に飛んで終了してます。 #module #deffunc clickMe cls 1 mes "Click me" repeat getkey retkey,1 if retkey==1:break wait 1 loop #global cls 0 button gosub "テスト",*test2 stop *test2 clickMe return

nanashi-774
質問者

お礼

ありがとうございました。これを参考に試してみたのですが、下のスクリプトで*t2から*t3へ行ってクリックをすると*t1へ戻るのですがなぜでしょうか? #module #deffunc clickMe cls 1 mes "Click me" repeat getkey retkey,1 if retkey==1:break wait 1 loop #global *t1 cls 0 button gosub "テスト",*t3 button "てすと",*t2 stop *t2 cls 2 button gosub "テスト",*t3 stop *t3 clickMe return

  • OMP
  • ベストアンサー率23% (132/553)
回答No.1

実際はどういう動きになるのでしょうか? 私が持ってるやつ(Ver2.61)では、エラーになります。 buttonのあとにgosubは使えません。 今は使えるんでしょうかねぇ。 で、もしgosubが使えたとして、returnで戻るのはその場所なので gosubより上にあるtest1には戻りませんよね。 他の方法を考えるしかないのですが、ちょっと全体像が見えないので どのようにアドバイスしていいのか・・・ 例えば gosub test1 *test1 f=0 cls button gosub "テスト",*test2 if f=1 : return stop *test2 cls mes "クリックして下さい" getkey a,1 if a=1 : f=1 : return stop 私の環境では動作確認ができませんので不安ですが これでどうですか?

nanashi-774
質問者

お礼

ありがとうございます。 実行してみたところクリックしても反応がありませんでした。

関連するQ&A