2012-06-18 28 views
0

我試圖讓一輛車從0行駛到離屏。但是我可以看到,在汽車行駛時顯示器有一個明顯的呃逆。讓我告訴你我在做什麼:Cocos2D-只有一個小圖像的幀速率打嗝

我有一個@property(非原子,強大的)CCSprite車;

在init方法我做到以下幾點:

self.car=[CCSprite spriteWithFileName:@"car.png"]; 
CGSize *windowSize=[[CCDirector sharedDirector] winSize]; 
CGSize carSize=car.contentSize; 
car.position=ccp(0-carSize.width/2,windowSize.height/2); 
[selp addChild:car]; 
[self schedule:@selecor(tick:) interval:0.5]; 

這裏的蜱方法:

-(void)tick:(ccTime)time{ 
[[self.car runAction:MoveBy actionWithDuration:time position:ccp(100,0)]; 
} 

正如你看到的,它只是一個簡單的測試應用程序。圖片「car.png」的大小是64x128。在AppDelegate.m中,幀速率設置爲30 FPS。

回答

1

首先,如果你只是想讓你的精靈離開屏幕邊界,爲什麼不用每0.5秒就開始一個新的動作呢?您可以創建單個操作。此外,您也可以使用這種方法,以防止滯後。舉例來說,如果你的應用程序由於某種原因會有2秒的滯後時間,那麼在你的精靈將慢慢地由X軸移動100點之後,因爲沒有保證你總能得到0.5作爲時間參數。在2秒滯後的情況下,您將收到時間= 2。

如果您確實想要在某種更新方法中移動您的精靈,最好使用setPosition更改它的位置,而不是採取行動。例如,如果您想要將精靈的顯示位置與其在物理世界中的位置(b2World等)進行同步,它會很有用。或者遇到某種複雜的運動。例如,在公式sin(t)或阿基米德螺旋運動的情況下。

+0

你知道,實際上它不會只有一輛車。將有無盡的汽車,我會循環通過汽車陣列和更新他們的位置。隨着汽車將不斷創建,我需要不斷檢查新的並相應地移動它們。 –

+0

您可以調度方法,例如幾秒鐘,這將在某個位置創建汽車,並對其執行移動操作以從屏幕移除。在這種情況下,你會得到你無盡的汽車 – Morion

1

在你的tick方法中,我會在運行一個新的方法之前停止移動。另外,不要使用'時間'作爲動作持續時間,而應該使用.5f。時間就是你實際得到的這個剔號,可能是0.5的一些數字(如果我不得不猜測的話,+/- 1/60秒)。隨着更多的對象在屏幕上,再加上用戶操作,在預定方法上接收到的'時間'將變得更加隨機。我個人僅使用它來計算兩個由預定方法處理的元事件之間的經過時間。