2014-03-27 52 views
0

我試圖每隔10秒產生一個對象,它從屏幕左側進入,當它到達屏幕右側或與我的另一個矩形相交時終止。我已經能夠每隔3秒或更長時間產生一個對象,但是如果我嘗試少量產生對象,我的滾動背景會凍結一段時間(可測量到我設置的對象產生時間) 。請注意,我的遊戲的其他部分不受影響(例如,我的對象動畫仍可正常工作)。對象產生時間導致滾動背景凍結

我猜測我的產卵對象的時間安排是干擾我的滾動背景的時間安排,但我無法弄清楚到底發生了什麼。

我的產卵對象時間調度使用該方法(請注意,spawnObject是創建該對象矩形的方法,這是一個陣列的一部分的名稱)設置:

private long lastObjectTime; 

lastObjectTime = TimeUtils.millis(); 
if(TimeUtils.millis() - lastObjectTime > 3000) spawnObject(); 

我的滾動背景時間表是用這種方法設置:

private float currentBgX; 
private float currentBgX1; 
private long lastTimeBg; 

// background separator for 800x480 background .ong 
currentBgX = 800; 
currentBgX1 = 800; 

// set background to current time 
lastTimeBg = TimeUtils.nanoTime(); 

// move the separator every 100000 nanoseconds 
if(TimeUtils.nanoTime() - lastTimeBg > 1000000) 
{ 
// move the separator 1px; 4px 
currentBgX -= 1; 
currentBgX1 -= 4; 
lastTimeBg = TimeUtils.nanoTime(); 
} 

// if the separator reaches the edge, move it back to the start 
if(currentBgX == 0) 
    currentBgX = 800; 
if(currentBgX1 == 0) 
    currentBgX1 = 800; 

注意,我使用的是備用的時序安排我的產卵對象,以避免與我的滾動背景時間表干擾審判。我嘗試這樣做:

float timer = 0f; 

if (timer >= 3f) 
{ 
spawnObject(); 
timer = 0f; 
} 

直接在上面產卵對象的時序安排有完全相同的第一定時調度在相同的效果(基於TimeUtils.millis();)

有誰知道我該怎麼做對象產卵的頻率較低(即間隔超過3秒),而不會讓我的滾動背景凍結?

回答

0

我認爲這個問題是在這裏:

lastObjectTime = TimeUtils.millis(); 
if(TimeUtils.millis() - lastObjectTime > 3000) spawnObject(); 

要設置lastObject爲當前時間,然後隨即你所得到的差(這將是非常非常小的),看它是否大於3秒(可能不會)。

無論如何,我會建議創建一個Spawner類,每次通過deltaTime循環進行更新。它會在那裏管理自己的產卵計時器並採取適當的行動。爲你的背景創建另一個類,它也會這樣做。這些都將被包含在一個「世界」類中,該類也將根據deltaTime進行更新。這樣一切都是分開的,你不應該擔心這些問題。讓我知道你是否需要更多的澄清。

+0

感謝您的全面回答!我現在正在創建Spawner和Background類,因爲我原本在一個龐大的類中擁有一切。隨着我的兩個新課程(加上我的原創遊戲課程),我還無法看到背景或產卵對象,但我正在研究它。我也在爲所有對象使用一個計時器。當我能夠解決您的解決方案時,我會盡快回復您。乾杯。 – jdubbing

0

這個if聲明有什麼意義?

// set background to current time 
lastTimeBg = TimeUtils.nanoTime(); 

// move the separator every 100000 nanoseconds 
if(TimeUtils.nanoTime() - lastTimeBg > 1000000) 
{ 

你真的想看看如果花10萬納秒從線獲得ifif自己之前?

哦,並嘗試只使用com.badlogic.gdx.utils.Timer

+0

嘿,謝謝你指出這一點。你說得對,這似乎並不重要。我正在爲所有對象使用同一個計時器。我會看看這是怎麼回事。 – jdubbing