2011-11-21 132 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