使用普通方法实现批处理精灵
在Sprite.h中添加下面的代码
#ifndef __Sprite_SCENE_H__#define __Sprite_SCENE_H__#include "cocos2d.h"USING_NS_CC;class Sprite : public cclayer{public: //初始化层 bool init(); //创建场景 static CCScene* scene(); //响应触摸 bool Sprite::cctouchBegan(CCtouch* touch,CCEvent*); //用于创建:场景、菜单、层等东西 CREATE_FUNC(Sprite);};#endif // __Sprite_SCENE_H__
在Sprite.cpp中添加下面的代码
#include "Sprite.h"USING_NS_CC;//创建场景CCScene* Sprite::scene(){ //创建场景 CCScene *scene = CCScene::create(); //创建层 Sprite *layer = Sprite::create(); //将层加到场景上 scene->addChild(layer); //返回场景 return scene;}//初始化实例句柄bool Sprite::init(){ //初始化父类cclayer cclayer::init(); //得到窗口的尺寸 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //设置坐标 CCPoint ptCenter = ccp(winSize.wIDth / 2,winSize.height / 2); //创建一个批处理结点容器 CCSpriteBatchNode* batch = CCSpriteBatchNode::create("Closenormal.png"); //将精灵加到层中 addChild(batch); //使用纹理创建精灵 CCSprite* sprite = CCSprite::createWithTexture(batch->getTexture()); //将精灵加到容器上 batch->addChild(sprite); //设置精灵的位置 sprite->setposition(ptCenter); //设置触摸 settouchEnabled(true); settouchMode(kCCtouchesOneByOne); return true;}//响应触摸bool Sprite::cctouchBegan(CCtouch* touch,CCEvent*){ //得到窗口的尺寸 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //循环100次,创建1000个精灵 for (int i = 0; i < 1000; i++) { //创建精灵 CCSprite* sprite = CCSprite::create("Closenormal.png"); //将精灵添加到层上 addChild(sprite); //设置精灵的位置 sprite->setposition(ccp(CCRANDOM_0_1()*winSize.wIDth,CCRANDOM_0_1()* winSize.height)); } return true;}
执行结果:
1、打开程序后的效果:启动程序后帧率为58.7
2、单击3次鼠标后的效果:单击三次鼠标后实现了批处理精灵帧率减少
使用纹理实现批处理精灵
在Sprite.h中添加下面的代码
#ifndef __Sprite_SCENE_H__#define __Sprite_SCENE_H__#include "cocos2d.h"USING_NS_CC;class Sprite : public cclayer{public: //初始化层 bool init(); //创建场景 static CCScene* scene(); //响应触摸 bool Sprite::cctouchBegan(CCtouch* touch,CCEvent*); CCSpriteBatchNode* _batch; //用于创建:场景、菜单、层等东西 CREATE_FUNC(Sprite);};#endif // __Sprite_SCENE_H__
Sprite.cpp中的代码
#include "Sprite.h"USING_NS_CC;//创建场景CCScene* Sprite::scene(){ //创建场景 CCScene *scene = CCScene::create(); //创建层 Sprite *layer = Sprite::create(); //将层加到场景上 scene->addChild(layer); //返回场景 return scene;}//初始化实例句柄bool Sprite::init(){ //初始化父类cclayer cclayer::init(); //得到窗口的尺寸 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //设置坐标 CCPoint ptCenter = ccp(winSize.wIDth / 2,winSize.height / 2); //批处理精灵 CCSpriteBatchNode* batch = CCSpriteBatchNode::create("Closenormal.png"); addChild(batch); _batch = batch; CCSprite* sprite = CCSprite::createWithTexture(batch->getTexture()); batch->addChild(sprite); sprite->setposition(ptCenter); settouchEnabled(true); settouchMode(kCCtouchesOneByOne); return true;}//响应触摸bool Sprite::cctouchBegan(CCtouch* touch,CCEvent*){ CCSize winSize = CCDirector::sharedDirector()->getWinSize(); for (int i = 0; i < 1000; i++) { CCSprite* sprite = CCSprite::createWithTexture(_batch->getTexture()); _batch->addChild(sprite); sprite->setposition(ccp(CCRANDOM_0_1()*winSize.wIDth,CCRANDOM_0_1()* winSize.height)); } return true;}
执行结果:
1、打开程序后的效果:启动程序后帧率为58.7
2、单击多次后的效果,帧率没有明显变化
说明:CCSpriteBatchNode也是一个容器,但是它只能包容CCSprite对象,而且要求这些精灵来自同一个纹理
以上是内存溢出为你收集整理的Cocos2d-X中实现批处理精灵全部内容,希望文章能够帮你解决Cocos2d-X中实现批处理精灵所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)