OpenSiv3D
OpenSiv3D copied to clipboard
一定時間ごとにイベントを実行する処理に便利なクラス
- https://gist.github.com/Reputeless/94df4c03327bffe5f7ea3b8ea5718381
- @tomolatoon さんの案: https://gist.github.com/tomolatoon/86456ce51d99dca76d22ce016cad6db5
from OpenSiv3D 実装会(2023 年 8 月)
出た意見:
- 1 フレームで 2 回トリガーしたとき、「敵の座標に弾を設置」だと弾を同じ場所に重ねて配置してしまう誤用の心配がある。
- トリガーからの経過時間を
{ 0.05, 0.01 }
のように配列で返す
ディスパッチで返り値を変えるようにしてみました
void Main()
{
Interval interval{0.001};
while (System::Update())
{
// .update(Interval::Count) と同じ
// 返り値は、何回発火したかの値
for (auto&& c : step(interval.update()))
{
Print << c;
}
// 実質は一個上と同じ
// 返り値は、何回発火したかの値を step したもの
for (auto&& c : interval.update(Interval::CountRange))
{
Print << c;
}
// 返り値は、何秒前に発火したかの正の値の配列
for (auto&& t : interval.update(Interval::FireTimes))
{
Print << t;
}
}
}
Siv3D の慣習的には、関数名で区別するケースが多いと思われます。
ただ、.update()
という名前でないとほかのクラスとの一貫性が得られないというのもあるので、要検討です。
実装案更新
- https://gist.github.com/Reputeless/94df4c03327bffe5f7ea3b8ea5718381