プチコン3号 SmileBASIC コミュニティトピックbeans taku-binzu2015/09/25 21:12:42質問質問です。頭を捻ってもプログラムが思い付かなかったので、質問させて頂きます。 今、キッチンタイマーみたいに、1秒ずつ時間が減っていくプログラムを作りたいと思っています。 ですが、1秒ずつ時間を減らす方法が分かりません。回答お願いします。0そうだね 18返信プレイ済み2017/11/03 18:46:24に取得
プチコン3号 SmileBASIC コミュニティ返信[1]親投稿ケイン KEIN.HORGAN2015/9/25 21:24メインループの始めか終わりかで現在の時刻を取得して(TIME$)、前回取得時から1秒経過していたら表示を更新すればいいと思います。0そうだね プレイ済み2017/11/03 18:46:24に取得
プチコン3号 SmileBASIC コミュニティ返信[2]親投稿あまさと しおん ShionAmasato2015/9/25 21:24ヒント:VSYNCやWAITで時間を調節できる0そうだね プレイ済み2017/11/03 18:46:24に取得
プチコン3号 SmileBASIC コミュニティ返信[3]親投稿beans taku-binzu2015/9/25 21:56あ、ヒントのお陰でプログラムが出来ました。ありがとうございました!0そうだね プレイ済み2017/11/03 18:46:24に取得
プチコン3号 SmileBASIC コミュニティ返信[4]親投稿beans taku-binzu2015/9/25 22:01[追記] 追加の質問です。すいません。 例えばゲームとかである、「5秒経ったらメニュー画面に戻る」みたいな事をしたい時も、あまさとさんの様に、VSYNCやWAITを使うのでしょうか? それとも、ケインさんの様にTIME$を使うのですか?0そうだね プレイ済み2017/11/03 18:46:24に取得
プチコン3号 SmileBASIC コミュニティ返信[5]親投稿beans taku-binzu2015/9/25 22:07[追記] プログラムの写真の貼り直しです。0そうだね プレイ済み2017/11/03 18:46:24に取得
プチコン3号 SmileBASIC コミュニティ返信[6]親投稿みむ*mim hidemimtp2015/9/25 22:11やり方は何通りかあると思いますが、単純に1秒単位なら、メインループ内に「VSYNC 60」と書いておけば、ループ1回転が約1秒になるので、それが一番簡単かな?0そうだね プレイ済み2017/11/03 18:46:24に取得
プチコン3号 SmileBASIC コミュニティ返信[7]親投稿ケイン KEIN.HORGAN2015/9/25 22:12自分のやりやすいようにやったらいいと思います。1そうだね プレイ済み2017/11/03 18:46:24に取得
プチコン3号 SmileBASIC コミュニティ返信[8]親投稿みむ*mim hidemimtp2015/9/25 22:13あ、回答書いている間にもう終わってた(笑)0そうだね プレイ済み2017/11/03 18:46:24に取得
プチコン3号 SmileBASIC コミュニティ返信[9]親投稿あんど AND1GOUKI2015/9/25 22:27プログラムの動作がどのような状況でカウントダウンするのか・・・それが重要な気がしますが。。。 私がカウントダウンタイマー機能をプログラムした時は、最初のケインさんの方法に近い方法を採用していたりします。0そうだね プレイ済み2017/11/03 18:46:24に取得
プチコン3号 SmileBASIC コミュニティ返信[10]親投稿おちゃめ ochame_nako2015/9/25 22:59「1秒待つプログラム」ならば個人的にはVSYNC 60よりもWAIT 60をオススメします。 VSYNC 60は前回のVSYNCからの経過時間となるため前回VSYNCもしくはWAITを実行してから1秒以上経っていればVSYNCはスルーされるのに対してWAIT 60は確実に約1秒待ってくれるからです。 「5秒経ったら○○する」というのはWAIT 300の後に○○に相当する処理を書けば簡単に出来ますが、5秒以内であってもAボタンを押せばスキップ可能にしたいというのであればWAIT 1をループで最大300回実行(Aボタンを押したらループを抜ける)というのがベターだと思います。 とはいえ、どんな処理をするかによってTIME$、WAIT、MAINCNTのどれがベターかが変わると思います。 0そうだね プレイ済み2017/11/03 18:46:24に取得
プチコン3号 SmileBASIC コミュニティ返信[11]親投稿KU kerorinU2015/9/25 23:02・waitやvsyncで待つ方法 ・time$で測る方法 ・maincntで測る方法 これら以外にもいろいろあります。測る方法も、modを使う方法や計測用変数を使う方法など様々だし。0そうだね プレイ済み2017/11/03 18:46:24に取得
プチコン3号 SmileBASIC コミュニティ返信[12]親投稿みけらんジェロ chikuwaxx2015/9/25 23:04MAINCNTというのがあります。プチコンを起動してからどれだけ経ったかを調べる変数です。 これは1/60でカウントされますので M=MAINCNT @L IF M+6<=MAINCNT THEN @E GOTO @L @E END これで0.1秒しか数えませんがこの@Eにまた命令を加えるなどでお望みの物が作れるかと。 0そうだね プレイ済み2017/11/03 18:46:24に取得
プチコン3号 SmileBASIC コミュニティ返信[13]親投稿MIKI ifconfig2015/9/25 23:16maincnt は符号付き 32bit 整数かな? だとしたら、みけらんジェロさんのコードは無限ループする場合があります。 wrap する値を比較する場合は、加算使っちゃだめです。 M+6 <= maincnt ではなく 6 <= maincnt-m としないとダメです。 ∵たまたま m = 2^31-1 になった場合 m+6 は 2^31+5 になりますが、maincnt は 2^31-1 の次は -2^31 になるので、絶対に m+6 <= maincnt は真になりません。 0そうだね プレイ済み2017/11/03 18:46:24に取得
プチコン3号 SmileBASIC コミュニティ返信[14]親投稿れい rei-nntnd2015/9/25 23:47vsyncやwaitは1/60から結構ずれてるので、長い間待つ必要があるときは要注意。 これらは垂直同期を待つ関数で一定時間をまつ関数じゃない。 時刻を正確に知るにはTIME。0そうだね プレイ済み2017/11/03 18:46:24に取得
プチコン3号 SmileBASIC コミュニティ返信[15]親投稿おちゃめ ochame_nako2015/9/25 23:57確かにWAITやVSYNCは実時間と比較して0.3%くらいずれているので正確な時間は計測できないですね。 タイマーとして使用する場合に5分で約0.8秒ずれるのでこれが実用になるかどうかで判断すれば良いと思います。0そうだね プレイ済み2017/11/03 18:46:24に取得
プチコン3号 SmileBASIC コミュニティ返信[16]親投稿けい kei0baisoku2015/9/26 1:10有用な情報が色々出てるので勝手ながら整理してみようと思います。 (間違ってましたらどなたかツッコミをば) ・TIME$変数を見る ○時間は正確 ×1秒単位でしか計れない ×一定時間の判定が地味に面倒 ・WAIT命令を使う(=MAINCNT) ○お手軽 ×5分で0.8秒の誤差がある ×待ちながら他に何かする時はWAIT 1でループ回す必要ある MAINCNTを見るのは実質WAIT命令と全く同じという事でまとめさせてもらいました。 あとMMLの変数だか使って正確でかつ1秒未満の細かい時間計れるとか聞いた気がするのですがすみません私は全くわかりません(´ω`)0そうだね プレイ済み2017/11/03 18:46:24に取得
プチコン3号 SmileBASIC コミュニティ返信[17]親投稿おちゃめ ochame_nako2015/9/26 1:29BGMVARやMICPOSを使えば1ミリ秒単位での計測も可能ですが、誤差もそれなりにあるため用途はかなり限られそうです。 あとMAINCNTとTIME$を併用すれば長時間を正確に計測、かつ、1フレーム単位での計測も可能です。0そうだね プレイ済み2017/11/03 18:46:24に取得
プチコン3号 SmileBASIC コミュニティ返信[18]親投稿beans taku-binzu2015/9/29 19:03[追記] 返信が遅れてしまいました。すいません。コメントをして下さった皆様、ありがとうございました。 なお、このコメントをもちまして受付を終了させて頂きます。0そうだね プレイ済み2017/11/03 18:46:24に取得