我正在制作一款用户躲避障碍的无休止的游戏,而我正在努力制造障碍物。我产生这些障碍的计划如下:
obstacle->setPosition(CCPointMake(this->getContentSize().width, this->getContentSize().height*.75));
obstacle->setScale(.5);
this->addChild(obstacle);
_obstacles->addObject(obstacle);
obstacle->runAction(CCMoveBy::create(2.0, CCPointMake(-(this->getContentSize().width + obstacle->getContentSize().width/2), 0)));
obstacle->removeFromParent();
我设置位置,设置它的比例,将其添加到场景中,对其进行操作以使其从右向左移动到屏幕上,将其添加到名为_obstacles的阵列中以便在其他地方使用,然后我从场景中删除它以节省内存。然而,问题是,一旦我尝试实现这一点,障碍就不会显示出来,好像它无处可见。当我不打电话obstacle->removeFromParent()
时,它会显示并执行操作。我在这做错了什么?如果我不打电话给removeFromParent()
,我该怎么称呼?我的代码中是否存在与removeFromParent()
无关的问题?
答案 0 :(得分:1)
根本没有障碍的原因是它在开始移动时被移除。您只需创建一系列以障碍物作为参数的移动动作和函数调用,然后在该功能中移除此障碍物,以便在移出屏幕后移除障碍物。
CCCallFuncN *myCallFunc = CCCallFuncN::create(this, callfuncN_selector(CLASS_NAME::removeObstacles));
obstacle->runAction(CCSequence::create(CCMoveBy::create(2.0, CCPointMake(-(this->getContentSize().width + obstacle->getContentSize().width/2), 0)),myCallFunc,NULL));
从阵列和父视图中删除障碍物的方法
void CLASS_NAME::removeObstacles(CCObject* pSender){
// Type cast pSender to obstacle type e.g if obstacle is of CCSprite type.
CCSprite *tempObstacle = (CCSprite *)pSender;
_obstacle.pop_back(tempObstacle);
tempObstacle->removeFromParent();
}
不要忘记用您的班级名称替换CLASS_NAME
答案 1 :(得分:-2)
我需要有关removeFromParent正在做什么以及如何使用_obstacles
的更多信息我猜测父母的结构如何。我猜它有一个子列表,当父级更新/渲染时,它会为子级调用这些函数。如果removeFromParent从其父列表中删除对象,那么这将解释为什么它不在场景中渲染或使用。如果你有这样的设置,那么你应该只在销毁父对象之前调用removeFromParent