gpt4 book ai didi

ios - 如何在 Swift 中修改 SpriteKit 节点的大小?

转载 作者:搜寻专家 更新时间:2023-10-31 22:12:26 24 4
gpt4 key购买 nike

在我的应用程序中,对于一个屏幕,我正在设置大小并使 SpriteKit 节点的背景居中。例如,我将背景 subview 的大小设置如下:

backgroundNode.size = self.frame.size  

虽然这适用于 iPhone 6 Plus,但 iPhone 5 的较小屏幕/较低分辨率意味着其他节点的默认大小太大而无法适合他们的场景。

如何强制其他节点符合后台节点的大小?我想将每个 subview 的大小除以背景 subview 的大小,但不能直接在大小属性上进行数学运算。

最佳答案

SpriteKit场景(SKScene)包含节点,节点(SKNode),其中有 sizeposition 属性(类型分别为 CGSizeCGPoint)。

UIKit UIView . framebounds属性是 CGRect结构由相同的 CGSize 组成和 CGPoint类型结构。

因此,了解如何使用 CGRectCGSizeCGPoint 确实很有帮助。

请注意,CGRectCGSizeCGPoint 作为结构,在 Swift 中,总是按值传递给函数,而不是按引用传递类是,因此您不能修改传递给函数的结构内部的字段,并且在不采取额外步骤的情况下将它们传播回结构的调用者副本。

因为大小和位置属性是复合类型,所以不能像简单的标量一样在数学和逻辑运算中使用它们;因为它们包含多个属性。

例如:

  • CGSize 包含 widthheight 属性,
  • CGPointxy 属性组成。

如果要划分大小,您必须单独访问 CGSize 结构的宽度和高度属性。

您可以在一个操作中分配大小(即单个构造函数):

node.size = CGSize(
width: node.size.width / backgroundNode.size.width,
height: node.size.height / backgroundNode.size.height)

或者您可以谨慎地进行:

node.size.width  = node.size.width  / backgroundNode.size.width
node.size.height = node.size.height / backgroundNode.size.height

处理 CGRect 字段时,有时将其作为单个实体处理会很有用。例如,

 view.frame = CGRect(x: 0, y: 0, width: 10, height: 10)

其他一些时候单独设置sizeorigin属性更实用:

 view.frame.origin = CGPoint (x: 0, y: 0)
view.frame.size = CGSize (width: 10, height: 10)

甚至:

 view.frame.origin.x     = 0
view.frame.origin.y = 0
view.frame.size.width = 10
view.frame.size.height = 10

还值得了解每个结构的“零”静态属性,作为方便的简写等价物:

 CGRect .zero   ...    CGRect  (x: 0, y: 0, width: 0, height: 0)
CGPoint.zero ... CGPoint (x: 0, y: 0)
CGSize .zero ... CGSize (width: 0, height: 0)
If you do a lot of adjusting of size and position, to reduce code bloat, you might consider borrowing or developing convenient Swift extensions to `CGRect, CGSize and CGPoint` to simplify applying delta values to sizes or origins.

关于ios - 如何在 Swift 中修改 SpriteKit 节点的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41422685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com