设计圆以外的物理体

Designing physics bodies other than circles

我正在用 SpriteKit 制作我的第一个游戏,我一直在使用的敌人外星人(SKSpriteNode 子类)物理体:

self.physicsBody = SKPhysicsBody(circleOfRadius: self.size.width/2)

到目前为止,大多数外星人都是 circle-shaped。但是,如果我有椭圆形或方形外星人,设计他们的物理身体的最佳方法是什么?我试过这个方形:

let squarePath = UIBezierPath(rect: CGRect(x: -64, y: -64, width: 128, height: 128))
self.physicsBody = SKPhysicsBody(polygonFromPath: squarePath.CGPath)

但我不知道这是否是最有效的,也不知道如何精确地制作省略号。任何建议都会很棒!

使用路径是创建复杂物理体的唯一方法,但是,您可以使用 SKPhysicsBody(rectangleOf: CGSize(width: 100, height: 100)) 创建矩形

编辑: 使用它来帮助从图像创建有效路径:http://insyncapp.net/SKPhysicsBodyPathGenerator.html

注意:这只会生成图像的路径,您需要通过删除路径和连接点来自行清理它。

让 SpriteKit 为您绘制形状!

如果您有精灵并且需要为其创建一个 PhysicsBody,只需让 SpriteKit 为您完成即可。 SpriteKit 可以分析纹理、找到边界(使用 alpha/transparent 通道)并最终创建与图像匹配的物理体。

假设我将这个精灵添加到我的场景中

let croc = SKSpriteNode(imageNamed: "croc_walk01")
croc.position = CGPoint(x: frame.midX, y: frame.midY)
addChild(croc)

自动创建 PhysicsBody 形状

现在我只需添加这一行

croc.physicsBody = SKPhysicsBody(texture: croc.texture!, size: croc.texture!.size())

SpriteKit 会自动为我创建 PhysicsBody。

你能看到精灵周围的线条吗?而已。让我把精灵隐藏起来,这样你能看得更清楚

croc.hidden = true