Animation Cocos2d精灵,仅在设备上移动时会跳过动画

Animation Cocos2d精灵,仅在设备上移动时会跳过动画,animation,cocos2d-iphone,ccsprite,Animation,Cocos2d Iphone,Ccsprite,我编写了一个演示应用程序,它在模拟器上运行得非常好,但是当我把它放到实际设备上时,骰子就会跳来跳去。这里有一个视频作为例子。重新启动应用程序后,动画效果良好。错误发生在反复按下滚动按钮约1分钟后 代码全部在以下位置运行: 如何在骰子对象中制作动画: CCAnimation*anim=[CCAnimation animation withframes:frames delay:delay]; if(self.sprite){ //给精灵设置动画 [self.sprite运行动作:[cAnima

我编写了一个演示应用程序,它在模拟器上运行得非常好,但是当我把它放到实际设备上时,骰子就会跳来跳去。这里有一个视频作为例子。重新启动应用程序后,动画效果良好。错误发生在反复按下滚动按钮约1分钟后

代码全部在以下位置运行:

如何在骰子对象中制作动画:

CCAnimation*anim=[CCAnimation animation withframes:frames delay:delay];
if(self.sprite){
//给精灵设置动画
[self.sprite运行动作:[cAnimate actionWithAnimation:anim restoreOriginalFrame:NO]];
}
滚动功能:

-(无效)滚动
{
//包含骰子新位置的数组
//预先确定位置,检查是否在其他骰子的顶部
NSMutableArray*检查位置=[NSMutableArray];
for(掷骰子数组中的骰子*d){
[d重置位置];
//在边界内选择一个随机位置
NSInteger x=arc4random()%600+50;
NSInteger y=arc4random()%600+150;
CGPoint位置=CGPointMake(x,y);
//检查骰子是否会碰到其他骰子
而(![self-checkPositionWithPoint:location array:checkPos]){
//若位置与另一个模具重叠,则获得新位置
//问题:这是O(无穷大)!
x=arc4random()%600+50;
y=arc4random()%600+150;
位置=CGPointMake(x,y);
}
//如果位置不重叠,则将其添加到要检查的位置数组中
[checkPos addObject:[NSArray arrayWithObjects:[NSNumber NUMBER WITHINTEGER:x],[NSNumber NUMBER WITHINTEGER:y],nil]];
//将骰子设置到某个位置的动画
//开关中添加的是一些随机性和纠正动画的定时偏移
NSInteger数框;
浮动帧率;
浮动模式=(浮动)(arc4random()%60)/100;
开关(d.fileNum){
案例0:
numberFrames=kRayFrames;
帧速率=numberFrames/24+mod;
打破
案例1:
numberFrames=kRayFrames;
帧速率=numberFrames/24+mod-0.4;
打破
案例2:
numberFrames=kTankFrames;
帧速率=numberFrames/24+mod+0.2;
打破
案例3:
numberFrames=kChickenFrames;
帧速率=numberFrames/24+mod;
打破
案例4:
numberFrames=kCowFrames;
帧速率=numberFrames/24+mod+0.2;
打破
案例5:
numberFrames=kHumanFrames;
帧速率=numberFrames/24;
打破
违约:
打破
}
id action=[CCMoveTo actionWithDuration:frameRate position:location];
id ease=[CCEaseOut action with action:action rate:4.0];
[d.sprite runAction:轻松];
}
}

这是一个performSelector:afterDelay:问题。我通过在延迟时间上增加一些填充时间来解决这个问题,这样事情就不会同时发生

我还加入了一个块,这样动作只能在动画完成后进行。在中断CCMoveTo风格的动画时,似乎存在某种问题