在cocos2d中调整(缩放)一组精灵的最快方法

时间:2013-08-07 00:50:09

标签: optimization cocos2d-iphone cocos2d-x cocos2d-html5

我想同时缩放一组约10个精灵。精灵是不同的精灵层,背景透明。

我正在尝试首先将所有精灵预先附加到图层并将参考存储在数组中。之后,当我点击按钮时,我这样做: 对不起,这是Javascript,但在Objective-C中几乎是一样的。

    attr.zoomAllVisibleSprites = function() {
    for (var i = 0; i < this.SpriteArray.length; i++) {
        if (this.SpriteArray[i].isVisible()) {
            this.SpriteArray[i].setAnchorPoint(cc.PointMake(0.5,0.5));
            this.SpriteArray[i].setScale(2, 2);
        }
    }
}

执行这个小小的片段需要在我的Android手机上大约2-3秒,这对我的游戏来说太过分了。有没有办法更快地完成它,优化此代码。也许以精灵可以帮助的不同方式分组?

2 个答案:

答案 0 :(得分:0)

您可以使用for - 循环替换所有CCSprit的精灵数组,如下所示:

for(CCSprite *sprite in self.view.subviews){ //or scenes or whatever
        if([sprite isMemberOfClass:[CCSprite class]]){
           //Do your thing }} 

可能没有帮助,但你可以至少抛弃阵列; D

答案 1 :(得分:0)

可能是设备耗尽内存,尝试切换到16位纹理,可以通过在开始时添加此行来完成:

CCTexture2D::setDefaultAlphaPixelFormat(kCCTexture2DPixelFormat_RGBA4444);

此外,您可以在加载新场景之前卸载不需要的纹理,如下所示:

CCSpriteFrameCache::sharedSpriteFrameCache()->removeUnusedSpriteFrames();
CCTextureCache::sharedTextureCache()->removeUnusedTextures();
CCDirector::sharedDirector()->purgeCachedData();

如果这不起作用那么它可能是Open-GL的问题,在这种情况下你应该看看this。它对我来说就像一个魔术。

All the Best ..:)

相关问题