ゲーム内に単純なタイマークラスがあり、エンティティに何秒も何度も何かをさせることができます。これは、2つの機能があります。それは、それを必要とするものでつかんできるようにC++クラスの複数のインスタンス間で共有されているタイマーカウンタの問題
void Timer::GameTimer() // Gets time between frames
{
::ElapsedTime = Clock.GetElapsedTime();
Clock.Reset();
}
これは単に経過時間グローバルを更新します。それはgameloopの中に置かれています。その後
重要な1:
bool Timer::tCounter(int total) // Returns true every 'total' seconds
{
static float ftime; // Variable to hold the mounting elapsed time
static int n; // Counter variable for true trigger
ftime += ElapsedTime;
int itime = (int)ftime; //Truncate
if(!(itime%total) && itime != 0)
{
n++;
}
else
{
n = 0;
}
if (n == 1)
{
return true;
}
else
{
return false;
}
}
タイマーをタイマーとしてEntityクラス内でインスタンス化される::タイマータイマー
機能は、その後、エンティティの内部で呼ばれて::のインスタンスごとに一回のループごとに更新ゲーム内のエンティティクラス:
if (timer.tCounter(2))
{
Do stuff
}
問題は、一度に一つだけやってのもので、その結果、エンティティのインスタンスごとに一意にカウントしていないようで、他の奇妙なものが時々起こっている。問題は共有されている静的変数のようです。このtCounter関数がそれを呼び出すインスタンスごとに一意の変数を保持するようにするにはどうすればよいですか?
"問題は静的変数が共有されているようです。肯定的な側面では、 'Timer'クラスのメンバ変数として' ElapsedTime'を持っているようですので、そのロジックに従ってください。一方、それはあなたがより大きくより基本的な問題を持っているように見えます... –