0

我想同时缩放一组大约 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 秒,这对我的游戏来说太长了。有没有办法更快地做到这一点,优化这段代码。也许以不同的方式分组精灵可以提供帮助?

4

2 回答 2

0

可能是设备内存不足,尝试切换到 16 位纹理,可以通过在启动时添加此行来完成:

CCTexture2D::setDefaultAlphaPixelFormat(kCCTexture2DPixelFormat_RGBA4444);

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

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

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

一切顺利.. :)

于 2013-08-09T04:44:36.553 回答
0

for您可以通过对所有 CCSprite使用 -loop 来替换您的精灵数组,如下所示:

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

可能无济于事,但您至少可以放弃阵列;D

于 2013-08-07T12:05:40.093 回答