对于cocos2d-x学习笔记:SpriteBatchNode感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解cocos2d-x教程,并且为您提供关于14.2Cocos2d-x中的粒子系统(
对于cocos2d-x学习笔记:SpriteBatchNode感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解cocos2d-x教程,并且为您提供关于14.2Cocos2d-x 中的粒子系统(笔记);14.2.1 ParticleBatchNode;、cocos2d-iphone – Cocos2d的CCSpriteBatchNode抱怨不同的纹理ID、Cocos2d-js_____Sprite 和 SpriteBatchNode、Cocos2d-x 3.x学习笔记:猩先生带你打飞机(一)环境与创建项目的宝贵知识。
本文目录一览:- cocos2d-x学习笔记:SpriteBatchNode(cocos2d-x教程)
- 14.2Cocos2d-x 中的粒子系统(笔记);14.2.1 ParticleBatchNode;
- cocos2d-iphone – Cocos2d的CCSpriteBatchNode抱怨不同的纹理ID
- Cocos2d-js_____Sprite 和 SpriteBatchNode
- Cocos2d-x 3.x学习笔记:猩先生带你打飞机(一)环境与创建项目
cocos2d-x学习笔记:SpriteBatchNode(cocos2d-x教程)
SpriteBatchNode的作用大致可理解为:
在开发游戏时,当一个层中需要使用多个相同的图片进行渲染某个sprite时,为了避免同样的图片重复渲染,所以使用该类来创建精灵。代码大致如下:
SpriteBatchNode* node = SpriteBatchNode::create("test.png"); if( !node ) return false; this->addChild(node);
auto sprite1 = Sprite::create("test.png"); sprite2->setPosition(200,300); node->addChild(sprite1);
<pre name="code">auto sprite2 = Sprite::create("test.png"); sprite2->setPosition(300,300); node->addChild(sprite2);上述代码中,两个精灵使用的是同一个图片,所以,在cocos2d-x2.2版本中,上面的代码会避免重复渲染同样的图片导致帧率下降。
但是在3.0的版本中,已经不推荐这么做了,以下引用来自
https://github.com/fusijie/Cocos2dx-Release-Note/blob/master/cocos2d-x_v3.0_release_notes.md#sprite-%E5%92%8C-spritebatchnode
Sprite 和 SpriteBatchNode
v2.2 2.2版本中推荐的优化游戏方式是将SpriteBatchNode
对象设置为Sprite
对象的父节点。 虽然使用SpriteBatchNode
对象仍然是一个非常好的优化游戏的方式,但是它仍然有一定的限制:
Sprite
对象的孩子只能是Sprite
(否则,Cocos2d-x 会触发断言)- 当
Sprite
的父节点是SpriteBactchNode
时,不能添加ParticleSystem
作为Sprite
的子节点。 - 这将导致当
SpriteBatchNode
时,不能使用ParallaxNode
- 当
- 所有的
Sprite
对象必须共享相同的纹理ID (否则,Cocos2d-x 会触发断言) Sprite
对象使用SpriteBatchNode
的混合函数和着色器。
虽然 v3.0 仍然支持SpriteBatchNode
(与之前的版本拥有相同的特效和限制),但是我们不鼓励使用它。相反,我们推荐直接使用Sprite
,不需要再它作为子节点添加到SpriteBatchNode
中。
但是,为了能让 v3.0 有更好的表现,你必须要确保你的Sprite
对象满足以下条件:
- 贡献相同的纹理ID(把它们放在一个spritesheet中,就像使用
SpriteBatchNode
一样) - 确保它们使用相同的着色器和混合函数(就像使用
SpriteBatchNode
一样)
如果这么做,Sprites
将会像使用SpriteBatchNode
一样的快...(在旧设备上大概慢了10%,在新设备上基本上察觉不出)
v2.2 和 v3.0 最大的区别在于:
- Sprite对象可以有不同的纹理ID。
Sprite
对象可以有不同种类的Node
作为子节点,包括ParticleSystem
。Sprite
对象可以有不同的混合函数和不同的着色器。
但是如果你这么做,渲染器
可能无法对它所有的子节点进行批处理(性能较低)。但是游戏仍然可以正常运行,不会触发任何断言。
总结:
- 保持将所有的精灵放在一张大的 spritesheet 中。
- 使用相同的混合函数(使用默认)
- 使用相同的着色器(使用默认)
- 不要将精灵添加到
SpriteBatchNode
只有当你需要一些额外的性能上提升(虽然很小),SpriteBatchNode
才会是你最后的选择(你需要对它的限制条件很熟悉)。
14.2Cocos2d-x 中的粒子系统(笔记);14.2.1 ParticleBatchNode;
1,批处理类ParticleBatchNode
2,粒子系统类ParticleSystem
3,粒子系统子类 ParticleSystemQuad
爆炸效果:ParticleExplosion;
火球效果: ParticleFire
14.2.1 粒子批处理类ParticleBatchNode
initWithFile
initWithTexture
disableParticle;
setBlendFunc/getBlendFunc;
updateallAtlasIndexes;
increaseAtlasCapacityTo;
getCurrentIndex;
searchNewPositionInChildernForZ;
代码实例:
bool HelloWorld::init() { ////////////////////////////// // 1. super init first if ( !Layer::init() ) { return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); // 创建精灵类 auto sprite = Sprite::create("taotaoahui.jpg"); //sprite->setPosition(ccp(visibleSize.width / 2,visibleSize.height / 2)); sprite->setAnchorPoint(ccp(0,0)); addChild(sprite,1); // ParticleBatchNode 使用方法, auto _emitter = ParticleSystemQuad::create("Particles/taotao.xml.particle.plist");// 首先创建ParticleSystemQuad或者ParticleSystem _emitter->retain(); auto batch = ParticleBatchNode::createWithTexture(_emitter->getTexture()); batch->addChild(_emitter); batch->setPosition(ccp(visibleSize.width /2,visibleSize.height /2 )); // sjt this->addChild(batch,10); return true; }
cocos2d-iphone – Cocos2d的CCSpriteBatchNode抱怨不同的纹理ID
"CCSprite is not using the same texture id"
我很困惑,因为我有一个1024×1024纹理图集和我的所有图形.它是使用TexturePacker创建的,没有批处理节点,一切正常.我一直在加载它:
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"atlas1.plist"];
现在我正在尝试使用CCSpriteBatchNode:
CCSprite* sprite = [CCSprite spriteWithSpriteFrameName:@"something.png"]; CCSpriteBatchNode* bar = [CCSpriteBatchNode batchNodeWithFile:@"atlas1.png"]; [bar addChild: sprite]; // assert error here
我尝试将一些NSLog调试输出添加到cocos2d纹理初始化/查找代码中,并且令人惊讶的是,有一些纹理被创建为具有不同的尺寸(例如256×256甚至更小).我不明白当我只有一个1024×1024 png作为输入时会发生什么.
发生了什么?我该怎么调试呢?
更新:
Bongeh的回答帮助我解决了这个问题 – 让我看了两遍.我的iOS模拟器中有一些旧版本的PNG文件被加载,即使它们不在Xcode项目中也是如此.从Xcode执行“清理”甚至“清理构建文件夹”不起作用,但使用iOS模拟器中的“重置内容和设置”命令就可以了.万岁!
解决方法
将以上代码替换为:
CCSprite* sprite = [CCSprite spriteWithSpriteFrameName:@"something.png"]; CCSpriteBatchNode* bar = [CCSpriteBatchNode batchNodeWithFile:@"atlas1.png"]; [sprite setTexture:[bar texture]]; [bar addChild: sprite]; // assert error here
我发现的唯一另一件事是,如果你的游戏在应用程序委托中收到内存警告,纹理缓存会被清除,你可以将其注释掉,但只要注意清除缓存即可.
Cocos2d-js_____Sprite 和 SpriteBatchNode
Sprite 和 SpriteBatchNode点击打开链接
v2.2 2.2版本中推荐的优化游戏方式是将SpriteBatchNode
对象设置为Sprite
对象的父节点。 虽然使用SpriteBatchNode
对象仍然是一个非常好的优化游戏的方式,但是它仍然有一定的限制:
Sprite
对象的孩子只能是Sprite
(否则,Cocos2d-x 会触发断言)- 当
Sprite
的父节点是SpriteBactchNode
时,不能添加ParticleSystem
作为Sprite
的子节点。 - 这将导致当
SpriteBatchNode
时,不能使用ParallaxNode
- 当
- 所有的
Sprite
对象必须共享相同的纹理ID (否则,Cocos2d-x 会触发断言) Sprite
对象使用SpriteBatchNode
的混合函数和着色器。
虽然 v3.0 仍然支持SpriteBatchNode
(与之前的版本拥有相同的特效和限制),但是我们不鼓励使用它。相反,我们推荐直接使用Sprite
,不需要再它作为子节点添加到SpriteBatchNode
中。
但是,为了能让 v3.0 有更好的表现,你必须要确保你的Sprite
对象满足以下条件:
- 贡献相同的纹理ID(把它们放在一个spritesheet中,就像使用
SpriteBatchNode
一样) - 确保它们使用相同的着色器和混合函数(就像使用
SpriteBatchNode
一样)
如果这么做,Sprites
将会像使用SpriteBatchNode
一样的快...(在旧设备上大概慢了10%,在新设备上基本上察觉不出)
v2.2 和 v3.0 最大的区别在于:
- Sprite对象可以有不同的纹理ID。
Sprite
对象可以有不同种类的Node
作为子节点,包括ParticleSystem
。Sprite
对象可以有不同的混合函数和不同的着色器。
但是如果你这么做,渲染器
可能无法对它所有的子节点进行批处理(性能较低)。但是游戏仍然可以正常运行,不会触发任何断言。
总结:
- 保持将所有的精灵放在一张大的 spritesheet 中。
- 使用相同的混合函数(使用默认)
- 使用相同的着色器(使用默认)
- 不要将精灵添加到
SpriteBatchNode
只有当你需要一些额外的性能上提升(虽然很小),SpriteBatchNode
才会是你最后的选择(你需要对它的限制条件很熟悉)。
Cocos2d-x 3.x学习笔记:猩先生带你打飞机(一)环境与创建项目
目录
1、环境与创建项目
2、素材准备与菜单场景
3、物理引擎的使用
4、游戏场景:背景与我机的创建、敌机的创建
5、敌我碰撞检测、分数计算、音乐播放
6、游戏结束场景
前言:
近几个月在一个网站开发公司搬砖,然后这砖搬着搬着,就累觉不爱。心好累,心好累。好吧,网站开发实在不适合我。所以,我决定走回那一条不归路,游戏开发。为什么是说走回呢?自己参悟去。
现在还是以学习cocos2d-x为主,将来的目标是Unity 3D。作为一个coco2d-x的新手,看了两本书几套视频,然后就觉悟了。新手进化~~啦啦啦~菜鸟!!!。下面分享是利用cocos2d-x引擎写的飞机大战过程,纯属一个菜鸟的自导自演,如有雷同,请勿冲动。不足之处,也请各位大神指正。还有非常欢迎广大朋友一起来讨论学习。
好,下面就由我来手把手带大家打飞机~~~((⊙o⊙))
环境准备:
什么?你还没搭环境??好吧,百度去。这个也不是什么难事。工欲善其事必先利其器,一定要确保环境搭好!!!。
我当前的环境是:
win7、cocos2d-x 3.3、vs 2012、Python 2.7、java 8、ant 1.9.4、ndk r9d、还有sdk起码10以上吧。
好,环境准备好,开始创建游戏。这也是验证我们环境是否搭好的第一阶段。
打开命令行cmd 敲入cocos new planegame -p com.xin.game -l cpp -d f:/cocos
这是新建项目的命令,planegame 是项目名,-p com.xin.game 是指java开发相关的包,-l cpp 指开发的语言是c++,-d f:/cocos 是指项目创建到那个目录下
注:在敲这些命令行之前必须确保环境变量已经配好(切,这不是谁都知道的么,(⊙o⊙)好吧)
创建成功,如下图:
然后再编译,现在是在win7平台开发和测试,所以选择编译win32,在命令行敲入cocos run -p win32 -s f:/cocos/planegame
当然也可以在vs导入项目后编译,不过我发现那个编译是非常慢,而且非常卡,机子渣渣的我只能选择使用命令行去编译。编译过程都是一个非常庞大的工程,不信你去看看我们的项目现在的大小。3G!!!未编译之前是200兆吧。
如编译好了,就会出现如下图所示
好了,现在已经编译好(这是个艰难的过程,擦汗~~),编译好后我们可以看到已经启动了我们的hello world,如下图
看到这里,我们已经成功创建了我们的第一个项目。这也说明了我们的环境配置有一半已经确保无误了。 下一节将开始我们的代码之旅,敬请期待。
今天关于cocos2d-x学习笔记:SpriteBatchNode和cocos2d-x教程的介绍到此结束,谢谢您的阅读,有关14.2Cocos2d-x 中的粒子系统(笔记);14.2.1 ParticleBatchNode;、cocos2d-iphone – Cocos2d的CCSpriteBatchNode抱怨不同的纹理ID、Cocos2d-js_____Sprite 和 SpriteBatchNode、Cocos2d-x 3.x学习笔记:猩先生带你打飞机(一)环境与创建项目等更多相关知识的信息可以在本站进行查询。
本文标签: