投稿
おちゃめ ochame_nako
1000分の1秒単位の時間が取得可能なTIMER関数と1000分の1秒単位のウェイトが可能なMWAIT命令を作りました。(使い方はコメントにて)
11そうだね
プレイ済み
返信[1]
親投稿
おちゃめ ochame_nako
1000分の1秒単位(1ミリ秒単位)の時間を取得可能なTIMER関数はグローバル変数_TIMER0、_TIMER1、_TIMER2を使います。 何のことか分からない人はリスト1行目と同じようにVARによる変数定義をTIMER関数使用前に行ってください。 最初にTIMERSTART命令でタイマーを初期化します。あとはTIMER()を呼び出せばTIMERSTARTを実行してからの時間がミリ秒単位で取得できます。 正常にカウントさせるためには8秒以内に1回はTIMER関数を実行してください。ループに挟んでおけば問題ないでしょう。 8秒以上経っている場合はTIMERSTARTで初期化すれば良いです。
0そうだね
プレイ済み
返信[2]
親投稿
おちゃめ ochame_nako
1ミリ秒単位のウェイトが可能なMWAIT命令はTIMER関数を流用して作っています。MWAIT命令しか使用しない場合もTIMER関数のリストを入力してください。 使い方は簡単でMWAIT 10とすれば10ミリ秒(0.01秒)のウェイトになります。WAIT 1でも大きすぎるという場合に使ってみてください。最大8806305412517928ミリ秒まで指定可能です。 twitterで1ミリ秒単位の時間取得やウェイト命令が欲しいという人が居たので作ってみました。 個人的には1ミリ秒単位のタイマーを使う機会はないのですが、New3DSと旧3DSでは3~4倍の実行時間の差があるためFOR~NEXTによる単純なループで短いウェイトを作った場合には時間に差が出てしまうためそういう場合にはこのMWAITが活用できるかもしれません。
0そうだね
プレイ済み
返信[3]
親投稿
おちゃめ ochame_nako
昨日公開した動作中にスリープしたかどうか(本体の閉じたかどうか)を取得できるSLEEP関数ですが、このTIMER関数を使えばそれと同様な処理が可能になります。 VSYNC 1だと1回16~17ミリ秒になるためループ中にTIMER関数をおいて前回との差分が18ミリ秒以上(誤動作防止のためマージンをかなり大きめにとった場合には20ミリ秒以上)となっていればスリープしたというのが分かります。 まぁスリープしたかどうかを知りたいだけならばSLEEP関数を使った方がお手軽ですが。
0そうだね
プレイ済み