【问题标题】:SpriteKit - SKPhysicsBody created with texture not working as desiredSpriteKit - 使用纹理创建的 SKPhysicsBody 无法按预期工作
【发布时间】:2015-09-27 12:31:10
【问题描述】:

如果我创建一个 SKPhysicsBody 并将其添加到一个 SKSpriteNode 如下,那么碰撞检测与下面的地板对象一起工作。

let myObjectBody = SKPhysicsBody(circleOfRadius: 100)

但是,如果我改为使用应用它的 SKSpriteNode 的纹理创建 PhysicsBody,则碰撞不起作用。尽管它确实记录了接触,但该物体只是从地板上掉了下来。

let myObjectBody = SKPhysicsBody(texture: myObject.texture!, alphaThreshold: 0, size: myObject.texture!.size())

重要提示:如果我将 show Physics 设置为 true:

skView.showsPhysics = true

然后物理轮廓与从 png 生成的精灵形状轮廓完美匹配。

physicsBody 以下列方式添加到对象和场景中。

let myTexture = SKTexture(imageNamed: "myImage")
let myObject = SKSpriteNode(texture: myTexture)
myObject.xScale = 0.2
myObject.yScale = 0.2 //The image is big to allow zooming

let myObjectBody = SKPhysicsBody(texture: myObject.texture!, alphaThreshold: 0, size: myObject.texture!.size())

myObject.physicsBody = myObjectBody
myWorld.addChild(myObject)

【问题讨论】:

  • 您能否提供信息如何将SKPhysicsBody 添加到您的场景中?
  • 嗨,但我还是看不到你从哪里得到myObject?这是一个什么样的类,你是如何初始化它的?

标签: sprite-kit


【解决方案1】:

好的,我想出了如何完成这项工作。

我对 showPhysics 属性感到困惑。我需要将物理对象的大小设置为与图像相同的比例。

所以,这行得通:

    let myObjectSize = CGSize(width: myObject.texture!.size().width * 0.2, height: myObject.texture!.size().height * 0.2)
    let leafBody = SKPhysicsBody(texture: myObject.texture!, alphaThreshold: 0, size: myObjectSize)

这看起来很自然,但让我失望的是,打开 showPhysics 时可视化的(蓝色)physicsBody 比它产生的效果小五倍。所以图像的蓝色形状在实际图像内部(迷你版)。我上面问题中的代码创建了一个漂亮的蓝色可视化物理体,看起来与图像匹配,但实际上它太大了。

【讨论】:

    【解决方案2】:

    这是模拟器的问题。降级到 iOS 12.x 或使用物理设备似乎可以解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      相关资源
      最近更新 更多