私はいくつかのゲームを行っており、現在、タンクの移動動作を実装しようとしているところですが、うまく実装できません。
問題は、その位置を計算し、それが (430,130) のようで、rand_floatRange 関数を使用して、0 と画面の高さ (500) の間の値を自分自身に与えることです。320 としましょう。画面から消えます。
私のデバッグプロセスにはまったくエラーはありません。それは問題なく構築され、戦車はフィールド上を移動しますが、高い値に達するのを止める制限がないため、しばらくすると画面から消えます (例: 戦車の位置は (450,100) で、画面は (600,600) です) 、そしてタンクが新しいターゲットを取得した場合(そのターゲットはその場所から( 300,200 )に到達します( 0 から 600 の値を取ります)、それは(750,300)になり、画面から消えます。
screenHeight と screenWidth の範囲で問題なく動作するように修正できるものは他にありますか。
void Tank::Wander()
{
float randXs,randZs;
srand(time(NULL));
for(int i=0;i<tanks.size();i++)
{
randXs = rand_FloatRange(screenHeight);
randZs = rand_FloatRange(screenHeight);
{
if(randXs < tanks[i]->givePosX() && randZs < tanks[i]->givePosZ() )
{
tanks[i]->posX= tanks[i]->givePosX() - 0.1;
tanks[i]->posZ= tanks[i]->givePosZ() - 0.1;
}
else if(randXs > tanks[i]->givePosX() && randZs < tanks[i]->givePosZ() )
{
tanks[i]->posX= tanks[i]->givePosX() +0.1;
tanks[i]->posZ= tanks[i]->givePosZ() - 0.1;
}
else if(randXs > tanks[i]->givePosX() && randZs > tanks[i]->givePosZ() )
{
tanks[i]->posX= tanks[i]->givePosX() + 0.1;
tanks[i]->posZ= tanks[i]->givePosZ() +0.1;
}
else
{
tanks[i]->posX= tanks[i]->givePosX() - 0.1;
tanks[i]->posZ= tanks[i]->givePosZ() + 0.1;
}
}
}
}
float Tank::rand_FloatRange(float a)
{
float c;
c = rand() % (int) a;
return c;
}
他に必要なものがありましたら、こちらで提供させていただきます。