我正试图从0到汽车旅行。但我可以看到,当汽车行驶时,显示屏上出现了明显的打嗝。让我告诉你我做了什么:
我有一个@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];
这是tick方法:
-(void)tick:(ccTime)time{
[[self.car runAction:MoveBy actionWithDuration:time position:ccp(100,0)];
}
如您所见,它只是一个简单的测试应用程序。图像“car.png”的大小为64x128。在AppDelegate.m中,帧速率设置为30 FPS。
答案 0 :(得分:1)
首先,如果你只是想让你的精灵移出屏幕边框,为什么不用一次动作而不是每0.5秒启动一次?您可以创建单个操作。使用这样的方法,你会遇到滞后的问题。例如,如果您的应用程序因任何原因而有2秒滞后,那么您的精灵将在X轴之后缓慢移动100点,因为没有保证您总是会收到0.5作为时间参数。如果延迟2秒,您将收到时间= 2.
如果你真的想用某种更新方法移动你的精灵,最好用setPosition改变它的位置,而不是用动作。例如,如果你想要将精灵的显示位置与它在物理世界中的位置(b2World等)同步,它会很有用。或者在某种复杂运动的情况下。例如,在使用公式sin(t)或阿基米德螺旋运动的情况下。
答案 1 :(得分:1)
在你的tick方法中,我会在运行之前停止动作。此外,请使用.5f,而不是将“时间”用于操作持续时间。时间就是你实际获得的这个时间点,可能是从.5开始的一些数字(如果我不得不猜测,则为+/- 1/60秒)。随着屏幕上的对象越来越多,再加上用户操作,预定方法上收到的“时间”将变得更加随机。我个人只用它来计算由预定方法处理的两个元事件之间的经过时间。