C++ & cocos2dx -- 无法以编程方式添加节点
C++ & cocos2dx -- Cannot add nodes programactly
我和一位朋友正在用cocos2dx为Iphone开发一款游戏。这很简单,是无限地图中的标志性跑步者,带有随机障碍物。
地图以 chucks 为单位充电,所有这些都用随机结构初始化,当玩家的位置在 chck 的末尾时,添加下一个 chuck,如果玩家在 chck 的开始,则删除 chuck 通过。
在场景中,我有一个听众是这样称呼的:
//For remove a chunck from the view
unsigned int id = this->getChunckForRemove();
this->_listener->removeChunckFromScene(id);
....
//For add a chunck to the view
TiledMap::Chunck* chunck = new TiledMap::Chunck(this.globalPosition);
this->globalPosition += SIZE_OF_CHUNCK; //Ex.: SIZE_OF_CHUNCK = 5194
this->_listener->addChunckToScene(chunck, 1);
实现是场景,接下来是:
void
Scenes::
PlayerTestScene::removeChunckFromScene(const int id)
{
log("Remove chunck from scene :%d", id);
this->_nodeScroll->removeChildByTag(id);
}
...
void
Scenes::
PlayerTestScene::addChunckToScene(const int id, TiledMap::Chunck* chunck)
{
log("Add chunck to scene :%d", id);
this->_nodeScroll->addChild(chunck->_node, 1, id);
this->player->setFloorCollision(chunck->_collisionables);
}
结构 Chuck 是下一个:
class Chunck {
Node* _node;
std::vector<BlockCollisionable> _collisionables;
....
Chunck() {
_node = Node::create();
_node->retain();
}
~Chunck() {
_node->autorelease();
}
}
问题是当我添加 chuck 时,我在日志中没有问题,但它没有绘制。这些位置的屏幕是黑色的,我不明白发生了什么。
此外,当我删除最后一个 chck 失败并出现此错误时:
断言失败:引用计数应大于 0 断言 失败:(_referenceCount> 0),函数发布,文件/.../cocos2d/cocos/base/CCRef.cpp,第 98 行。
谢谢:D
你看不到Node
,因为你只创建了逻辑节点,没有什么可画的。它不是Sprite
或LayerColor
或TextField
.
接下来的事情 - 当你为 cocos 类调用::create
时,它会自动调用autorelease
并在没有人持有它并且引用计数器为零时自动删除节点。如果手动调用retain
则会将引用计数增加 1,然后应手动调用release
(而不是autorelease
)以减少它并允许删除。
当您通过addChild
将节点添加到场景/图层/节点时,它也会调用retain
,当您通过removeFromParent
将其从场景/图层/节点中删除时,它将调用release
相关文章:
- 使用 Gtkmm 以编程方式选择 Gtk::TextView 中的文本
- 在没有管理员权限的情况下,在 c++ 中以编程方式将程序添加到启动
- 如何以编程方式将音频从任何录制设备路由到任何播放设备
- 我是否可以使用 win32 句柄以编程方式记录发送到/接收到 USB/COM 的内容
- 如何以编程方式使窗口全屏显示?
- 终端如何在 shell 提示符下以编程方式阻止退格,以便您无法在其上退格,例如 $ 表示 bash 或 C:\blah\>
- 如何使用打印到 PDF 打印机在 MFC 和 CView 中以编程方式打印而不提示输入文件名?
- 如何以编程方式显示功能区按钮的下拉菜单?
- 是否可以以编程方式构造 std::initializer_list?
- 在 Visual C++ 中以编程方式更改按钮的背景图像
- 附加调试器并以编程方式获取变量地址 Visual Studio
- 以编程方式重新连接断开的 VHD 链
- 如何以编程方式获取任务管理器进程CPU使用率(不是PerfMon API)
- 以编程方式在任何按钮上突出显示 Qt 鼠标悬停按钮
- 以编程方式防止重命名或删除文件,但仍使其可写
- 以编程方式连接子图
- 如何以编程方式区分在内存的堆和堆栈部分创建的对象
- 如何以编程方式从PKCS7中提取CA、多个CA和公共证书/密钥
- 如何以编程方式将路由添加到网络接口
- 以编程方式在 C++ 中创建函数