我在看cocos2d-x的例子,在 TMXReadWriteTest 例子中,我把这个例子的三个schedule给注掉了,void TMXReadWriteTest::removeSprite(CCNode* sender)调用了四次,但只删掉一个精灵,不知什么原因,请教一下!
有高手帮解答一下吗?
代码如下:
TMXReadWriteTest::TMXReadWriteTest()
{
m_gid = 0;
CCTMXTiledMap* map = CCTMXTiledMap::tiledMapWithTMXFile("TileMaps/orthogonal-test2.tmx");
addChild(map, 0, kTagTileMap);
CCSize s = map->getContentSize();
////----UXLOG("ContentSize: %f, %f", s.width,s.height);
CCTMXLayer* layer = map->layerNamed("Layer 0");
layer->getTexture()->setAntiAliasTexParameters();
map->setScale( 1 );
CCSprite *tile0 = layer->tileAt(ccp(1,63));
CCSprite *tile1 = layer->tileAt(ccp(2,63));
CCSprite *tile2 = layer->tileAt(ccp(3,62));//ccp(1,62));
CCSprite *tile3 = layer->tileAt(ccp(2,62));
tile0->setAnchorPoint( ccp(0.5f, 0.5f) );
tile1->setAnchorPoint( ccp(0.5f, 0.5f) );
tile2->setAnchorPoint( ccp(0.5f, 0.5f) );
tile3->setAnchorPoint( ccp(0.5f, 0.5f) );
CCActionInterval* move = CCMoveBy::actionWithDuration(0.5f, ccp(0,160));
CCActionInterval* rotate = CCRotateBy::actionWithDuration(2, 360);
CCActionInterval* scale = CCScaleBy::actionWithDuration(2, 5);
CCActionInterval* opacity = CCFadeOut::actionWithDuration(2);
CCActionInterval* fadein = CCFadeIn::actionWithDuration(2);
CCActionInterval* scaleback = CCScaleTo::actionWithDuration(1, 1);
CCActionInstant* finish = CCCallFuncN::actionWithTarget(this, callfuncN_selector(TMXReadWriteTest::removeSprite));
CCFiniteTimeAction* seq0 = CCSequence::actions(move, rotate, scale, opacity, fadein, scaleback, finish, NULL);
CCActionInterval* seq1 = (CCActionInterval*)(seq0->copy()->autorelease());
CCActionInterval* seq2 = (CCActionInterval*)(seq0->copy()->autorelease());
CCActionInterval* seq3 = (CCActionInterval*)(seq0->copy()->autorelease());
tile0->runAction(seq0);
tile1->runAction(seq1);
tile2->runAction(seq2);
tile3->runAction(seq3);
m_gid = layer->tileGIDAt(ccp(0,63));
////----UXLOG("Tile GID at:(0,63) is: %d", m_gid);
//schedule(schedule_selector(TMXReadWriteTest::updateCol), 2.0f);
//schedule(schedule_selector(TMXReadWriteTest::repaintWithGID), 2.0f);
//schedule(schedule_selector(TMXReadWriteTest::removeTiles), 1.0f);
////----UXLOG("++++atlas quantity: %d", layer->textureAtlas()->getTotalQuads());
////----UXLOG("++++children: %d", layer->getChildren()->count() );
m_gid2 = 0;
}
void TMXReadWriteTest::removeSprite(CCNode* sender)
{
////----UXLOG(“removing tile: %x”, sender);
CCLog(“removing tile: %x”, sender);
CCNode* p = ((CCNode*)sender)->getParent();
if (p)
{
p->removeChild((CCNode*)sender, true);
}
//////----UXLOG("atlas quantity: %d", p->textureAtlas()->totalQuads());
}
测试了一下
tile0->runAction(seq0);
tile1->runAction(seq1);
tile2->runAction(seq2);
tile3->runAction(seq3);
这几句只留一行,其实都注释掉,感觉removeChild都是正常的,而留两句或两句以上,removeChild都感觉不正常呀,求教高人,这是什么原因啊?