公开拥有 属性 的对象
Expose the Object that owns a Property
虽然我使用的是 SpriteKit,但这是一个一般性的 Swift 问题:
我正在创建将全部使用 SKSpriteNode(NPC、Player、Powerup 等)的游戏 classes。我想将 SKSpriteNodes 作为属性存储在这些对象上,而不是从 SKSpriteNode 继承(有利于组合而不是继承)。
这很好用,只是我无法捕获用户使用 touchesBegan 函数点击了哪个游戏对象 class。 SKScene 的 nodeAtPoint 只是 returns SKSpriteNode 的实例,无法知道哪个游戏对象拥有它。我可以遍历我所有的游戏对象实例,并将它们的精灵节点与触摸节点进行比较,以创建我需要的 link。 . .但这似乎效率很低。
有没有办法暴露'owns'被触摸节点属性的对象?或者另一种方法来做我正在描述的事情?或者我应该像我在大多数示例游戏中看到的那样从 SKSpriteNode 继承?
请注意,在这种情况下,您需要双向关系 - 您的游戏对象需要访问节点,但节点也需要访问它们的游戏对象。
我认为在这种情况下您不能完全避免继承。最简单的方法是从 SKSpriteNode
继承并向拥有它的对象添加一个 link(例如,一个名为 owner
的 weak
属性)。
虽然我使用的是 SpriteKit,但这是一个一般性的 Swift 问题:
我正在创建将全部使用 SKSpriteNode(NPC、Player、Powerup 等)的游戏 classes。我想将 SKSpriteNodes 作为属性存储在这些对象上,而不是从 SKSpriteNode 继承(有利于组合而不是继承)。
这很好用,只是我无法捕获用户使用 touchesBegan 函数点击了哪个游戏对象 class。 SKScene 的 nodeAtPoint 只是 returns SKSpriteNode 的实例,无法知道哪个游戏对象拥有它。我可以遍历我所有的游戏对象实例,并将它们的精灵节点与触摸节点进行比较,以创建我需要的 link。 . .但这似乎效率很低。
有没有办法暴露'owns'被触摸节点属性的对象?或者另一种方法来做我正在描述的事情?或者我应该像我在大多数示例游戏中看到的那样从 SKSpriteNode 继承?
请注意,在这种情况下,您需要双向关系 - 您的游戏对象需要访问节点,但节点也需要访问它们的游戏对象。
我认为在这种情况下您不能完全避免继承。最简单的方法是从 SKSpriteNode
继承并向拥有它的对象添加一个 link(例如,一个名为 owner
的 weak
属性)。