Ios 精灵动画在Cocos2d的NSThread方法中不起作用

Ios 精灵动画在Cocos2d的NSThread方法中不起作用,ios,cocos2d-iphone,nsthread,ccsprite,ccaction,Ios,Cocos2d Iphone,Nsthread,Ccsprite,Ccaction,我创建了一个线程,如下所示: [NSThread detachNewThreadSelector:@selector(connectionFinishedThread) toTarget:self withObject:nil]; 在这个方法中,我创建了一个精灵,并为这个精灵提供了动画。动画不可见 线程方法中的我的代码: CCSprite *aniSprite = [CCSprite spriteWithSpriteFrameName:@"r_anim01.png"]; aniSprite.p

我创建了一个线程,如下所示:

[NSThread detachNewThreadSelector:@selector(connectionFinishedThread) toTarget:self withObject:nil];
在这个方法中,我创建了一个精灵,并为这个精灵提供了动画。动画不可见

线程方法中的我的代码:

CCSprite *aniSprite = [CCSprite spriteWithSpriteFrameName:@"r_anim01.png"];
aniSprite.position = ccp(50, 50);
[self addChild:aniSprite z:22];

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"r_anim1.plist"];

CCSpriteBatchNode *animSheet = [CCSpriteBatchNode batchNodeWithFile:@"r_anim1.png"];
[self addChild:animSheet];

NSMutableArray *animFrames = [NSMutableArray array];
for (int i=1; i<=6; i++) {
    [animFrames addObject:
     [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
      [NSString stringWithFormat:@"r_anim1%d.png",i]]];
}

CCAnimation *anim = [CCAnimation animationWithSpriteFrames:animFrames delay:0.1f];
CCAction *spriteAction = [CCRepeatForever actionWithAction: [CCAnimate actionWithAnimation:anim]];

[sprite runAction:spriteAction];
CCSprite*aniSprite=[CCSprite spritewithpriteframename:@“r_anim01.png”];
茴香位置=ccp(50,50);
[自加子:茴香醚z:22];
[[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@“r_anim1.plist”];
CCSpriteBatchNode*animSheet=[CCSpriteBatchNode batchNodeWithFile:@“r_anim1.png”];
[自添加子对象:animSheet];
NSMutableArray*animFrames=[NSMutableArray];

对于(int i=1;i大多数对CCNode类属性的更改必须在主线程上完成。Cocos2D不支持像Sprite Kit这样的多线程

例如,从背景线程更改精灵的纹理肯定会崩溃。但即使是细微的问题也会发生,因为所有属性都声明为非原子的


将线程与cocos2d一起使用的唯一方法是确保后台线程中运行的任何逻辑都不会直接更改节点的属性。也就是说,只要AI参与者不是节点而是自定义类,在后台执行一些AI计算就可以了。

您不应该尝试操作cocos2d对象(例如,CCNode派生的对象)保存对象(CCLayer、CCScene等)的容器可能正在同时操作它,并且没有一个典型的并发机制(互斥)有效


如果您需要精灵在每次帧更新时执行某种更新操作,则应安排容器更新精灵。在CCScene更新期间,移动精灵、更新其方向等非常常见。

所有图形都应使用cocos2d在主线程上完成。使用单独的线程?我需要线程中的动画。因为我一次有10个动画。可能吗?可能吗?是的,这是可能的(更均匀)。所有这些都是用cocos2d在主踏板上完成的。你需要注意的是绘制的数量(如果你关心性能)。如果您的精灵都在一个纹理中,请使用一个批处理节点,所有动画都将通过一个绘图调用进行动画制作。查看SpriteKit的文档,了解显示链接循环的工作原理……毕竟SK的灵感来自cocos2d:)最后一句话:如果您是第一次尝试,请尽可能多地尝试框架。不要将模拟器用作玩家体验性能的指标。在项目的早期将设备作为目标,这是您打算支持的最低入门设备,并将其作为良好性的试金石。在我的一个游戏中,我在模拟器上获得了8-12 fps,在低端设备上获得了稳定的60 fps(都在主线程上:)。