0

我有 3 张图片,我想一个接一个地重复它们。当图层向左移动时,第一个图像不再可见,并且该图像在右边最后一个图像之后占据新位置,因此第一个图像成为第三个图像,并且重复动画。

我的问题是,有时会有一点时间流逝,我认为它发生在第一张图像被删除并放在第三个位置时。我们几乎没有注意到它,但它有点“暂停”动画 0.1 秒,我想避免这种情况。

你知道怎么做吗?我已经尝试过使用此代码(删除图像并再次插入),或者只是替换为replace...atIndex但我遇到了同样的问题。代码是:

if (offsetParam <= offset1-spriteWidth){
        CCSprite *temp = [[sprites objectAtIndex:0] retain];
        [sprites removeObjectAtIndex:0];
        [sprites addObject:temp];
        temp.position = ccp(-offset1+(2*spriteWidth), temp.position.y);
        [temp release];

        offset1 -= spriteWidth;
 }

任何的想法 ?

谢谢


编辑:使用计数器,物体不会移动?(我曾尝试使用“保留”以防万一,但无论有没有它,我都得到了相同的结果)

if (rightDirection){
    //RIGHT
    CCLOG(@"offsetParam %f, offset1-spriteWidth %f", offsetParam, offset1-spriteWidth);
    if (offsetParam < offset1-spriteWidth){ //move the block to the right

        CCSprite *temp = [[grasses objectAtIndex:counterGrass] retain];
        counterGrass++;
        if (counterGrass>2) counterGrass = 0;
        temp.position = ccp(offset1+(2*spriteWidth), temp.position.y);//does not work
        [temp release];
        offset1 -= spriteWidth;
    }
4

1 回答 1

1

“精灵”是 CCArray 还是 NSMutableArray 类型的?因为 CCArray 与 removeObjectAtIndex 存在严重的性能问题,特别是如果索引较低(在数组的开头),如您的情况。

您可以尝试切换到 NSMutableArray 看看是否有帮助。

或者,避免使用 remove 和 add,因为它是多余的。而是使用索引计数器来告诉您哪个数组索引是第一个精灵。当索引 >= sprites 数组中的项目数时,将其重置为 0。

于 2012-08-13T13:52:09.190 回答