トピック
ゆうさん^^ budou12817

DEFの質問です。

LOOP DEF LOOP WHILE TRUE BUT WEND END DEF BUT IF BUTTON(1)==#B THEN BREAK IF BUTTON(1)==#A THEN DIA END 'コメントに続く
0そうだね
プレイ済み
返信[1]
親投稿
ゆうさん^^ budou12817
DEF DIA DIALOG "ABC",4 IF RESULT==-1 THEN LOOP WHILE TRUE 'ここに入ってしまう WEND END 〔パターン1〕 まずLOOP命令が実行されてWHILEループに入りますね。その後にBボタンを押すとループから抜け、プログラムが終了しますよね。 〔パターン2〕 まずLOOP命令が実行されてWHILEループに入りますね。その後にAボタンを押すとDIALOGが表示されますね。そこでキャンセルを押すと再びLOOP命令が実行されますね。その後、Bボタンを押すとどうでしょう。BREAKが実行されて、プログラムが終了すると思いきや、「ここに入ってしまう」と書いてあるループに入ってしまうのです。
0そうだね
プレイ済み
返信[2]
親投稿
ゆうさん^^ budou12817
〔パターン2〕のときに「ここに入ってしまう」のではなく、プログラムを終了させるにはどうすればよいでしょうか...? 但し、「『ここに入ってしまう』のところをENDに置換する」と「ループにはVSYNCを入れた方がいいですよ」というコメントは控えてください。 長文すみません。分かる方、お願いします。
0そうだね
プレイ済み
返信[3]
親投稿
・DEFを途中で終わりにしたいときはRETURN
3そうだね
プレイ済み
返信[4]
親投稿
私もてっきり「戻り値を返す時だけ」かと思ってはまってたよ。
2そうだね
プレイ済み
返信[5]
親投稿
BREAKが有効なのは一回だけです 今回の場合はDEF LOOP内のWHILEに対してBREAKが働き そこでBREAKの効果は終了します DEF LOOPから戻って来た後(関数や命令は必ず呼び出し元に戻ります)、次のWHILEに突入します LOOP内で押した結果を何らかの形で返却するように書けば 入ってほしくないWHILEの方に条件をつけられます
1そうだね
プレイ済み
返信[6]
親投稿
書き写していてパターン1の方もループを抜けない事に気付きました コレ、丸写ししても実行できないですよね やりたい事の予想としては ループの中でAが押されたらダイアログを表示して否定の返却値の場合、ループを抜ける また、ループの中でBが押されたら抜ける ですよね
0そうだね
プレイ済み
返信[7]
親投稿
ちょっとやりたい事とずれてるような気がしたので書き直しました B押したらループを抜け処理終了 Aを押したらダイアログ表示 ダイアログで肯定したら次のループへ 否定したらループを抜けて処理終了 こんな感じでしょうか? 頭がちょっとこんがらがってしまってました(^^;)
0そうだね
プレイ済み
返信[8]
親投稿
↑の12行目ミスっていたので訂正します RETURN DIA() もしくは IF DIA()==-1 THEN RET=-1 です -つけ忘れてました
0そうだね
プレイ済み
返信[9]
親投稿
基本的に、関数(やユーザー定義命令)の中で、その外(呼び出し側)のループに対してBREAKをするということは出来ません。ただもしかしたらプチコンでは出来るのかもしれませんが、その場合も処理としてはあまり好ましくないと思います。 詳しくはみてませんがりゅうまごさんが色々と返事をしてくれていそうなので、その辺を参考にして、わからないところは質問すれば、また教えてくれると思いますし、僕も気づいたら返事します。 頑張ってください!
2そうだね
プレイ済み
返信[10]
親投稿
あとパターン2で「ここに入ってしまう」に遷移するのはごくごく自然な動作です。とくにおかしくもありません。 というのはパターン2の呼び出し側のLOOPを終えた後は、その下のWHILEに入るからです。 なんとなくDEF呼び出しの感覚がGOTOに近いのかと思いましたが、DEF呼びだしはどちらかというとGOSUBに近いです。なので呼び出したら、DEFが終わったら呼び出した後に戻ってきますし、そう考えればパターン2もとくにおかしな動作ではありません。 ただ上記の理由もあって、今のプログラムはちょっとゴチャゴチャしてる印象はありますね。
0そうだね
プレイ済み
返信[11]
親投稿
ゆうさん^^ budou12817
ゴチャゴチャしてる...ですか。 ちょっと制御を見直してみる必要がありそうですね...。 皆さんコメントありがとうございました! DEFって関数にもなるんですね!
0そうだね
プレイ済み