我正在做一些遊戲,現在我正在試圖爲我的坦克實現漫遊行爲,但我無法成功實現它。在遊戲中實現漫步行爲
問題是,它計算它的位置,如果它像(430,130)和使用rand_floatRange函數,它會給自己一些介於0和屏幕高度(500)之間的值,可以說320,它會離開屏幕。
我的調試過程根本沒有錯誤。它建造得很好,坦克在現場移動,但是他們在一段時間後離開了屏幕,因爲沒有限制可以阻止他們達到高值(例如:坦克位置是(450,100),屏幕是(600,600) ,如果坦克獲得新的目標(其中的目標將達到(300,200)(從0到600的值),它將會是(750,300),並且它將離開屏幕。 還有什麼,所以我可以修復它工作得很好,並在一定範圍screenHeight和屏幕寬度的。
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;
}
如果什麼都需要,如果我有它,我會在這裏提供。
好吧,讓我換句話說/編輯。 @KeithNicholas – Takarakaka
好吧,使用我的計算,我發現一旦它獲得目標X和Z值,它就會經過特定的循環並退出,再次獲取X和Z值。我在這裏必須做的是在場景中引入另一個變量,它將跟蹤坦克是否在位,如果是,它可以離開循環。搞清楚如何實施,一旦我得到解決方案,將發佈回來。 – Takarakaka