我是Swift编码的新手,所以如果这是一个愚蠢的问题我会道歉。
我有一个创建一系列Sprite的函数。这些精灵移动并改变大小。通过该功能,每个人都有一个唯一的名称。
我想做的是当用户按下一组单独的精灵时,他们的位置/动画/大小/纹理会发生变化。换句话说,我需要按下另一个精灵来调用一个改变第一组精灵的函数。
但是,我在这方面遇到了麻烦。似乎我可以使其工作,如果我硬连线精灵的特定变量名称。但是,因为有很多,它们可能会随着时间的推移而改变,我可能想要循环通过其中许多硬连线并不好。
基本上,我希望能够选择一个精灵,并在触摸另一个精灵时为其设置动画。
有什么建议吗?
答案 0 :(得分:1)
您可以创建自己的SKSpriteNode子类,然后从它们的对象名称(变量的名称或让常量)调用它们。这意味着您不必硬连线,并且您可以使用任何类型的逻辑/函数来更改动画或调用/使用的精灵的名称等。
在这个演示中,我制作了两个对象......一个是lightbult,另一个是lightwitch。单击lightswitch时,灯泡将亮起。
阅读评论以了解如何自定义此内容。你可以让任何对象告诉任何其他精灵来播放他们的个人动画:
var momentDate = moment(selectedDate);
var moneyDayStr = momentDate.format('dddd');
以下是展示lightswitch和灯泡演示的GameScene文件:
class TouchMeSprite: SKSpriteNode {
// This is used for when another node is pressed... the animation THIS node will run:
var personalAnimation: SKAction?
// This is used when THIS node is clicked... the below nodes will run their `personalAnimation`:
var othersToAnimate: [TouchMeSprite]?
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
// Early exit:
guard let sprites = othersToAnimate else {
print("No sprites to animate. Error?")
return
}
for sprite in sprites {
// Early exit:
if sprite.scene == nil {
print("sprite was not in scene, not running animation")
continue
}
// Early exit:
guard let animation = sprite.personalAnimation else {
print("sprite had no animation")
continue
}
sprite.run(animation)
}
}
}