gpt4 book ai didi

objective-c - 在 Cocos2d 中删除 Sprite 导致崩溃

转载 作者:行者123 更新时间:2023-12-03 17:16:21 25 4
gpt4 key购买 nike

我设置了一种在触摸时删除 Sprite 的方法,我有几个需要删除的 Sprite ,但我只在下面显示了一个:

-(void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event { 

....

if(CGRectContainsPoint(goalItem.boundingBox, touch)) {
[self removeChild:goalItem cleanup:YES];
}

....

}

其中goalItem是 header 中声明的CCSprite。基本上,一旦再次调用 ccTouchEnded 方法,这就会导致崩溃。

我认为这是因为该方法正在寻找已被删除的goalItem,但我不确定。

安全删除 Sprite 并确保指针不会混淆的最佳方法是什么?

我对 cocos2d 和 Objective-c 很陌生,所以我确信这可能是一个相当根本的错误:/

更新:

我通过创建此方法修复了它:

-(BOOL)checkForGoalSprite:(CGPoint)point {
if([self.children containsObject:goalItem]){
if(CGRectContainsPoint(goalItem.boundingBox, point)){
return YES;
}else {
return NO;
}
}else{
return NO;
}

}

所以 ccTouchEnded 的内容是:

-(void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event { 

....

if([self checkForGoalSprite:touch]) {
[self removeChild:goalItem cleanup:YES];
}

....

}

我确信有更好的方法......

更新:

我在使用 if else 语句时犯了一个基本错误,而我本可以使用 if 语句,从而迫使 ccTouchEnded 仅选择一个选项。

最佳答案

您正在“清理” Sprite ,因此在此之后指针可能会变成垃圾。我通过检查 CCSprite 对象是否有 != nil 来完成此操作,然后在删除后将其设置为 nil:

-(void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event { 

....

if(goalItem != nil)
{
if(CGRectContainsPoint(goalItem.boundingBox, touch)) {
[self removeChild:goalItem cleanup:YES];
goalItem = nil;
}
}

....

}

关于objective-c - 在 Cocos2d 中删除 Sprite 导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5499144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com