我正在尝试突出显示两个SKSpriteNodes,当两个都突出显示时,让它们从屏幕淡出。我的代码目前看起来像这样:
// BOOL variables to indicate whether sprite is highlighted
// Declared after the @implementation
BOOL sprite1Touch = NO;
BOOL sprite2Touch = NO;
然后触摸方法:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
/* Called when a touch begins */
for(UITouch *touch in touches)
{
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInNode:self];
SKNode *Sprite1 = [self nodeAtPoint:location];
SKNode *Sprite2 = [self nodeAtPoint:location];
// Resize action to highlight a sprite has been touched.
SKAction *highlightedSprite = [SKAction scaleTo:0.55 duration:0.2];
// Action to unhighlight by setting sprite size back to normal.
SKAction *unhighlightedSprite = [SKAction scaleTo:0.5 duration:0.2];
// Action to fade out sprites
SKAction *fadeOut = [SKAction fadeOutWithDuration:0.2];
// Action to remove from parent
SKAction *remove = [SKAction removeFromParent];
if ([Sprite1.name isEqualToString:@"Sprite1"])
{
if (sprite1Touch == NO)
{
// if unhighlighted sprite is touched, highlight.
[Sprite1 runAction:highlightedSprite];
sprite1Touch = YES;
}
else if (sprite1Touch == YES)
{
// if highlighted sprite is touched, unhighlight.
[Sprite1 runAction:unhighlightedSprite];
sprite1Touch = NO;
}
}
else if ([Sprite2.name isEqualToString:@"Sprite2"])
{
if (sprite2Touch == NO)
{
// if unhighlighted sprite is touched, highlight.
[Sprite2 runAction:highlightedSprite];
sprite2Touch = YES;
}
else if (sprite2Touch == YES)
{
// if highlighted sprite is touched, unhighlight.
[Sprite2 runAction:unhighlightedSprite];
sprite2Touch = NO;
}
}
// if both sprites are highlighted, fade out both of them and remove from parent
if (sprite1Touch == YES && sprite2Touch == YES)
{
[Sprite1 runAction:fadeOut];
[Sprite2 runAction:fadeOut];
[Sprite1 runAction:remove];
[Sprite2 runAction:remove];
}
}
}
当我在模拟器中运行它时,突出显示/取消突出显示一个精灵可以正常工作。但是,当两者都突出显示时(因此意味着两者都应该淡出),只有最后一次触摸的精灵实际上淡出。我必须取消强光,然后再次突出显示第一个触摸的精灵,以便淡出。
有谁知道如何解决这个问题,让两个精灵同时淡出?
答案 0 :(得分:0)
您的逻辑存在问题。
每次触摸时,您都会将Sprite1
和Sprite2
(以及另一个您似乎没有使用的指针,node
)分配给同一个对象
因此,当你到达最后的if
语句块时,你会告诉同一个SKSpriteNode
“淡出”和“删除”两次。
你需要找到一些方法来保持对先前选择的精灵的引用,可能使用一对ivars而不是局部变量。