Optimization 在cocos2d中调整(缩放)一组精灵的最快方法
我想同时缩放一组大约10个精灵。精灵是具有透明背景的不同精灵层 我试图先将所有精灵附加到图层,然后将引用存储在数组中。之后,当我单击按钮时,我执行以下操作: 抱歉,这是Javascript,但在Objective-C中几乎是一样的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[
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中,没有更好。但现在看来,延迟只发生在代码段第一次执行时。可能场景还没有加载?还是怎样我迷路了。