虽然我正在使用SpriteKit,但这是一个普遍的Swift问题:
我正在创建将使用SKSpriteNodes(NPC,Player,Powerup等)的游戏类。我想将SKSpriteNodes存储为这些对象的属性,而不是继承自SKSpriteNode(有利于组合而不是继承)。
这很有效,除了我无法捕获具有touchesBegan函数的用户使用哪个游戏对象类。 SKScene的nodeAtPoint只返回SKSpriteNode的实例,无法知道哪个游戏对象拥有它。我可以循环遍历所有游戏对象实例,并将其精灵节点与触摸的节点进行比较,以创建我需要的链接。 。 。但这似乎效率很低。
有没有办法公开“拥有”被触摸节点属性的对象?还是另一种做我正在描述的方法?或者我应该像我在大多数示例游戏中看到的那样继承SKSpriteNode? p>
答案 0 :(得分:1)
请注意,在这种情况下,您需要双向关系 - 您的游戏对象需要访问节点,但节点也需要访问其游戏对象。
在这种情况下,我不认为你可以完全避免继承。最简单的方法是从SKSpriteNode
继承并添加指向拥有它的对象的链接(例如,weak
一个名为owner
的属性。