之前做游戏写代码习惯了一种方式,就不想再尝试其它的方法了,遇到新的问题,觉得旧的方法还是可以解决的,就没有动力去找更好的方法,比如创建精灵,一直以来习惯了第一种、第三种、第四种方法,其它的很少尝试,今天在网上搜索资料,发现很多大神总结的非常好,我先拿来,放到这里,已方便自己以后查阅;
原文地址(不确定是否第一地址)
http://www.myexception.cn/operating-system/1468071.html
http://www.cocos2dev.com/?p=331
cocos2dx创建精灵的五种方法(包括使用图片名获取图片);
还是闲来无事,白白继续给大家分享经验,文笔不好还请见谅!废话少说,直接上代码:
// 创建精灵的五种方法
//方法一:直接创建精灵//适合于要显示的是这张图片的全部区域,
CCSprite * sprite = CCSprite::create("Icon.png");
//上面那句话也可以根据需要这样来写:
//CCString* fileName = CCString::createWithFormat("Icon_%d.jpg", flag);
//CCSprite* sprite = CCSprite::create(fileName->getCString());
sprite->setPosition(ccp(100, 100));
this->addChild(sprite);
// 方法二:参数 图片名称 矩形区域
//适合于需要显示此图片的部分区域
CCSprite * sprite = CCSprite::create("Icon.png",CCRectMake(0, 0, 30, 30));
sprite->setPosition(ccp(100, 100));
this->addChild(sprite);
方法三: 利用帧缓存中的一帧的名称声称一个对象
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("test_icon.plist");
CCSprite * sprite = CCSprite::createWithSpriteFrameName("Icon.png");
sprite->setPosition(ccp(100, 100));
this->addChild(sprite);
//方法四: 利用另外一帧生成一个精灵对象
//适合于做帧动画使用
CCSpriteFrame * frame = CCSpriteFrame::create("Icon.png", CCRectMake(0, 0, 40, 30));
CCSprite * sprite = CCSprite::createWithSpriteFrame(frame);
sprite->setPosition(ccp(310, 150));
addChild(sprite);
//方法五:利用纹理,//适合于需要频繁使用的图片
CCSpriteBatchNode* spriteTexture = CCSpriteBatchNode::create("iocn.png");
spriteTexture->setPosition(CCPointZero);
addChild(spriteTexture);
CCSprite* sprite = CCSprite::createWithTexture(spriteTexture->getTexture());
sprite->setPosition(ccp(visiblesize.width/2, 100));
spriteTexture->addChild(sprite, 2);
纹理用得不多,大多数时候直接用UI出得图片资源创建精灵;
其实,很多时候如果技术足够强大,就能在给定的条件下(比如ui资源)做出更多的效果图片,当然也可以为app节省一些资源,手游在这方面显得尤为重要,用最小的ui资源做出最多得效果,这样,app安装包就可以尽可能的压缩;
在cocos2d-x中,我们创建一个menuitem(CCMenuItemImage...)需要三个图片资源,我们来看一下创建一个CCMenuItemImage的接口:
static CCMenuItemImage* create(const char *normalImage, const char *selectedImage, const char *disabledImage);
在这里分别需要三个图片资源:正常状态、选中状态、禁用状态;我们之前的项目中,最低需求两个(因为没有禁用状态),往往是需要三个图片资源,这无疑增大了游戏的大小;其实,禁用状态的通用模式都是美工将正常状态的图片灰化而已,这用程序就可以实现,不需要另外一个图片,详情请看:点击打开链接;(创建高亮状态的精灵点击打开链接);
关于第5中方法,我之前在游戏中用的也少,主要用在创建背包格子的背景图片上,在此贴出:
在cocos2d-x 2.x 之后,大家都看到了左下角的FPS变成3行,多了两行数据。
最上面一行是指的当前场景的渲染批次(简单理解为需要渲染多少个贴图出来);
中间一行是渲染每一帧需要的时间;
最下行就是大家熟悉的FPS。
这样,我们就由优化程序的方向,针对第一点,请参考:点击打开链接
针对精灵的优化可以参考这篇文章:点击打开链接