C++ C++&;cocos2dx--无法通过编程方式添加节点
我和一个朋友正在用cocos2dx为Iphone开发一款游戏。这很简单,典型的跑步者在一张无限地图上随机设置障碍物 当玩家的位置在chunck末尾时,添加下一个chunck,如果玩家在chunck的开头,则移除通过的chunck,地图以chunck为单位充电,所有这些都用随机结构初始化 在场景中,我有一个侦听器,通过以下方式调用:C++ C++&;cocos2dx--无法通过编程方式添加节点,c++,memory,graphics,cocos2d-iphone,cocos2d-x,C++,Memory,Graphics,Cocos2d Iphone,Cocos2d X,我和一个朋友正在用cocos2dx为Iphone开发一款游戏。这很简单,典型的跑步者在一张无限地图上随机设置障碍物 当玩家的位置在chunck末尾时,添加下一个chunck,如果玩家在chunck的开头,则移除通过的chunck,地图以chunck为单位充电,所有这些都用随机结构初始化 在场景中,我有一个侦听器,通过以下方式调用: //For remove a chunck from the view unsigned int id = this->getChunckForRemove()
//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);
}
class Chunck {
Node* _node;
std::vector<BlockCollisionable> _collisionables;
....
Chunck() {
_node = Node::create();
_node->retain();
}
~Chunck() {
_node->autorelease();
}
}
结构Chunck是下一个:
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);
}
class Chunck {
Node* _node;
std::vector<BlockCollisionable> _collisionables;
....
Chunck() {
_node = Node::create();
_node->retain();
}
~Chunck() {
_node->autorelease();
}
}
class-Chunck{
节点*\u节点;
std::vector_可碰撞;
....
春克(){
_node=node::create();
_节点->保留();
}
~Chunck(){
_节点->自动释放();
}
}
问题是当我添加chunck时,我在日志中没有问题,但它没有被绘制。这些位置的屏幕是黑色的,我不明白它是什么样子的
此外,当我删除最后一个chunck时,会出现以下错误:
断言失败:引用计数应大于0断言
失败:(\u referenceCount>0),函数发布,文件
/…/cocos2d/cocos/base/CCRef.cpp,第98行
谢谢:D你看不到
节点,因为你只创建了逻辑节点,没有什么可画的。它不是精灵
或图层颜色
或文本字段
下一件事-当您调用时:为cocos类创建,它会自动调用自动释放
,并在无人持有且引用计数器为零时自动删除节点。如果手动调用retain
将引用计数增加1,然后应手动调用release
(而不是autorelease
)将其减少并允许删除
当您通过addChild
将节点添加到场景/层/节点时,它还将调用retain
,当您通过removeFromParent
将其从场景/层/节点中移除时,它将调用release