ios - Sprite Kit 无法创建物理体错误
问题描述
我的问题是什么: 调用构造函数 SKPhysicsBody(texture: size:) 时出现无法创建物理体错误
我在所需的 init(coder aDecoder: NSCoder) 构造函数中为我的自定义 SKSpriteNode 对象创建物理体,因此我可以在场景编辑器中轻松设计我的游戏。我需要根据我在场景编辑器中设置的纹理创建物理体。这是我到目前为止的代码:
import Foundation
import SpriteKit
class Attachable : SKSpriteNode {
init(texture: SKTexture, position: CGPoint, size: CGSize ) {
super.init(texture: texture , color: UIColor.clear, size: size)
self.position = position
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
DispatchQueue.main.asyncAfter(deadline: .now() + 0.03) {
self.physicsBody = SKPhysicsBody(texture: (self.scene?.view?.texture(from:
SKSpriteNode(texture: self.texture)))!, size: self.size)
let joint = SKPhysicsJointFixed.joint(withBodyA: self.physicsBody!, bodyB: (.
self.parent?.physicsBody)!, anchor: self.parent!.position)
self.scene!.physicsWorld.add(joint)
}
}
}
如您所见,调用'texture: (self.scene?.view?.texture(from: SKSpriteNode(texture:self.texture)))!' 是我从另一个具有相同错误的帖子中看到的假设解决方法,但它不起作用,可能来自 xcode 的最新更新。反序列化初始化程序假定我在场景编辑器中为 Attachable 对象选择了纹理。我也在做异步的事情,因为需要在初始化其中一个主体后创建关节。我会想出一个更优雅的解决方案,但这超出了这个问题的范围。
编辑:我可以在场景编辑器中设置 alpha 物理体,所以这是一种解决方法,但我更喜欢在类中创建身体。
解决方案
这是一个似乎不断重复出现的问题。苹果开发者论坛也对此进行了讨论。它应该已经修复,但似乎又出现了。
推荐阅读
- python - 如何实现一个类?
- python - 如何将 JSON 对象键写入 CSV 文件?
- java - KakaConsumer.poll(timeoutMs) 和 KafkaConsumer.poll(Duration.ZERO) 的区别
- reactjs - Expo React-Native 调试器 - 错误:无法从 ` 解析模块`./debugger-ui/debuggerWorker.cff11639.js`
- api - Apollo 服务器多个 3rd 方 API
- javascript - JavaScript 覆盖对象属性可枚举性仍然不可枚举
- amazon-web-services - linux rdp 到 EC2 Windows 机器 - 错误“失去与 RDP 服务器的连接”
- java - 无法在离线模式下下载 maven 依赖项
- c# - 在 C# 中使用 Selenium 获取具有特定类的所有元素的属性值列表
- php - CAKEPHP 3:传递给 Cake\ORM\Table::patchEntity() 的参数 1 必须实现接口 Cake\Datasource\EntityInterface,布尔值