这可能是一个很难解决的问题,因为我很新。
我有一个场景,服务员拿着一盘食物 (食物是从阵列中选择的随机CCSprite)
每次他上网时,他都会拿着一块新食物 (用户触摸食物,服务员走开以返回 -(id) init
{
///other code then...
waiterOnSCreen
= [CCSprite spriteWithSpriteFrameName:@"CatUP.png"];
waiterOnSCreen.position = ccp(CatOffSCreenPosX, catXpos);
[self addChild:waiterOnSCreen z:0];
//moving the waiter
// the random food sprite is added later to the waiter
// [waiterOnSCreen addChild:myRandomSprite];
}
-(void)LoadRandomFood
{
///I make my array here then and add CCSprites
RandomFood = [[NSMutableArray alloc]initWithObjects:
//cake,
RandomMuffin,
RandomMeat,
RandomCake,//
nil];//
int i = 0;
int count= [RandomFood count];
if (i < count)
{
int i = arc4random() % [RandomFood count];
myRandomSprite = (CCSprite *)[RandomFood objectAtIndex:i];
//waiterOnSCreen is a CCSprite added on the init
[waiterOnSCreen addChild:myRandomSprite];
myRandomSprite.position=ccp(290,220);
myRandomSprite.tag = RandomFoodTag;
}
}
后
in if(CGRectContainsPoint(waiterOnSCreen.boundingBox, location))
{
//trying to remove the food here
//Ive already tried to remove the sprite using
[self removeChildByTag:RandomeObjectTag];
//and also
CCSprite *wantedSprite = (CCSprite *)[self getChildByTag:RandomFoodTag];
[wantedSprite removeFromParentAndCleanup:YES];
}
}
我猜它已经崩溃的孩子已经添加了。它不能再次添加&#39; 因为它试图再次添加RandomMuffin,RandomMeat,RandomCake 我不太确定如何解决这个问题。
答案 0 :(得分:1)
您不需要创建另一个数组来删除精灵。如果您可以提供更完整的项目图片,我将很乐意对其进行审核。你可以将整个代码文件发布到你工作的地方吗?还是多个文件?在进一步检查您的某些示例时,LoadRandomFood
中的一些问题是您正在分配NSMutableArray
,而不检查RandomFood
是否已有值。
这样的事情会更安全,但请注意我在这里做一个完整性检查。在init或其他不经常执行的地方填写RandomFood
一次会更有效率。
-(void)LoadRandomFood
{
if (RandomFood)
{
[RandomFood release];
}
///I make my array here then and add CCSprites
RandomFood = [[NSMutableArray alloc]initWithObjects:
//cake,
RandomMuffin,
RandomMeat,
RandomCake,//
nil];//
int i = 0;
int count= [RandomFood count];
if (i < count)
{
int i = arc4random() % [RandomFood count];
myRandomSprite = (CCSprite *)[RandomFood objectAtIndex:i];
//waiterOnSCreen is a CCSprite added on the init
[waiterOnSCreen addChild:myRandomSprite];
myRandomSprite.position=ccp(290,220);
myRandomSprite.tag = RandomFoodTag;
}
}
如果在添加精灵时发生崩溃,您确定正在执行removeChildByTag
调用吗?是否有可能在删除旧标记之前将标记重新分配给新的精灵?你是否介入了调试器中的逻辑?再次,这将有助于查看更完整的代码文件。
答案 1 :(得分:0)
我必须创建另一个数组来访问精灵并将其删除
NSMutableArray *_buffer = [NSMutableArray new];
[_buffer insertObject:myRandomSprite atIndex:0];
CCSprite *sprite = (CCSprite *)[_buffer objectAtIndex:0];
[sprite removeFromParentAndCleanup:YES];