屏幕保护程序中的 SpriteKit 找不到图像
SpriteKit in screensaver can't find images
我正在 Swift 使用 SpriteKit 制作屏幕保护程序。
在应用程序中测试屏幕保护程序时,所有纹理都正确加载。一旦我制作了 .saver 并将其加载到系统偏好设置中,SpriteKit 就会显示找不到图像。
我用过(imageNamed: "")
,所以我尝试使用
var imageURL = Bundle.main.url(forResource: "gradient", withExtension: "png")
let imageGradient = NSImage(contentsOf: imageURL!)!
,但我得到了相同的结果。
SpriteKit 无法在内置到 .saver 文件中时访问图像,但在 运行 通过应用程序时可以完美运行。
我已将图片包含在包中、资产中、Target 的复制包中 Resources/Development Assets/Resource 标签。
您可以从这里克隆项目:https://github.com/Nazar-Bibik/SavePortal
我调查过这个项目:https://github.com/leebradley/nyan-screensaver
我找到了正确的做法:
- 您需要将图像放入 bundle,而不是 xcassets(将其与 .swift 文件放在一起)
- 不要使用图片名称,而是使用以下内容
let sourceBundle = Bundle(for: MainSwiftFile.self)
let imagePath = sourceBundle.path(forResource: "picture-name", ofType: "png")!
neededTextures = SKTexture(imageNamed: imagePath)
您需要提供 .swift 文件的名称以及您的委托人 class(info.plist 文件中的原则 class)。
剩下的很简单 - forResource 是一个文件名,ofType 是一个文件扩展名,而不是在 imageNamed 中传递通常的名称:您提供文件路径的字符串。
"imagePath"是String类型。
我正在 Swift 使用 SpriteKit 制作屏幕保护程序。 在应用程序中测试屏幕保护程序时,所有纹理都正确加载。一旦我制作了 .saver 并将其加载到系统偏好设置中,SpriteKit 就会显示找不到图像。
我用过(imageNamed: "")
,所以我尝试使用
var imageURL = Bundle.main.url(forResource: "gradient", withExtension: "png")
let imageGradient = NSImage(contentsOf: imageURL!)!
,但我得到了相同的结果。 SpriteKit 无法在内置到 .saver 文件中时访问图像,但在 运行 通过应用程序时可以完美运行。
我已将图片包含在包中、资产中、Target 的复制包中 Resources/Development Assets/Resource 标签。
您可以从这里克隆项目:https://github.com/Nazar-Bibik/SavePortal
我调查过这个项目:https://github.com/leebradley/nyan-screensaver 我找到了正确的做法:
- 您需要将图像放入 bundle,而不是 xcassets(将其与 .swift 文件放在一起)
- 不要使用图片名称,而是使用以下内容
let sourceBundle = Bundle(for: MainSwiftFile.self)
let imagePath = sourceBundle.path(forResource: "picture-name", ofType: "png")!
neededTextures = SKTexture(imageNamed: imagePath)
您需要提供 .swift 文件的名称以及您的委托人 class(info.plist 文件中的原则 class)。 剩下的很简单 - forResource 是一个文件名,ofType 是一个文件扩展名,而不是在 imageNamed 中传递通常的名称:您提供文件路径的字符串。 "imagePath"是String类型。