如何修改 Swift 中 SpriteKit 节点的大小?
How can I modify the size of SpriteKit nodes in Swift?
在我的应用程序中,对于一个屏幕,我正在设置大小并使 SpriteKit 节点的背景居中。例如,我将背景子视图的大小设置如下:
backgroundNode.size = self.frame.size
虽然这适用于 iPhone 6 Plus,但 iPhone 5 的较小 screen/lower 分辨率 表示其他节点的默认大小太大而无法适应它们的场景。
如何强制其他节点符合后台节点的大小?
我想将每个子视图的大小除以背景子视图的大小,但是不能直接对大小进行数学运算 属性.
SpriteKit场景(SKScene
)包含节点,节点(SKNode
),其中有size
和 position
属性(类型分别为 CGSize
and CGPoint
)。
UIKit UIView
.frame
和 bounds
属性是一个 CGRect
结构,由相同的 CGSize
and CGPoint
类型结构。
所以理解如何使用 CGRect
、CGSize
和 CGPoint
确实很有帮助。
请注意,CGRect
、CGSize
和 CGPoint
作为结构,在 Swift 中,总是按值传递给函数,而不是像 [=97 那样按引用传递=] 是,因此您不能修改传递给函数的结构内的字段,并且让它们传播回调用者的结构副本而不采取额外步骤。
因为大小和位置属性是复合类型,所以不能像简单的标量一样在数学和逻辑运算中使用它们;因为它们包含多个属性。
例如:
CGSize
包含 width
和 height
属性,
CGPoint
由 x
和 y
属性组成。
如果要划分大小,您必须单独访问 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)
其他有时单独设置size
和origin
属性更实用:
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
还值得了解每个结构的“零”静态 属性,作为方便的清晰 shorthand 等价物:
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.
在我的应用程序中,对于一个屏幕,我正在设置大小并使 SpriteKit 节点的背景居中。例如,我将背景子视图的大小设置如下:
backgroundNode.size = self.frame.size
虽然这适用于 iPhone 6 Plus,但 iPhone 5 的较小 screen/lower 分辨率 表示其他节点的默认大小太大而无法适应它们的场景。
如何强制其他节点符合后台节点的大小? 我想将每个子视图的大小除以背景子视图的大小,但是不能直接对大小进行数学运算 属性.
SpriteKit场景(SKScene
)包含节点,节点(SKNode
),其中有size
和 position
属性(类型分别为 CGSize
and CGPoint
)。
UIKit UIView
.frame
和 bounds
属性是一个 CGRect
结构,由相同的 CGSize
and CGPoint
类型结构。
所以理解如何使用 CGRect
、CGSize
和 CGPoint
确实很有帮助。
请注意,CGRect
、CGSize
和 CGPoint
作为结构,在 Swift 中,总是按值传递给函数,而不是像 [=97 那样按引用传递=] 是,因此您不能修改传递给函数的结构内的字段,并且让它们传播回调用者的结构副本而不采取额外步骤。
因为大小和位置属性是复合类型,所以不能像简单的标量一样在数学和逻辑运算中使用它们;因为它们包含多个属性。
例如:
CGSize
包含width
和height
属性,CGPoint
由x
和y
属性组成。
如果要划分大小,您必须单独访问 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)
其他有时单独设置size
和origin
属性更实用:
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
还值得了解每个结构的“零”静态 属性,作为方便的清晰 shorthand 等价物:
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.