C++ C++&;cocos2dx--无法通过编程方式添加节点

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()

我和一个朋友正在用cocos2dx为Iphone开发一款游戏。这很简单,典型的跑步者在一张无限地图上随机设置障碍物

当玩家的位置在chunck末尾时,添加下一个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);
}
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