swift - SpriteKit中这两个语句有什么区别?

标签 swift sprite-kit skphysicsbody

这部分是一个 SKShapeNode

var rect = CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: 30, height: 30)) 

self.path = CGPathCreateWithRect(rect, nil)

并且

let rect = SKShapeNode(rectOfSize: CGSize(width: 30, height: 30))

它们在模拟器中的表现似乎有所不同,我想知道它们是否有任何不同。

最佳答案

SKShapeNode 的原点 (0, 0) 是节点的中心,其路径是相对于该点绘制的。因此,使用以下CGRect

创建的形状节点
CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: 30, height: 30))

绘制时其左下角位于形状节点的中心。

便捷方法 SKShapeNode(rectOfSize...) 通过将 CGRectorigin 参数偏移来使形状节点中的矩形居中矩形宽度和高度的一半。在本例中,矩形的原点是(-15, -15)。

您可以通过偏移原点来创建以 SKShapeNode 为中心的 CGRect:

let height = CGFloat(30)
let width = CGFloat(30)
let anchorPoint = CGPoint(x:0.5, y:0.5)

CGRect(origin: CGPoint(x: -width*anchorPoint.x, y: -height*anchorPoint.y), size: CGSize(width: width, height: height))

其中anchorPoint定义相对“ Sprite 中与节点位置相对应的点。”

您还可以使用SKShapeNode(path:path, centered:true),它将使用其边界框将路径居中。

关于swift - SpriteKit中这两个语句有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31764124/

相关文章:

ios - 如何使用逗号和行分隔符标记字符串

ios - Spritekit 多节点动画序列器,可以提高性能吗?

ios - UIKit 和 SpriteKit 添加 UIBezierPath 的不同结果

ios - SKPhysics : Made a rope, 为什么会坏?

swift - 如何在 UITextField 占位符字符之间添加空格?

swift - 合并接收器 : ignore receiveValue, 只需要完成

ios - 在 Swift 中的 cellForRowAtIndexPath 中的 UITableView 中选择检测单元格

ios - 从 SKScene 转到 Storyboard,创建旧场景的实例

ios - physicsBody 类别位掩码值的设置

swift - 使 SKSpriteNode 运行 Action 与屏幕边缘碰撞