错误的CGPath规模 - 斯威夫特

时间:2015-12-14 14:38:17

标签: ios swift sprite-kit skphysicsbody

我正在关注raywenderlich.com的快速教程,而我目前正处于创建物理团体的阶段。

正如教程使用的那样,我使用了Path Generator,如this question上的答案所示,这里是Stackoverflow。

我使用了一个基本的火柴人,见过这里:

Stickman

使用答案中的代码片段,它会生成这些坐标,如下所示我创建播放器的位置:

player.position = CGPoint(x: size.width * 0.2, y: playableStart + ((player.size.height/2) * kHDPlayerScaleDown) + playableHeight * 0.4)
player.scaleAsPoint = CGPoint(x: kHDPlayerScaleDown, y: kHDPlayerScaleDown)
player.zPosition = Layer.Player.rawValue

// Physics Body
let offsetX = player.size.width * player.anchorPoint.x
let offsetY = player.size.height * player.anchorPoint.y

let path = CGPathCreateMutable()

CGPathMoveToPoint(path, nil, 215 - offsetX, 275 - offsetY)
CGPathAddLineToPoint(path, nil, 223 - offsetX, 7 - offsetY)
CGPathAddLineToPoint(path, nil, 171 - offsetX, 7 - offsetY)
CGPathAddLineToPoint(path, nil, 30 - offsetX, 69 - offsetY)
CGPathAddLineToPoint(path, nil, 144 - offsetX, 271 - offsetY)

CGPathCloseSubpath(path)

player.physicsBody = SKPhysicsBody(polygonFromPath: path)
player.physicsBody?.categoryBitMask = PhysicsCategory.Player
player.physicsBody?.collisionBitMask = 0
player.physicsBody?.contactTestBitMask = PhysicsCategory.Obstacle

但是,我按照0.1kHDPlayerScaleDown)扩展了我的火柴人,如上面的代码所示player.scaleAsPoint...

因此(我认为)物理机构不再与精灵对齐...

我尝试在创建物理主体之前和之后缩放图像,并且在我的设备上显示时都没有给出正确的位置。如果我之前缩放,它会更大(我假设图像的原始大小),如果在物理体创建后缩放,它会小得多,如下所示:

scaled stickman

在发布之前,我还将坐标缩放到kHDPlayerScaleDown,但是我得到了奇怪的结果,所以我实现了错误......

如何缩放此路径以匹配缩放的精灵?

1 个答案:

答案 0 :(得分:0)

我在SceneKit中使用边界框。在sprite工具包中有边界矩形。

来自Apple的

:  " frame属性为节点的可视内容提供边界矩形。"

使用框架计算要应用于路径的比例比例。