2011-11-21 123 views
0

我謹簡單CCSprite使用此代碼的iOS設備的屏幕上:流暢的動畫爲iOS

[self schedule:@selector(update:) interval:0.0167]; 

- (void) update:(ccTime) delta { 
    CGPoint currPos = self.position; 
    currPos.x += xVelocity; 
    currPos.y += yVelocity; 

    self.position = currPos; 
} 

這工作但動畫並不順利。 如何提高動畫的平滑度?

我的場景是非常簡單的(只有一個全屏CCSprite背景圖像和一個相對較小的CCSprite,移動緩慢)。

我記錄了ccTime delta,它不一致(它幾乎總是大於我指定的0.0167區間...有時達到4x的因子)。

我已經考慮將更新方法中的運動定製爲增量時間(較大的增量=>較大的運動等)。然而,考慮到我的場景簡單,似乎有一個更好的方法(以及我可能缺少的一些基本的東西)。

回答

1

試試,看看是否有差別。此方法專爲您正在做的事情而設計,並且可能更平滑。

2

調度程序將嘗試調整並根據您的間隔調用您的選擇器,但是如果有其他進程在運行,它可能會更早或更晚(因此爲什麼會出現不一致)。

取而代之的是,將xVelocity和yVelocity乘以delta - 這應該將速度放大到更平滑的運動。

例如:使用默認[self scheduleUpdate]方法,而不是直接爲你正在做的調用它

- (void) update:(ccTime) delta { 
    CGPoint currPos = self.position; 
    currPos.x += (xVelocity * delta); 
    currPos.y += (yVelocity * delta); 

    self.position = currPos; 
} 
+0

使用delta也是教程中採用的方法。 http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:lesson_2._your_first_game –

+0

我嘗試了三角洲方法。不幸的是它沒有奏效。按照andrewx的建議使用'scheduleUpdate'運行良好。 – SundayMonday