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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0804
四郎repeat-loop7未解決


四郎

リンク

2010/8/4(Wed) 21:06:37|NO.34255

repeat-loop文でonkeyかなにかを使ってEnterが押されるまで次の命令を
とめておくようにしたいのですが


repeat 処理   onkey *check *check if iparam=13 { 処理2     onkey :check2 *check2 if iparam=13 loop else stop } else stop
このスクリプトだとloopが外で使えわれているのでうまくいきません
ご教授よろしく願いします



この記事に返信する


四郎

リンク

2010/8/4(Wed) 21:08:19|NO.34256

すいません
2つ目の onkey :check は間違いで
     onkey *check です



info

リンク

2010/8/4(Wed) 21:52:15|NO.34259

複雑なスクリプトには対応できませんが、こんな方法もあります。


onkey gosub *label_onkey repeat title ""+ cnt wait 1 loop stop *label_onkey onkey 0 repeat getkey key,13 if key { break } wait 1 loop onkey 1 return



SYAM

リンク

2010/8/4(Wed) 22:40:21|NO.34262

元のスクリプトがかなり不可思議なことになっているので、どうなってほしいのかがよくわかりませんが…

repeat〜loop 構文の中の処理でキー待ちをしたいというだけであれば、キー割り込みを使うよりも repeat〜loop構文やgotoを使って、そのループの中でstick命令を使うなどした方が素直でしょう。

repeat 100 ;処理 1 dummy1 += 1 mes strf("dummy1=%d dummy2=%d",dummy1,dummy2) *@ wait 1 stick a if((a&32) == 0) : goto *@b ;処理 2 dummy2 += 1 mes strf("dummy1=%d dummy2=%d",dummy1,dummy2) *@ wait 1 stick a if((a&32) == 0) : goto *@b loop



M

リンク

2010/8/5(Thu) 01:03:10|NO.34271

フローチャートがよくわからないので、なんとも言えんのですが、
とりあえず、repeat〜loop間はぐるぐる回しておいて、フラグや変数の操作でそれぞれの処理に飛ばしてみてはいかが。

flg_TRIGER=1 ;処理を実行させるためのトリガー STEPNO=1 ;実行する処理の番号 repeat ;トリガがONになっている場合、STEPNOに応じた処理を実行する if flg_TRIGER=1{ if STEPNO=1:gosub *SHORI_1 if STEPNO=2:gosub *SHORI_2 if STEPNO=3:break flg_TRIGER=0 ;トリガをOFFにすることを忘れずに } gosub *KeyCheck await 1 loop mes "終了" stop *KeyCheck ;ENTERキーが入力されたら、処理番号をプラス1して、処理を実行させるためのトリガをONにする stick a if (a&32)!0{ STEPNO++ ;処理番号を+1 flg_TRIGER=1 ;トリガをON } return *SHORI_1 mes "処理1実行" return *SHORI_2 mes "処理2実行" return



(´・ω・`)

リンク

2010/8/5(Thu) 12:26:20|NO.34276

あるパスコードを入力するまで処理を止めたい、だと推測しました。
その前提でイカソースです。(´ω`)


passcode = "[文字列]" ; パス文字列 sdim inputcode, strlen(passcode) inputpos = 0 loopflag = 0 onkey gosub *checkcode while loopflag = 0 [待機中処理] wend [待機後処理] *checkcode a = iparam if (a>=48&a<=57)|(a>=65&a<=90) { ; 0-9,A-Zなら処理する poke inputcode, inputpos, a inputpos += 1 if inputpos>strlen(passcode) { if passcode=inputcode { dialog "合っとるわ" loopflag = 1 } else { dialog "違うけえ、最初から入力してや" inputpos = 0 } } } return

正しいパスコードを入れるまでは、違う番うとゆわれ続けます。

onkeyでの飛び先ではフラグを操作するだけにしておき、
ループ内でフラグを判断すればええ感じに処理できます。

サンプルでは、if文を使うかわりにwhile文を用いて簡略化しましたが、
複雑な脱出条件を作りたいならrepeat〜loop構造内でif判断するのがいいですね。(´ω`)



ta-ka

リンク

2010/8/7(Sat) 10:37:01|NO.34289


repeat stick key,0 if key&32:goto *ent await 20 loop *ent mes "Enterキーが押されました。 stop

これでは、駄目ですか?



ext

リンク

2010/8/7(Sat) 11:38:48|NO.34292

ta-kaさんのスクリプトだと、
repeat〜loopのネストが蓄積されてしまいエラーの原因になります。
ループを抜ける時はbreakを使いましょう。


repeat stick key,0 if key&32:break await 20 loop mes "Enterキーが押されました。 stop



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