Cocos2d iphone Cocos2D-只有一个小图像的帧速率打嗝

Cocos2d iphone Cocos2D-只有一个小图像的帧速率打嗝,cocos2d-iphone,frame-rate,Cocos2d Iphone,Frame Rate,我正在尝试让汽车从0移动到屏幕外。但我可以看到,当汽车行驶时,显示屏上出现了明显的打嗝。让我告诉你我做什么: 我有一辆@property(非原子的,坚固的)CCSprite汽车 在init方法中,我执行以下操作: self.car=[CCSprite spriteWithFileName:@"car.png"]; CGSize *windowSize=[[CCDirector sharedDirector] winSize]; CGSize carSize=car.contentSize; ca

我正在尝试让汽车从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];
下面是勾选方法:

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

正如你所看到的,它只是一个简单的测试应用程序。图像“car.png”的大小为64x128。在AppDelegate.m中,帧速率设置为30 FPS。

首先,如果您只想让精灵移出屏幕边框,为什么不使用一个动作而不每0.5秒启动一个新动作?您可以创建单个操作。同样,用你这样的方法,你会有问题的情况下,滞后。例如,如果你的应用程序由于任何原因会有2秒的延迟,在它之后,你的精灵将沿着X轴缓慢移动100点,因为无法保证你总是会收到0.5的时间参数。如果延迟2秒,您将收到时间=2


如果你真的想用某种更新方法移动你的精灵,最好用setPosition而不是action来改变它的位置。例如,如果您希望将精灵的显示位置与其在物理世界(b2World等)中的位置同步,则该选项非常有用。或者在某种复杂运动的情况下。例如,在使用公式sin(t)或阿基米德螺旋移动的情况下。

在您的勾选方法中,我会在运行新的移动之前停止移动操作。另外,不要用“时间”表示动作持续时间,而要用.5f。时间就是这个刻度的实际时间,可能是0.5(+/-1/60秒,如果我不得不猜的话)的某个数字。随着屏幕上的对象越来越多,再加上用户的操作,预定方法上接收到的“时间”将变得更加随机。我个人只使用它来计算由预定方法处理的两个元事件之间经过的时间。

你知道,实际上它不会只有一辆车。将会有无穷无尽的汽车,我将循环通过一系列汽车并更新它们的位置。随着汽车的不断创建,我需要不断检查新的汽车并相应地移动它们。你可以安排方法,例如,几秒钟一次,这将在某个位置创建汽车,并对其运行移动操作以从屏幕中删除。在这种情况下,你会得到你无尽的汽车