swift - 公开拥有属性的对象

标签 swift sprite-kit skspritenode touchesbegan

虽然我使用的是 SpriteKit,但这是一个常见的 Swift 问题:

我正在创建将全部使用 SKSpriteNodes 的游戏类(NPC、玩家、Powerup 等)。我想将 SKSpriteNodes 作为属性存储在这些对象上,而不是从 SKSpriteNode 继承(有利于组合而不是继承)。

这非常有效,但我无法捕获用户使用 TouchBegan 函数点击了哪个游戏对象类。 SKScene 的 nodeAtPoint 仅返回 SKSpriteNode 的实例,无法知道哪个游戏对象拥有它。我可以循环遍历所有游戏对象实例,并将它们的 Sprite 节点与触摸的节点进行比较,以创建我需要的链接。 。 。但这似乎效率很低。

有没有办法公开“拥有”被触摸节点属性的对象?或者另一种方法来完成我所描述的事情?或者我应该像在大多数示例游戏中看到的那样从 SKSpriteNode 继承?

最佳答案

请注意,在这种情况下,您需要双向关系 - 您的游戏对象需要访问节点,而且节点也需要访问其游戏对象。

我认为在这种情况下你不能完全避免继承。最简单的方法是继承 SKSpriteNode 并添加指向拥有它的对象的链接(例如,名为 ownerweak 属性) .

关于swift - 公开拥有属性的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28400010/

相关文章:

swift - 为什么 Xcode 8.3.2 在编辑时不立即显示语法错误

swift - SpriteKit 场景顺序

swift UITapGestureRecognizer 慢

ios - 触摸时删除 SKSpriteNode

ios - 绑定(bind) UITextField 来查看模型变量

ios - xCode 7 + Swift 2.0 中的编译错误

swift - spritekit gamecenter 排行榜 - 如何从场景中显示排行榜?

swift - 如何从内存中清除 SKSpriteNode?

swift - 更改屏幕尺寸时 Sprite 从场景中消失

ios - 将框架嵌入到另一个框架中