我正在关注raywenderlich.com的快速教程,而我目前正处于创建物理团体的阶段。
正如教程使用的那样,我使用了Path Generator
,如this question上的答案所示,这里是Stackoverflow。
我使用了一个基本的火柴人,见过这里:
使用答案中的代码片段,它会生成这些坐标,如下所示我创建播放器的位置:
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.1
(kHDPlayerScaleDown
)扩展了我的火柴人,如上面的代码所示player.scaleAsPoint...
因此(我认为)物理机构不再与精灵对齐...
我尝试在创建物理主体之前和之后缩放图像,并且在我的设备上显示时都没有给出正确的位置。如果我之前缩放,它会更大(我假设图像的原始大小),如果在物理体创建后缩放,它会小得多,如下所示:
在发布之前,我还将坐标缩放到kHDPlayerScaleDown
,但是我得到了奇怪的结果,所以我实现了错误......
如何缩放此路径以匹配缩放的精灵?
答案 0 :(得分:0)
我在SceneKit中使用边界框。在sprite工具包中有边界矩形。
来自Apple的: " frame属性为节点的可视内容提供边界矩形。"
使用框架计算要应用于路径的比例比例。