我正在做一些游戏,现在我正在尝试为我的坦克实现漂移行为,但我无法成功实现它。
问题是它计算它的位置,如果它像 (430,130) 并使用 rand_floatRange 函数,它会给自己一个介于 0 和屏幕高度 (500) 之间的值,比如说 320,它会离开屏幕。
我的调试过程完全没有错误。它构建得很好,坦克在场上移动,但一段时间后它们会离开屏幕,因为没有限制可以阻止它们达到高值(例如:坦克位置在(450,100)并且屏幕是(600,600) ,如果坦克有新的目标(它的目标将从那个地方到达(300,200)(它的值从0到600),它将是(750,300)并且它会离开屏幕。
还有什么其他的,所以我可以修复它以正常工作并在屏幕高度和屏幕宽度范围内。
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;
}
如果还有其他需要,如果我有,我会在这里提供。