我正在使用AndEngine爲Android開發一款遊戲,並且我在不同車道的屏幕上有一組從左到右移動的汽車物體。當汽車超出攝像機寬度(屏幕尺寸)時,我將其位置設置爲0(屏幕左側) - spriteWidth()(僅在屏幕視口的左側)。我的問題是,由於隨機coordiantes返回,汽車保持負載。我嘗試了很多東西,但它一直在發生。我該如何停止在彼此之上加載數組的元素?
這是用來在遊戲開始時設置汽車座標的方法,也是在屏幕右側。
public Vector2 randomRoadCoord()
{
int Y;
int X;
int arrayLength = rManager.getInstance().roadPosition.length;
int arrayFirstValue = 1;
Random xR = new Random();
int Low = (int) (5 *(0 - rManager.getInstance().car_region.getWidth()));
int High = (int) (0 - rManager.getInstance().car_region.getWidth());
X = xR.nextInt(High-Low) + Low;
Random yR = new Random();
int LowY = arrayFirstValue;
int HighY = arrayLength;
Y = yR.nextInt(HighY-LowY) + LowY;;
if (firstLoad)
{
for(int i = 0; i < rManager.getInstance().carArray.length; i++)
{
for(int j = 0; j < rManager.getInstance().carArray.length; j++)
{
while(rManager.getInstance().carArray[i].getCarSprite().collidesWith(rManager.getInstance().carArray[j].getCarSprite()))
X-= 150;
}
}
}
lastX = X;
lastY = Y;
return new Vector2(X, Y);
}
正如您所見,在某些區域之間返回隨機的x和y值;特別是相機的頂部和底部(靜態相機,所以基本上是視口)以及屏幕之間-50到-450之間(類似的東西)。我的問題是,我需要他們停止裝載彼此,因爲如果發生碰撞,用戶會失去遊戲。我試着檢查每個汽車精靈,看它在加載時是否已經與另一輛汽車發生碰撞(儘管這會產生放慢速度,如果真的如此,則將X座標進一步移動到左側,但它看起來沒有任何作用。)
/*if (firstLoad)
{
for(int i = 0; i < rManager.getInstance().carArray.length; i++)
{
while(rManager.getInstance().carArray[i].getCarX() + 100 > X && X > rManager.getInstance().carArray[i].getCarX() - 100)
X-= 150;
}
firstLoad = true;
} */
我也試過檢查車是否在x + 150和x-150之間,但這也沒有做任何事情,不是所有的車都裝在彼此之上,但絕對超過1,這是太多了。
感謝。請隨意問任何問題。
------------------------ ---------更新:
我嘗試使用整形外科醫生的建議,但同樣的問題依然存在。雖然汽車在另一輛車上的可能性很小,但它偶爾也會發生很。我這次評論過這段代碼,所以它應該更容易理解。
for (int i = 0; i < rManager.getInstance().carArray.length; i++)
{
if(rManager.getInstance().carArray[i].getCarSprite().getX() < (rManager.camera.getWidth() + rManager.getInstance().carArray[i].getCarSprite().getWidth()))
{
// moves car from left to right
rManager.getInstance().carArray[i].getCarSprite().setPosition(rManager.getInstance().carArray[i].getCarSprite().getX() + (rManager.getInstance().carArray[i].getSpeed() * 4), rManager.getInstance().carArray[i].getCarSprite().getY());
}
else //if out of the screen
{
//set the position to the left of the screen
rManager.getInstance().carArray[i].getCarSprite().setPosition(randomRoadCoord().x, rManager.getInstance().roadPosition[(int) randomRoadCoord().y].y);
//if colliding with another car
while(collidesWithExisting(rManager.getInstance().carArray[i]))
{ //set a new random pos
rManager.getInstance().carArray[i].getCarSprite().setPosition(randomRoadCoord().x, rManager.getInstance().roadPosition[(int) randomRoadCoord().y].y);
}
}
}
的方法:再次
boolean collidesWithExisting(Car pCar)
{
for(int j = 0; j < rManager.getInstance().carArray.length; j++)
{
if (rManager.getInstance().carArray[j] == pCar)
return false;
if(rManager.getInstance().carArray[j].getCarSprite().collidesWith(pCar.getCarSprite()))
return true;
}
return false;
}
感謝。
啊我以爲我做到了。全部完成:D –
好吧,這還沒解決。那個評論是刪除了他的評論的人D: –
好吧,我正確地理解了這一點:你在相機外面(隨機地在x = -car.width和-infinity之間)加載汽車,他們應該在隨機車道上(y),對嗎?他們什麼時候開始移動,並且是否繼續裝載新車,當他們已經移動時(以及移動車後面的位置回到屏幕的左側)?順便說一句:對不起,刪除評論:D – GameDroids