OpenSiv3D icon indicating copy to clipboard operation
OpenSiv3D copied to clipboard

一定時間ごとにイベントを実行する処理に便利なクラス

Open Reputeless opened this issue 1 year ago • 4 comments

  • https://gist.github.com/Reputeless/94df4c03327bffe5f7ea3b8ea5718381
  • @tomolatoon さんの案: https://gist.github.com/tomolatoon/86456ce51d99dca76d22ce016cad6db5

from OpenSiv3D 実装会(2023 年 8 月)

Reputeless avatar Aug 13 '23 08:08 Reputeless

出た意見:

  • 1 フレームで 2 回トリガーしたとき、「敵の座標に弾を設置」だと弾を同じ場所に重ねて配置してしまう誤用の心配がある。
  • トリガーからの経過時間を { 0.05, 0.01 } のように配列で返す

Reputeless avatar Aug 13 '23 08:08 Reputeless

ディスパッチで返り値を変えるようにしてみました

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;
		}
	}
}

tomolatoon avatar Aug 13 '23 08:08 tomolatoon

Siv3D の慣習的には、関数名で区別するケースが多いと思われます。 ただ、.update() という名前でないとほかのクラスとの一貫性が得られないというのもあるので、要検討です。

Reputeless avatar Aug 13 '23 08:08 Reputeless

実装案更新

  • https://gist.github.com/Reputeless/94df4c03327bffe5f7ea3b8ea5718381

Reputeless avatar Aug 13 '23 14:08 Reputeless