朋友和我正在用cocos2dx为Iphone开发游戏。它很简单,是一个带有随机障碍的无限地图中的典型跑步者。
地图在chuncks中充电,所有这些都是随机结构初始化的,当玩家的位置在chunck的末尾添加下一个chunck时,如果玩家在chunck的开头,则移除chunck过去了。
在场景中,我有一个通过这种方式调用的听众:
//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);
}
结构Chunck是下一个:
class Chunck {
Node* _node;
std::vector<BlockCollisionable> _collisionables;
....
Chunck() {
_node = Node::create();
_node->retain();
}
~Chunck() {
_node->autorelease();
}
}
问题是当我添加chunck时,我在日志中没有问题但是没有绘制。这些位置的屏幕是黑色的,我不承担它正在做什么。
此外,当我删除最后一个chunck失败时出现此错误:
断言失败:引用计数应大于0断言 失败:(_ referenceCount&gt; 0),函数发布,文件 /.../cocos2d/cocos/base/CCRef.cpp,第98行。
谢谢:D
答案 0 :(得分:1)
您无法看到Node
,因为您只创建了逻辑节点并且没有任何内容可供绘制。它不是Sprite
或LayerColor
或TextField
。
接下来的事情 - 当您为cocos类调用::create
时,它会自动调用autorelease
并在没有人持有它时自动删除节点,并且引用计数器为零。如果您手动拨打retain
,则会将引用次数增加1,然后您应手动拨打release
(而不是autorelease
)以减少它并允许删除。
当您通过addChild
将节点添加到场景/图层/节点时,它也会调用retain
,当您通过removeFromParent
将其从场景/图层/节点中删除时,它会立即显示致电release