timer_repeat

タイマーループの始まりの場所を示す

timer_repeat p1,p2,p3,p4

p1=(10) : ミリ秒(繰り返しの間隔)の値もしくは変数(1次元配列)
p2=1〜(-1) : ループ回数
p3=0〜(0) : 拡張システム変数timer_cntのスタート値
p4=0〜2(0) : 既にタイマーループ中だったときの処理を決定

(プラグイン / モジュール : mod_TimerRepeat)

解説

p1で指定したミリ秒の間隔で、timer_repeattimer_loopの間をくり返し実行します。
スクリプト処理としては、timer_repeattimer_loop間は一度無視されてtimer_loop以降がすぐに実行されて行きます。
timer_repeattimer_loop間は後にタイマーが発動されてから処理されることになります。

通常のrepeatとは違い、間にwait,await命令を書いてはいけません。

timer_repeat命令のパラメータp2でくり返しの回数を指定することができます。回数の指定を省略、またはマイナス値を指定すると無限ループになります。

ループ回数を調べたい時や、カウンターを利用したい時のためにシステム変数timer_cntを参照することができます。timer_cntは通常、0からスタートして、 timer_loop命令でループするたびに1づつ増えていきます。
timer_repeat命令のp3でカウンタがスタートする数値を変更することも可能です。

ループの内部で、強制的にタイマーを終了させる場合には、 timer_break命令を使用してください。また、ループをやり直すためのtimer_continue命令も用意されています。

同一のタイマーループが既に実行中の場合、重複されないようになっています。
この処置は p4 で変更できます。
p4の値

タイマーループで使う変数の初期化処理用のtimer_initと、ループ回数の最後だけ(またはtimer_killしたときに)実行するtimer_deinitも用意されています。

また、timer_repeattimer_loop間はuniq_start,uniq_endを使用しなくてもuniq()変数が使用できます。

タイマーループ終了のさせ方

タイマー実行のオート/マニュアルについて
基本的にtimer_repeatは何もしなくても指定した時間ごとに自動で実行されます。(オート)

ただし、事前にtimer_setTimerEngineでマニュアル指定することで実行タイミングをコントロールすることができます。
これによって、await 16(60FPS)等でループしていた場合に、隙間で勝手に実行されるのを防ぐことができます。

タイマーの実行はループの中にtimer_fireを組み込んでください。
指定時間になったもの(超えたもの)があるか確認して必要なものだけ実行します。

タイマーの実行タイミング(timer_setTimerEngine)はtimer_repeat1つ1つに対して指定することができます。

p1に配列を指定した場合
timer_cntの値と連動した繰り返し間隔の変更ができます。
配列の終わりまで行くとまた最初から繰り返します。

例) 配列の要素が3 の場合
cnt : 0 → 1 → 2 → 3 → 4 → 5 → …
配列: 0 → 1 → 2 → 0 → 1 → 2 → …

アニメーションで各フレームの待機時間が異なるようなときにお使いください。

ループの内部でtimer_intervals変数を使うと、timer_repeat の p1配列 を参照できます。

サンプル

#include "../mod_TimerRepeat.hsp"

// 並行処理1(これらのtimer_repeat内処理は一度スルーされ、続けてtimer_loop以下が処理されます。)
pos 50,30 : mes "並行1:40ms毎"
timer_repeat 40  ; 40ミリ秒ごとに実行
	color 255,255,255 : boxf 50,50,150,150 : color 255,0,0
	line 100,100,100+(sin(M_PI*timer_cnt/10)*50),100+(cos(M_PI*timer_cnt/10)*50)
	pos 100,100 : mes ""+timer_cnt
timer_loop

// 並行処理2
pos 250,30 : mes "並行2:60ms毎"
timer_repeat 60  ; 60ミリ秒ごとに実行
	color 255,255,255 : boxf 250,50,350,150 : color 0,0,255
	line 300,100,300+(sin(M_PI*timer_cnt/36)*50),100+(cos(M_PI*timer_cnt/36)*50)
	pos 300,100 : mes ""+timer_cnt
timer_loop

// メインのループプログラム(タイトルバーでカウント)
repeat
	title "メイン: count= "+cnt
	await 1000
loop

関連項目

timer_repeatタイマーループの始まりの場所を示す(mod_TimerRepeat)
timer_loopタイマーループの始まりに戻る(mod_TimerRepeat)
timer_killタイマーループを終了させる(mod_TimerRepeat)
timer_initタイマーループ初期化処理(_init_end まで)(mod_TimerRepeat)
timer_deinitタイマーループ後始末処理(mod_TimerRepeat)
timer_breakタイマーループから抜けだしてタイマーも終了させる(mod_TimerRepeat)
timer_continueタイマーループをやり直す(mod_TimerRepeat)
timer_cntタイマーループのカウンター(mod_TimerRepeat)
timer_intervalstimer_repeat内で繰り返し間隔の取得(mod_TimerRepeat)
timer_getTimerTime実行中のタイマーループの経過時間を取得(mod_TimerRepeat)
timer_getTimeミリ秒タイマー(mod_TimerRepeat)
timer_setTimerSpeedタイマーループの繰り返し間隔を変更(mod_TimerRepeat)
timer_easeタイマーループ内で時間変化によるイージング値の取得(mod_TimerRepeat)
geteaseT時間変化によるイージング値を取得(mod_TimerRepeat)
timer_setTimerEngineタイマーの実行タイミングを変更する(オート/マニュアル)(mod_TimerRepeat)
timer_fireタイマーのマニュアル実行時に確認/実行を行う。(mod_TimerRepeat)
uniq_startuniq()のスコープ開始(mod_TimerRepeat)
uniqユニークな変数を定義(mod_TimerRepeat)
uniq_enduniq()のスコープ終了(mod_TimerRepeat)
timer_waiton実行を一定時間中断する(タイマーループ割り込み+oncmd等の割り込みジャンプに対応)(mod_TimerRepeat)
timer_awaiton一定の時間で待つ(タイマーループ割り込み+oncmd等の割り込みジャンプに対応)(mod_TimerRepeat)
timer_stopプログラム中断(タイマーループ割り込みに対応)(mod_TimerRepeat)

サンプル逆引き (13)

04.timer_repeatによる並行処理.hsp#include "../mod_TimerRepeat.hsp" 並行処理1(これらのtimer_repea..
05.timer_repeatの精度.hsp#include "../mod_TimerRepeat.hsp" *start t = timer_getT..
06.timer_easeの種類.hsptitle "flg="+flg+" "+typeName(flg) : mes typeName(flg) ..
07.timer_repeat/timer_easeの応用.hsp#include "../a2d+AlphaLayer.hsp" #include "../mod_Timer..
10.GIFアニメ表示.hsp#include "../a2d+AlphaLayer.hsp" #include "../mod_Timer..
11.1枚のPNGファイルでアニメーション.hsp#include "../a2d+AlphaLayer.hsp" #include "../mod_Timer..
13.レイヤードウィンドウでアニメーション.hsp#include "../a2d+AlphaLayer.hsp" #include "../mod_Timer..
14.(TimerRepeat_ver2.5)uniq2でひとつ外側を取得.hsp#include "../mod_TimerRepeat.hsp" randomize font msgoth..
EX1.スライドインメニュー【timer_repeat内に別のtimer_repeatを記述】.hsp#include "../a2d+AlphaLayer.hsp" #include "../mod_Timer..
EX2.ADVゲーム画面(だけ)【アルファレイヤーの中に子アルファレイヤーを作る】.hsp#include "../a2d+AlphaLayer.hsp" #include "../mod_Timer..
EX3.(HSP3Dish-TimerRepeat)ブロック崩し【timer_setTimerEngineマニュアル】.hsptitle "ブロック崩し" buffer 1,x2,y2 メニュー薄膜用のバッファ gsel 0 cls 4..
EX4.Floppy-Word【アルファレイヤー/タイマーリピート利用ミニゲーム】.hsp#include "hsptvapp.as" GitHubからモジュールを取得。 #include "../a..
EX5.スライダーオブジェクト.hsp#include "../a2d+AlphaLayer.hsp" #include "../mod_Timer..

情報

プラグイン / モジュールmod_TimerRepeat
バージョン2.5
作成日2024/1/5
著作者MIZUSHIKI
URLhttp://suwa.pupu.jp/
備考mod_TimerRepeat.hspをインクルードすること。
タイプ拡張命令
グループプログラム制御命令
対応環境・Windows 版 HSP