批处理精灵节点

body
{
font-family: 微软雅黑,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif;
font-size: 10.5pt;
line-height: 1.5;
}
html, body
{

}
h1 {
font-size:1.5em;
font-weight:bold;
}
h2 {
font-size:1.4em;
font-weight:bold;
}
h3 {
font-size:1.3em;
font-weight:bold;
}
h4 {
font-size:1.2em;
font-weight:bold;
}
h5 {
font-size:1.1em;
font-weight:bold;
}
h6 {
font-size:1.0em;
font-weight:bold;
}
img {
border:0;
max-width: 100%;
height: auto !important;
}
blockquote {
margin-top:0px;
margin-bottom:0px;
}
table {
border-collapse:collapse;
border:1px solid #bbbbbb;
}
td {
border-collapse:collapse;
border:1px solid #bbbbbb;
}

批处理精灵节点用于精灵数目很多的时候,使用批处理的方式可以降低渲染次数,提高效率,当然,当精灵数目较小的时候是没有必要使用批处理的

bool T02Layers ::init()

{

if (! CCLayer::init())

{

return false;

}

CCSize winSize = CCDirector::sharedDirector()->getWinSize();

CCPoint ptCenter = ccp(winSize.width / 2, winSize.height / 2);

/*

CCSpriteBatchNode也是一个容器,但是它只能包容CCSprite对象,而且要求这些精灵来自同一个纹理

*/

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 T02Layers ::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);

//CCRANDOM_0_1 () 用于产生0到1之间的随机数字,是定义的宏

sprite->setPosition( ccp( CCRANDOM_0_1()*winSize.width, CCRANDOM_0_1()* winSize.height));

}

return true;

}

结果:

如果不使用批处理:

三行数字,第一行表示精灵的渲染次数 第三行表示1s中帧循环次数也就是刷新次数。

来自为知笔记(Wiz)

时间: 2024-11-13 21:39:30

批处理精灵节点的相关文章

【cocos2d-x学习笔记】三种文字类、批处理精灵、C++的四种cast

三种显示文字的类 CCLabelTTF, CCLabelAtlas, CCLabelBMFont CCLabelTTF:使用系统字体每个字符串会生成一个纹理,显示效率比较低下.适合无变化的文字 CCLabelAtlas: 使用NodeAtlas优化渲染,适合经常变化的数字,比如分数,金钱. CCLabelBMFont: 使用CCSpriteBatchNode,很灵活,每个字符都是一个精灵,可以对每一个字符进行操作. CCLabelAtlas *lable = CClabelAtlas::crea

Cocos2d-X中实现批处理精灵

使用普通方法实现批处理精灵 在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(

关于Cocos2d-x中精灵节点的透明度的设置

1.当我们需要某个精灵作为一个大一点的容器来存放其他的小精灵的时候,我们先设置这个精灵的大小 setTextureRect(Rect(0, 0, babySize.width, babySize.height)); 但是这个会自动用白色来填充这个精灵的颜色 2.这时候就需要用这个方法,当为数值为0的时候是完全透明,为255则是完全不透明 setOpacity(0); 3.之后可以再设置它的锚点 setAnchorPoint(Vec2(0,0));

Cocos2D-X2.2.3学习笔记8(处理精灵单击、双击和三连击事件)

我们依据上一次介绍的触屏事件和事件队列等知识来实现触屏的单击,双击,三连击事件. 下图为我们实现的效果图: 单击精灵跳跃一个高度, 双击精灵跳跃的高度比单击的高 三连击精灵跳跃的跟高 好了.開始动手吧. 新建项目.删除多余的代码 接着在Classes文件夹下建立两个文件,这里我就命名为Human了 (在Classes上右键加入新建项,选择头文件,名称Human.h,位置浏览到Classes文件夹下) 由于要实现精灵能接受触屏事件,所以我们不能用CCSprite ,须要自己写个类继承CCSprit

cocos3.0使用cocostudio动画帧结合地图对象键值创建精灵动画

内容如下: #include "cocos2d.h" #include "cocostudio/CocoStudio.h" //精灵猫和其他精灵的tag typedef enum{ catTag =1, }; //cocostudio 动画帧tag typedef enum{ catWalkTag = 1001, }; class Base :public cocos2d::Layer { public: Base(); ~Base(); //在地图中创建一个活多个

Cocos2dx对精灵的优化

cocos2dx针对游戏设计的不同方面会有不同的优化方案,可以对声音,对内存,对图片格式,对色彩等等进行优化.有关这些方面的方法请大家查找其他的文章.我今天要说的是如何对精灵进行优化,程序中我们用到的最多的就是精灵,大到背景.UI,小到 NPC.道具,只要是用图片展示的,都是精灵或它的子类.精灵是什么,在我看来精灵就是一张纹理图片,是按某种方式显示出来的图片.精灵如此的重要,我们当然要好好的优化优化了.我们可以减小精灵图片的大小,使用缓存Cache的方法将精灵提前加载到内存中,当有很多精灵的时候

学习视差节点的心得

之前想要实现关于视差的效果,一直都是想自己写代码,今天偶然看见了关于视差节点的文章,觉得很有用必须学习一下! 首先视差节点的类型名称是ParallaxNode,创建方法很简单: this->pn = ParallaxNode::create(); 创建完成之后,需要往里面添加精灵节点,我再这里创建两个精灵节点 auto background = Sprite::create("HelloWorld.png"); background->setAnchorPoint(Vec2

精灵的优化

cocos2dx针对游戏设计的不同方面会有不同的优化方案,可以对声音,对内存,对图片格式,对色彩等等进行优化.有关这些方面的方法请大家查找其他的文章.我今天要说的是如何对精灵进行优化,程序中我们用到的最多的就是精灵,大到背景.UI,小到 NPC.道具,只要是用图片展示的,都是精灵或它的子类.精灵是什么,在我看来精灵就是一张纹理图片,是按某种方式显示出来的图片.精灵如此的重要,我们当然要好好的优化优化了.我们可以减小精灵图片的大小,使用缓存Cache的方法将精灵提前加载到内存中,当有很多精灵的时候

SpriteKit在复制节点时留了一个巨坑给开发者,需要开发者手动把复制节点的isPaused设置为false

根据When an overlay node with actions is copied there is currently a SpriteKit bug where the node’s isPaused property might be set to true提示,SpriteKit有一个Bug需要开发者自己来填. SpriteNode节点在被copy()复制后,会自动被设置为暂停,也就是节点的所有Action全部不可用,如果需要使用node.run(SKAction.run{//c