コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
山吹飯 ◆Bf7NT50.zChf
2018/4/30 22:03
質問
文の表示
端末の都合で画像が張れないので、言葉で説明させていただきます…

一つ目の文章を表示した後、どれかのボタンを押してもらって初めて次の文章を表示させる、みたいな動きをさせたいのですが、これはどんな命令を使えばいいのでしょうか…?
ついでにその命令を使う理由(解説?)を分かりやすく説明していただけるとありがたいです…

分かりにくくて申し訳ありません…言ってくだされば極力分かりやすくなるように頑張って説明させていただきます。

コメント

アバター
山吹飯 2018/4/30 22:07 ◆Bf7NT50.zChf
一応自分で考えてはみたのですが、BUTTON命令を使うことくらいしか分かりませんでした…CLS命令とかも使うんでしょうか?
アバター
こういち 2018/4/30 22:16 ◆ou0jbJnEJ0Kb
BUTTON()まで分かってるならあと一歩ですよ。
ボタンは単体で置いても1瞬しか受け付けてくれないので、ループとセットで使います。
あとはボタンが押されるまでWAITすればいいので、
PRINT "文"
REPEAT
 WAIT 1
UNTIL (BUTTON(2) AND 16)==16 `Aボタンが押されるまでループ
PRINT "文"
みたいな感じですね。
アバター
こういち 2018/4/30 22:18 ◆ou0jbJnEJ0Kb
CLSは前の文を消したいなら使いますね。
それと、上のやつだとPRINTとかを何度も実行することになると思うので、FOR文でまとめたりすると楽です。
アバター
でんぺん 2018/4/30 22:30 ◆HfSy5ayxtyTa
BUTTON命令でボタンが押されるまで待つのはその通りですね。

あとは次の文章を出すときに元の文章を消したりするところですが、CLSだと画面全部を消してしまうので場合によっては困るケースもあります。その時は、LOCATEとPRINT(?)を利用して、消したい場所に” ”(空白)を表示する事で消すことが出来ます。

空白は一つじゃ1文字しか消せないので、例えばウインドウの中身が20×5だとしたら、PRINT " " * 20とすれば横20文字分をまとめて消すことが出来ます。
縦はFORなどを使って上記の横を消すのをY座標を変えて繰り返すことで消せます。

補足
PRINTの後は見にくいかもしれませんが"(ダブルクォーテーション)の中にスペースが一つ入ってる感じで、それを*(かけるためのアスタリスク)で20と書くことで20回繰り返してPRINT出来るって感じの記述です。
アバター
しょぼーん 2018/4/30 22:55 ◆lp6HwPeaFWPI
気になったのでボタンの補足

BUTTON()は、ボタンごとに特定の値を返すものだと思ってください。
BUTTON()==16で"Aボタンのみ押されているか"の判定ができるのですが、BUTTON() AND 16だとAボタン以外が押されていても判定ができます。
あと、BUTTON()==(16+32)で"AとBのボタンが押されているか"、BUTTON() AND (16+32)で"AかBのボタンが押されているか"の判定が出来ます。
また、BUTTON()をループ内の複数の箇所で使用する際はループの最初に
変数=BUTTON()
と書き、最初に取得したほうがいいです。
(こうしないと挙動がおかしくなる)
細かい話をしますと2進数がどうたらビットがどうたらと難しい話になるのでそれは今は覚えなくていいです。
アバター
山吹飯 2018/4/30 23:40 ◆Bf7NT50.zChf
ありがとうございます!
メモを取ってから、皆さんが言ってくださったことをやってみたいと思います!
アバター
でんぺん 2018/4/30 23:46 ◆HfSy5ayxtyTa
一応ちょっと追加で!

ボタン入力では定数を使ってみるのもいいかもですね。
REPEAT:WAIT:UNTIL BUTTON(2)==#A
みたいな。

:(コロン)を使って1行で書いてますが、ほとんどこういちさんの例と変わらないです。ただANDじゃなくて==なのでAボタンだけ押さないとループを抜けません。(ANDの方は他のボタンを押しながらAボタンを押しても抜ける)

命令を使う理由を細かく書いてみると、ボタンの処理をする時はループを使わないと一瞬で終わってしまいます。なのでWHILEやREPEAT、GOTO、FORなどプログラム中でループを作れる命令を使う事で対応しますが、今回はAボタンを押した時、としたかったので、REPEATが適当かと思ってそうしました。

REPEATは必ず1回はループの中を通るので、その中でWAITとして1フレーム待機してからボタンの判定をしています。(WAITは引数を省略すると1になります)
これは、WAIT(やVSYNC)で1フレーム経過させた方がBUTTONの状態を確実にチェックできるという理由もありますが、当面形で覚えてしまってもいいかもです。
そしてUNTIL(REPEATと対で使う)でBUTTON(2)の内容が#AでAボタンが押されたとなるまでREPEATとUNTILの間を繰り返すようにしてボタン入力用のウエイトを作っている、という感じになりますね。

:(コロン)を使えば1行に出来るので大した長さではないですが頻繁に使うならDEFなどを使って自作命令にしてしまってもいいかもしれませんね。
アバター
Villit 2018/5/1 9:16 ◆vHS9PZuQvtOx
ちなみにですが、BUTTON関数はカッコの中の数字によって挙動が少し変化します。
メッセージウィンドウを閉じるボタンは、基本的に1回だけ反応してくれれば役目はおしまいなので、(2)、もしくは(3)にするのが普通です。
(0)や(1)にしてしまった場合、ボタンを長押しすると次のメッセージウィンドウまで閉じてしまうのです。
(皆さんが例にBUTTON(2)を挙げているのもそのためです)

この内容は「BUTTON」の命令説明で確認できるので番号は覚えなくてもいいですが、とりあえず把握だけしておくと便利です。

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -