我正在使用SpriteKit制作平台游戏,我正在尝试使用方法setValue:forKey:
在touchesMoved:withEvent
方法中,因为我有一团糟:我需要删除类型为SKAction
的动画。我使用if在SKAction
中运行此touchesMoved:withEvent
动画,检查所有必需的条件。其中一个条件是:
if(NO ==[[self childNodeWithName:@"hero"] hasActions])
{
//code to run animation
}
我检查它是否没有动作,因为我不想创建比需要更多的动画。
当我用手指触摸屏幕时,动画将永远运行,只有当我从屏幕上移开手指时,才会移除touchesEnded:withEvent
方法
因此,在我触摸屏幕之前,英雄动画将永远循环。我遇到的问题是,如果我将手指从屏幕右侧移动到屏幕左侧,动画仍然是相同的:即使精灵向左移动,英雄也会向右移动,因为if检查是否有动作,并且不要在左侧创建新动画,当然也不要删除正确的动画。
我想我可以修复它为动画动作设置一个键,然后使用if和使用手指的位置以相同的方法删除它。问题是我不知道如何使用removeActionForKey
方法。我试过阅读文档,但我没有发现它很清楚。谁能给我发一些如何使用它的代码示例?
答案 0 :(得分:0)
您需要使用runAction:withKey:
方法:
// if direction == right
[node removeActionForKey:@"left"];
SKAction *animationRight = [SKAction animateWithTextures:......];
[node runAction:animationRight withKey:@"right"];
...........
// if direction == left
[node removeActionForKey:@"right"];
SKAction *animationLeft = [SKAction animateWithTextures:......];
[node runAction:animationLeft withKey:@"left"];