C++ & cocos2dx -- 无法以编程方式添加节点

C++ & cocos2dx -- Cannot add nodes programactly

本文关键字:编程 方式 添加 节点 cocos2dx C++      更新时间:2023-10-16

我和一位朋友正在用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,因为你只创建了逻辑节点,没有什么可画的。它不是SpriteLayerColorTextField.

接下来的事情 - 当你为 cocos 类调用::create时,它会自动调用autorelease并在没有人持有它并且引用计数器为零时自动删除节点。如果手动调用retain则会将引用计数增加 1,然后应手动调用release(而不是autorelease)以减少它并允许删除。

当您通过addChild将节点添加到场景/图层/节点时,它也会调用retain,当您通过removeFromParent将其从场景/图层/节点中删除时,它将调用release