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

在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中实现批处理精灵的更多相关文章

  1. 如何在Cocos2D 1.0 中掩饰一个精灵(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 原帖来自Ray Wunderlich写的精彩的文章 How To ...

  2. 如何在cocos2d项目中enable ARC

    如何在cocos2d项目中enable ARC 基本思想就是不支持ARC的代码用和支持ARC的分开,通过xcode中设置编译选项,让支持和不支持ARC的代码共存. cocos2d是ios app开发中 ...

  3. 如何在Cocos2D游戏中实现A*寻路算法(六)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  4. 如何在Cocos2D游戏中实现A*寻路算法(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  5. 如何在Cocos2D 1.0 中掩饰一个精灵(六)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 掩饰一个精灵:实现代码 打开HelloWorldLayer.m并 ...

  6. 如何在Cocos2D 1.0 中掩饰一个精灵(五)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 掩饰和CCRenderTexture CCRenderTextu ...

  7. 如何在Cocos2D 1.0 中掩饰一个精灵(四)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 为了完成需要的效果,我们将使用如下策略: 我们将首先绘制掩饰精灵 ...

  8. 如何在Cocos2D 1.0 中掩饰一个精灵(二)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 让我们开始吧 打开Xcode,从New Project中选择co ...

  9. 如何在Cocos2D 1.0 中掩饰一个精灵(三)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 尝试编译运行,在你每一次点击屏幕的时候,你将看到我可爱的妻子制作 ...

随机推荐

  1. Mac OS X在建筑Python科学计算环境

    经验(比如这篇日志:http://blog.csdn.net/waleking/article/details/7578517).他们推荐使用Mac Ports这种软件来管理和安装全部的安装包.依照这 ...

  2. Android:主题(Theme)

    1.主题和样式的区别主要区别在 主题不能作用于单个View组建,主题应该对整个应用中的所有Activity起作用或者对指定的Activity起作用. 主题定义的格式应该是改变窗口的外观格式,例如窗口变 ...

  3. WPF换肤之四:界面设计和代码设计分离

    原文:WPF换肤之四:界面设计和代码设计分离 说起WPF来,除了总所周知的图形处理核心的变化外,和Winform比起来,还有一个巨大的变革,那就是真正意义上做到了界面设计和代码设计的分离.这样可以让美 ...

  4. pygame系列

    在接下来的blog中,会有一系列的文章来介绍关于pygame的内容,pygame系列偷自http://www.cnblogs.com/hongten/p/hongten_pygame_install. ...

  5. Eclipse关闭检查

    有没有发现每次操作Eclipse过后,都会有build Workspace的操作一直在后台执行,JS校验一直validate,非常卡非常受不了有木有? 有木有?以下是我个人成功的步骤,曾经试过非常多次 ...

  6. 期望dp专题

    一直不明白为什么概率是正推,期望是逆推. 现在题目做多了,慢慢好像有点明白了 poj2096 收集bug,  有n个种类的bug,和s个子系统.  每找到一个bug需要一天. 要我我们求找到n个种类的 ...

  7. KMP求字符串最小循环节

    证明1: 对于一个字符串S,长度为L,如果由长度为len的字符串s(字符串s的最小循环节是其本身)循环k次构成,那么字符串s就是字符串S的最小循环节 那么字符串有个很重要的性质和KMP挂钩,即  i ...

  8. Java的Log系统介绍和切换(转)

    Java的log系统比较繁杂.在这里梳理一下.本文只涉及log系统介绍和处理log系统之间的切换.不涉及如何配置和使用. 具体的log系统 Log4j:准确的说是log4j 1.x版.是之前使用最广泛 ...

  9. 【原创】leetCodeOj --- Intersection of Two Linked Lists 解题报告(经典的相交链表找交点)

    题目地址: https://oj.leetcode.com/problems/intersection-of-two-linked-lists/ 题目内容: Write a program to fi ...

  10. DOM操作应用

    创建元素 document.createElement("li"); 添加节点 oUl.appendChild(oLi); 在某个元素之前插入一个节点 oUl.insertBefo ...