虽然我使用的是 SpriteKit,但这是一个常见的 Swift 问题:
我正在创建将全部使用 SKSpriteNodes 的游戏类(NPC、玩家、Powerup 等)。我想将 SKSpriteNodes 作为属性存储在这些对象上,而不是从 SKSpriteNode 继承(有利于组合而不是继承)。
这非常有效,但我无法捕获用户使用 TouchBegan 函数点击了哪个游戏对象类。 SKScene 的 nodeAtPoint 仅返回 SKSpriteNode 的实例,无法知道哪个游戏对象拥有它。我可以循环遍历所有游戏对象实例,并将它们的 Sprite 节点与触摸的节点进行比较,以创建我需要的链接。 。 。但这似乎效率很低。
有没有办法公开“拥有”被触摸节点属性的对象?或者另一种方法来完成我所描述的事情?或者我应该像在大多数示例游戏中看到的那样从 SKSpriteNode 继承?
最佳答案
请注意,在这种情况下,您需要双向关系 - 您的游戏对象需要访问节点,而且节点也需要访问其游戏对象。
我认为在这种情况下你不能完全避免继承。最简单的方法是继承 SKSpriteNode
并添加指向拥有它的对象的链接(例如,名为 owner
的 weak
属性) .
关于swift - 公开拥有属性的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28400010/