2011-05-09 80 views
0

我在我创建了power2的box2D游戏中使用了tilemap。当玩家击中力量时,屏幕上会显示一个分数标签。除此之外,当玩家击中时,我想从瓦片地图中移除这个力量。我已经显示标签,但我无法删除权力。下面是一些代码:不起作用 - Box2D

在ContactListener我打电话从tilemap的移除功率的方法:

void ContactListener::BeginContact(b2Contact *contact) { 
else if(actorA.tag==obj.gamePower.tag)  //obj is a DataClass object. 
    { 
     [GameScene addPointLabel]; // For displaying score label 
     [GameScene removePower:actorA];  
    } 



+(void)removePower:(id)sender   
{ 
    GameScene *obj=[[GameScene alloc]init]; 
    CCSprite *sprite = (CCSprite *)sender; 
    [obj removePowerFromScene:sprite]; 
    [obj release];  
} 


-(void)removePowerFromScene:(id)sender  
{ 
    CCSprite *sprite = (CCSprite *)sender; 
    [self removeChild:sprite cleanup:YES];  
} 

我已经创建上tilemap的对象层以显示功率。但不知何故,我无法删除它。有人能帮我吗?

回答

1
  • 如果电源是CCNode,为什么不用[power removeFromParentAndCleanup:YES]将其删除?
  • (removePower :)并没有删除任何内容,因为它创建了一个新的场景,并从该场景中删除了该精灵不属于的场景。
  • 另一个通知,小心与接触监听。在BeginContact中删除o节点可能会导致崩溃。设想powerA与actor1和actor2联系的情况。第一次使用powerA和actor1调用BeginContact会删除powerA,因此随后调用BeginContact和powerA会崩溃!
+0

谢谢。使用[power removeFromParentAndCleanup:YES]删除了电源。我在ContactListener中使用了它。但是现在球员并没有前进。似乎电源已从场景中移除,但仍在瓷砖地图上。可能是什么原因? – Nitish 2011-05-09 09:15:11

+0

如果您建议我不要删除BeginContact中的节点,我应该在哪里删除它? – Nitish 2011-05-09 09:42:23