cocos2dx --- Widget 加载 CCNode

如题。

Widget addChild()   与 addNode()  两个方法。

现在我要加载一个粒子特效进去,下图:

Widget* layout =  dynamic_cast<Widget*>(pRoomWidget[roomId]->getChildByTag(10));

CCParticleSystemQuad* particle = CCParticleSystemQuad::create("particleTexture.plist");
particle->setPosition(CCPointZero);
layout->addChild(particle);

最初,我是直接 使用 layout->addChild(particle); 没有问题可以运行,但Log中有一个断言失败的错误:下图是错误位置

void Widget::addChild(CCNode* child, int zOrder, int tag)
{
    CCAssert(dynamic_cast<Widget*>(child) != NULL, "Widget only supports Widgets as children");
    CCNode::addChild(child, zOrder, tag);
    _widgetChildren->addObject(child);
}

后来换成 layout->addNode(particle);

加载成功,没有断言失败。但在删除掉的时候出错。。。

解决方法有两种:

1、使用addChild()加载,但中间需要间隔一层Widget,如图:

<span style="white-space:pre">	</span>CCParticleSystemQuad* particle = CCParticleSystemQuad::create("particleTexture.plist");
	particle->setPosition(CCPointZero);
	Widget* pNode = Widget::create();
	pNode->setPosition(CCPointZero);
	pNode->addNode(particle);
	layout->addChild(pNode);

删除时使用 

<span style="white-space:pre">	</span>layout->removeAllChildren();

2、使用addNode()加载

<span style="white-space:pre">	</span>CCParticleSystemQuad* particle = CCParticleSystemQuad::create("particleTexture.plist");
	particle->setPosition(CCPointZero);
	layout->addNode(particle);

同样,删除时需注意改为

<span style="white-space:pre">	</span> layout->removeAllNodes();

cocos2dx --- Widget 加载 CCNode

时间: 2024-10-04 23:21:01

cocos2dx --- Widget 加载 CCNode的相关文章

Launcher3学习记录-Launcher第一次启动时的快捷方式、Widget加载流程

Launcher3的主Activity是Launcher.java,在onCreate()方法中可以找到数据下载的入口.mModel 是类LauncherModel的引用. 1 if (!mModel.startLoader(mWorkspace.getRestorePage())) { 2 // If we are not binding synchronously, show a fade in animation when 3 // the first page bind complete

cocos2d-x模型加载的重构,我眼中的面向对象

这两天在写cocos2d-x加载ogre的mesh模型的东西,完成了一半了,还差动画文件没接进来.这篇文章并不是教如何加载模型文件的,因为那种东西没什么可教的,无非就是加载文件,然后解析出自己想要的顶点.关键帧等数据,最后给coco2d-x中的MeshData赋好值.这里我想表达一些我有关代码格式.代码设计.代码重构的想法,我会分一些有关或者无关的问题,来逐一分析. 一.为什么要支持多种模型格式?cocos2d-x自己定义一种新的格式c3d.c3t这样好不好? 首先,我认为,一个成熟的游戏引擎不

cocos2dx资源加载机制(同步/异步)

首先cocos2dx里的资源,有png,plist(pvr),exportjson(json)大致这三类,我们也从这3类去研究相应的加载代码. 本次代码分析基于: cocos2dx3.2 1.png png格式的资源,从sprite作为一个切入口来分析,一般Sprite的创建如下 Sprite* Sprite::create(const std::string& filename) 参数filename,是图片资源的路径. 内部调用的initWithFile Sprite *sprite = n

cocos2dx中加载图片资源的方法,和从内存中获取已经加载的图片资源的方法

游戏中通常需要将常用的资源如:声音,图片,plist文件,提前加载进内存,以加快游戏的流畅度 1.预加载声音: SimpleAudioEngine::getInstance()->preloadBackgroundMusic("boom.mp3"); 加载之后就可以直接播放:SimpleAudioEngine::getInstance()->playBackgroundMusic("boom.mp3"); 2.预加载图片资源: 图片资源的加载分为同步加载

cocos2d-x 异步加载plist,png等文件

1.png的异步加载 ? 1 2 Director::getInstance()->getTextureCache()->addImageAsync(reloadImages[curReloadImgNum],                  CC_CALLBACK_1(LoadingScene::imageAsyncCallback, this )); 2.plist和png一起的打包资源 废话不多,直接上方法,没有加载plist的api,我们使用如1的方法加载png,然后在回调函数中加载

cocos2d-x spine 加载粒子特效

spine骨骼加载粒子效果 将粒子效果加到骨骼上,update位置和角度.h#ifndef __HOMESCENE_H__#define __HOMESCENE_H__#include "cocos2d.h"#include "cocostudio/CocoStudio.h"#include "ui/CocosGUI.h"#include <spine/spine-cocos2dx.h>#include "spine/spi

【独立开发者er Cocos2d-x实战 008】BMFont生成位图字体工具和Cocos2dx使用加载fnt文件

1.首先我们需要下载并且安装BMFont工具,下载地址如下:http://download.csdn.net/detail/chenqiai0/8899353(里面还有详细的使用文档,如果使用中有什么不明白请留言). 2.安装后,打开BMFont,界面如下,右边的列表是字体库 3.创建一个txt文件,然后输入你用到的文字(注意:保存的时候要用utf-8,否则软件无法识别) 4.接下来的操作请大家下载上述资源,然后按照pdf中讲解的步骤操作,肯定可以实现fnt文件的导出. 注意:需要我们注意的是在

CocoStudio使用笔记1:cocos2dx3.4加载CocoStudio导出的csb文件

一直以来都是用手写代码来做cocos2dx的游戏界面.看朋友一个星期一个游戏的速度,很让我眼红.他们公司使用的是CocosBuilder做界面.对于CocosBuilder 在他的推荐下我也研究了一个星期,网上的教程太乱,而且坑太多,每个教程的操作还不一样,按照教程来还是搞不定,对此我决定要一点点的来填坑.而本篇笔记是记录下cocostudioV2.3.2版本生成的csb文件在cocos2dx3.4中的运用.对于cocosbuilder的笔记过几天在整理,爬坑爬的心累. Cocostudio已经

quick-cocos2d-x 加载进度条的学习

先上quick代码: 1 --[[创建扇形的进度加载条]] 2 3 --创建进度动作的Action(进度时间,最终比例) 4 local to1 = CCProgressTo:create(1, 100) 5 6 --传入作为进度条用的精灵,创建ProgressTimer 7 local pTimer = CCProgressTimer:create(CCSprite:create(s_pPathSister1)) 8 pTimer:setType(kCCProgressTimerTypeRad