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

Optimization 在cocos2d中调整(缩放)一组精灵的最快方法,optimization,cocos2d-iphone,cocos2d-x,cocos2d-html5,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[

我想同时缩放一组大约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);
        }
    }
}
attr.zoomAllVisibleSprites=function(){
for(var i=0;i

在我的Android手机上执行这个小片段需要2-3秒,这对我的游戏来说太多了。是否有一种方法可以更快地完成,优化此代码。可能会以不同的方式对精灵进行分组?

您可以通过对所有CCSprite使用
for
-循环来替换精灵阵列,如下所示:

for(CCSprite *sprite in self.view.subviews){ //or scenes or whatever
        if([sprite isMemberOfClass:[CCSprite class]]){
           //Do your thing }} 
CCSpriteFrameCache::sharedSpriteFrameCache()->removeUnusedSpriteFrames();
CCTextureCache::sharedTextureCache()->removeUnusedTextures();
CCDirector::sharedDirector()->purgeCachedData();

可能没有多大帮助,但您至少可以放弃阵列;D

可能是设备内存不足,请尝试切换到16位纹理,可以在开始时添加以下行:

CCTexture2D::setDefaultAlphaPixelFormat(kCCTexture2DPixelFormat_RGBA4444)

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

for(CCSprite *sprite in self.view.subviews){ //or scenes or whatever
        if([sprite isMemberOfClass:[CCSprite class]]){
           //Do your thing }} 
CCSpriteFrameCache::sharedSpriteFrameCache()->removeUnusedSpriteFrames();
CCTextureCache::sharedTextureCache()->removeUnusedTextures();
CCDirector::sharedDirector()->purgeCachedData();
如果这不起作用,那么可能是OpenGL的问题,在这种情况下,您应该看看。这对我来说就像一个魔术


祝你一切顺利……)

在iOS中,您是否碰巧遇到了相同的时间延迟?在iOS中,没有更好。但现在看来,延迟只发生在代码段第一次执行时。可能场景还没有加载?还是怎样我迷路了。