gpt4 book ai didi

swift - 物理体 : Could not create physics body

转载 作者:行者123 更新时间:2023-12-04 01:34:46 25 4
gpt4 key购买 nike

我在 App Store 上有一个完整的工作游戏,但自从 iOS 13 以来它根本不起作用。我已经通过 Xcode 将游戏安装到我的设备上,但出现了很多错误消息:

PhysicsBody:无法创建物理体。

我一直在像这样创建我的 SKSpriteNodes:

 let bird = SKSpriteNode(texture: SKTextureAtlas(named:"player").textureNamed("bird0001"))
bird.physicsBody = SKPhysicsBody(texture: bird.texture!,
size: bird.size)

根据一些研究,这可能是 iOS 和 Xcode 的一个持续错误。有人可以确认是否是这种情况,因为这似乎是应用商店中使用纹理创建 SKSpriteNode 的游戏的主要问题吗?

在需要纹理的地方是否有解决方法?

最佳答案

好的,这是从 iOS 13.3(编辑现在也在 13.3.1 上尝试)和 Xcode 版本 11.3 起避免此错误的不同方法的测试。此链接中的完整测试来源:

https://github.com/bg2b/bugtest

相关代码:

  func addShip(_ texture: SKTexture, how: String) {
let sprite = SKSpriteNode(texture: texture)
sprite.position = CGPoint(x: x, y: 0)
sprite.zRotation = .pi / 4
x += 100
sprite.physicsBody = SKPhysicsBody(texture: texture, size: sprite.size)
if sprite.physicsBody == nil {
print("\(how) failed")
} else {
print("\(how) worked")
}
addChild(sprite)
}

override func didMove(to view: SKView) {
// The atlas version of a texture
addShip(SKTexture(imageNamed: "ship_blue"), how: "simple atlas reference")
// From an atlas, but call size() to force loading
let texture = SKTexture(imageNamed: "ship_blue")
_ = texture.size()
addShip(texture, how: "atlas force load")
// Reconstruct via CGImage (size would be wrong because of 2x)
let cgTexture = SKTexture(cgImage: texture.cgImage())
addShip(cgTexture, how: "reconstruct via cgImage")
// Re-render using view
let renderedTexture = view.texture(from: SKSpriteNode(texture: texture))!
addShip(renderedTexture, how: "re-render using view")
// Non-atlas texture
addShip(SKTexture(imageNamed: "nonatlas_ship_blue"), how: "not in atlas")
}

概括:
  • 简单地从图集中引用纹理并制裁剪理体可能会失败
  • 通过调用 size() 强制加载纹理在使 body 失败之前
  • 尝试通过 cgImage() 制作新纹理失败(图像本身已损坏,可能与同一错误有关)
  • 使用 View 渲染到纹理,然后从该新纹理制裁剪理实体
  • 从纹理的非图集副本制裁剪理体

  • 测试程序的控制台输出显示哪些有效,哪些无效:

    2020-02-01 06:23:51.872975-0500 bugtest[14399:9898087] PhysicsBody: Could not create physics body.
    simple atlas reference failed
    2020-02-01 06:23:51.886387-0500 bugtest[14399:9898087] PhysicsBody: Could not create physics body.
    atlas force load failed
    2020-02-01 06:23:51.913927-0500 bugtest[14399:9898087] PhysicsBody: Could not create physics body.
    reconstruct via cgImage failed
    re-render using view worked
    not in atlas worked

    这是一个屏幕截图,显示了不同方法的效果。您必须仔细观察,但只有最后两个具有有效的物理体。

    Screen shot of different attempts

    关于swift - 物理体 : Could not create physics body,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59961842/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com