【问题标题】:When subclassing SKNode, should the Frame property return a non-empty value?子类化 SKNode 时,Frame 属性是否应返回非空值?
【发布时间】:2017-01-01 21:05:43
【问题描述】:

我将SKNode 子类化以通过将这些节点添加到我的子类来呈现由许多SKSpriteNodes 组成的地图。

一切正常,但我注意到我的节点子类的 Frame 始终为 0。

我在文档中找不到任何关于此的内容,所以:我是否应该覆盖 Frameproperty 并返回正确的值?

【问题讨论】:

  • 你能澄清一下'框架......总是0'吗? Frame 应该是一个 CGRect 结构,所以不能为零。通常对于 SKNode,框架将具有有效的位置,但宽度和高度为零。如果它本身在场景中位于 0,0,那么它的所有成员都将为零。那是正常的,不需要覆盖框架。如果你想要它的子框架,那么使用方法calculateAccumulatedFrame。
  • 我的意思是宽度和高度都为 0。我注意到 SKSpriteNode 具有有效的宽度和高度。

标签: ios sprite-kit sknode


【解决方案1】:

frame 属性是节点本身的框架,忽略任何子节点。对于 SKNode,这是一个位置,但宽度和高度为零。

如果节点的类绘制内容,则框架非空。 (https://developer.apple.com/reference/spritekit/sknode)

我读为:SKNode 不绘制任何内容,因此它为空是正确的。

节点及其子节点的框架由calculateAccumulatedFrame() 方法提供,需要子树框架的函数应该调用它而不是引用框架属性。

所以 应该 不需要为您的 SKNode 覆盖框架。我从来没有,在一些应用程序中有类似的结构 并且还没有遇到问题...

【讨论】:

  • 有道理。什么是“绘制内容”的节点示例?
  • @Krumelur:一个 SKSpriteNode 或一个 SKLabelNode - 都继承自 SKNode 但具有可绘制的内容,因此将根据该内容具有宽度和高度。
猜你喜欢
  • 2013-02-21
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-12
相关资源
最近更新 更多