Cocos2d-X中实现批处理精灵

Cocos2d-X中实现批处理精灵,第1张

概述使用普通方法实现批处理精灵 在Sprite.h中添加下面的代码 #ifndef __Sprite_SCENE_H__#define __Sprite_SCENE_H__#include "cocos2d.h"USING_NS_CC;class Sprite : public CCLayer{public: //初始化层 bool init(); //

使用普通方法实现批处理精灵

在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中实现批处理精灵所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1001689.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存