当他们到达某个点时,我怎么能摧毁精灵。我知道销毁精灵的代码,但不知道条件。我的精灵通过加速移动,我想在他们到达屏幕右下角时摧毁那个精灵......
请给我一个代码或提示该怎么做。请帮我
谢谢
当他们到达某个点时,我怎么能摧毁精灵。我知道销毁精灵的代码,但不知道条件。我的精灵通过加速移动,我想在他们到达屏幕右下角时摧毁那个精灵......
请给我一个代码或提示该怎么做。请帮我
谢谢
每当您获得精灵的位置时,请执行以下代码以删除 boxBody。它适用于带有 Box2D Physics 的 cocos2D。将 Sprite 添加到图层时使用标签,根据标签删除 Body。此代码不会删除精灵。
-(void) deleteBoxBody :(int) passTag
{
for (b2Body* b = _world->GetBodyList(); b; b = b->GetNext())
{
if (b->GetUserData() != NULL)
{
CCSprite *temp1 = (CCSprite*)b->GetUserData();
if(temp1.tag == passTag)
{
// NSLog(@"Destroying here");
_world->DestroyBody(b);
[self removeChild:temp1 cleanup:YES];
return;
}
}
}
}
使用此代码以避免崩溃。安全和定时销毁。
-(void) tick: (ccTime) dt
{
...
std::vector<b2Body *>toDestroy;
std::vector<b2Body *>::iterator pos;
for (b2Body* b = _world->GetBodyList(); b; b = b->GetNext())
{
if (b->GetUserData() != NULL)
{
CCSprite *temp1 = (CCSprite*)b->GetUserData();
if(temp1.tag == kTagSpriteOnWish)
{
temp1.tag = kTagExpiredSprite;
temp1.visible = false;
[self performSelector:@selector(removeSprite:) withObject: temp1 afterDelay:1.5];
toDestroy.push_back(b);
}
}
}
for (pos = toDestroy.begin(); pos!=toDestroy.end(); ++pos)
{
b2Body *body = *pos;
world->DestroyBody(body);
body= NULL;
}
}
-(void)removeSprite:(id)sender
{
CCSprite *spr = (CCSprite*)sender;
[spr removeAllChildrenWithCleanup:YES];
[spr removeFromParentAndCleanup:YES];
// printf("Removed ice block\n");
}
}
你需要做的就是精灵剔除。
您可以通过多种方式进行操作。在这里,您有几个简单的方法:
安排一个精灵剔除器来评估您可能想要杀死的所有精灵的位置,然后将它们从屏幕上移除。根据您需要达到的精度,根据需要调整计划时间。
使剔除器成为一个节点(或一系列节点)并将其放置在屏幕外。提供碰撞检测,以便您可以检测精灵何时到达剔除器。当精灵与剔除器碰撞时,它可以将它们从屏幕上移除。