トピック
たくみ somsss

PRINT文の文字点滅

表示させた文字を点滅させるのはどんな文ですかね? あと、WAIT で時間を待ってるときに、ボタンの反応ができるようにするのはどんな文になっているのかも、お願いします。 まだ初心者なので出来るだけ分かりやすくお願いします。
0そうだね
プレイ済み
返信[1]
親投稿
点滅…ありませーん 反応…ありませーん PRINTですでに表示したものをいじる命令はないし WAITはバックグラウンドな処理(MMLとか)以外割り込めないからね…
0そうだね
プレイ済み
返信[2]
親投稿
そこは工夫でどうにかするんだけど、明日見に来る
0そうだね
プレイ済み
返信[3]
親投稿
たくみ somsss
明日お願いします。 いつもすみません。
1そうだね
プレイ済み
返信[4]
親投稿
おちゃめ ochame_nako
あまさとしおんさんがコメントしているように標準ではそのような機能はありません。 したがって、望む機能を自分でプログラムを作って実現するしかありません。 点滅させるには一定時間ごとに表示と消去を繰り返せばいいです。消去するには表示している文字数分のスペースを表示するのが一番簡単です。 長いWAIT中にボタン入力を可能にするにはWAIT 1をループで回してボタンが押されたらループから抜けるようにするのが一番簡単です。 というわけで、自作命令BLINKとWAITBを作ってみました。 「BLINK 表示文字列,時間」と記述することで指定した時間(フレーム数)ごとに表示と消去を繰り返します。(消去で終了した場合には画面には表示されないので注意) 「WAITB 時間」と記述することでその時間(フレーム数)だけ待ちますが、ボタンが押されたら待ちを終了します。
3そうだね
プレイ済み
返信[5]
親投稿
おちゃめ ochame_nako
上記のものは即興で作ったプログラムであり例外処理等は不十分な部分があるかもしれないし、望んでいる機能とは異なるかもしれないです。 改造は自由に行って構いませんので適当に改造して使ってください。 なお、分からないところがあれば言ってもらえたら解説します。
1そうだね
プレイ済み
返信[6]
親投稿
ΖΕΧ ZEX256
表示された文字色を変える命令作ったよ
3そうだね
プレイ済み
返信[7]
親投稿
ΖΕΧ ZEX256
こんな感じに
2そうだね
プレイ済み
返信[8]
親投稿
みむ*mim hidemimtp
コンソール文字の点滅命令はないので、PRINT文で描く→消す(空白で上書き)を数フレームごとに行うのが一般的です。 WAITで待っているときはどうやってもボタンは効きません。 入力待ちなら、 REPEAT  WAIT 1 UNTIL BUTTON()!=0 のように、ボタンが押されるまでWAIT 1(またはVSYNC)を繰り返す方法などがあります。
2そうだね
プレイ済み
返信[9]
親投稿
マギー M191246
二つの質問から、例えば 『PUSH A』という文字を 時間制限付きで点滅させて その間も、ボタン入力を受け付けたい ということでは? 考え過ぎかな?
1そうだね
プレイ済み
返信[10]
親投稿
SilverBlue Corei72630QM
やっぱりMAINCNT MOD N(間隔)が一番かな。
2そうだね
プレイ済み
返信[11]
親投稿
たくみ somsss
おちゃめさん、ZEXさん、みむ*mimさん、silverblueさん、 ありがとうございます。 マギーさん いえ、考えすぎでないです。そのとうりです。
1そうだね
プレイ済み
返信[12]
親投稿
たくみ somsss
おちゃめさん BLINK WAITB は自分で作った命令と言うことですか?
1そうだね
プレイ済み
返信[13]
親投稿
マギー M191246
おちゃめさんの二つの命令を 合成すればできそうです。 続きの解説は、おちゃめさんに渡します。
0そうだね
プレイ済み
返信[14]
親投稿
おちゃめ ochame_nako
両方とも私が作ったものですが、即興で作ったので大したプログラムではありません。 実はWAITBは引数に0を入れると無視されるというWAIT 0と同じ特性を持つのですが、さらに負数を入れると無限ループにできるという独自仕様になっています。 つまり、WAITB -1とすると時間制限なくボタン入力待ちになっているということです。 ただし、基本的にWAITBはボタンを押すまでは命令内でのループとなっていてメインの方に処理が移らない(LOCATEでの位置指定を行うことができない)ためBLINK、WAITBの2つの命令を単純に合算するわけにはいきません。(最初から拡張しやすい設計にしておけばこんなことにはならなかったけど無駄に長くなるのを嫌ってしまったため)
0そうだね
プレイ済み
返信[15]
親投稿
おちゃめ ochame_nako
2つの命令を合算したBLINKW(ブリンクウェイト)命令を作るとしたら最も簡単なのはLOCATEを自作命令の中に組み込むことですが、そうなると表示X座標、表示Y座標も引数に入れる必要があります。 そうやって作るのが一番簡単ですが、個人的には無駄に引数が増えるのは嫌なのでLOCATEは自作命令の外(メインループ内)で設定できるようにします。 これは現在の表示座標を示すシステム変数CSRX、CSRYを使い実現しました。 というわけで、点滅しながら一定の時間を経過するかボタン入力されるまで待つBLINKW命令はこんな感じになりました。 BLINKW 文字列、点滅間隔、待ち時間と記述します。 自分が作るゲームにこのまま使ってもいいし自由に改造して使ってもOKです。
0そうだね
プレイ済み
返信[16]
親投稿
おちゃめ ochame_nako
BLINKW命令で表示位置指定もしたいという場合はBLINKW A$,X,Y,S,Tに変更して10行目は削るだけで対応できます。 なぜ最初の段階でわざわざLOCATEを別に指定するようにしたかというとPRINT命令からの置き換えを容易にするためです。
0そうだね
プレイ済み
返信[17]
親投稿
たくみ somsss
なるほど! とても分かりやすい説明ありがとうございました m(._.)m
0そうだね
プレイ済み