當他們到達某處時,我該如何摧毀精靈。 我知道銷燬精靈的代碼,但不知道病情。 我的精靈通過加速移動,並且我想在他們到達屏幕右上角時摧毀那個精靈...當他們到達某處時摧毀精靈身體
請給我一個代碼或暗示該怎麼做。請幫我
感謝
當他們到達某處時,我該如何摧毀精靈。 我知道銷燬精靈的代碼,但不知道病情。 我的精靈通過加速移動,並且我想在他們到達屏幕右上角時摧毀那個精靈...當他們到達某處時摧毀精靈身體
請給我一個代碼或暗示該怎麼做。請幫我
感謝
每當你得到你的精靈得到執行下面的代碼刪除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");
}
}