- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我对 SpriteKit 还是个新手,想看看我是否可以使用 Xcode 的 SKS 编辑器构建关卡。当我添加几个带有“Spaceship.png”纹理的 Sprite 并构建模板应用程序时,纹理不会加载。
这是使用 Swift 作为语言并添加提供的“Spaceship.png” Sprite 的原始 OSX 游戏模板的屏幕截图。纹理显示良好: 这是仅对模板进行修改后构建和运行应用程序的结果:
调试控制台显示此警告消息: 我尝试添加一个 .atlas 文件夹,结果相同。场景只显示红色 X 图标代替 Sprite 。如果添加的 Sprite 只是彩色 Sprite ,它们显示良好。前段时间我废弃了一个应用程序,我曾经在其中加载 SKScene 并将 Sprite Assets 手动添加到我的 SKScene 子类中,并且运行良好。
但是,如果我将纹理(例如“Spaceship.png”)移动到项目的根目录,即不在 Assets 目录或 .atlas 文件夹中,则场景会加载显示良好的纹理。
这是添加到项目根目录的纹理:
这是期望的结果: 我尝试通过 enumerateChildNodesWithName(_,usingBlock)
手动将 SKS 文件中加载的资源添加到场景中,如果纹理不在项目文件夹的根目录中,我会得到相同的结果。
这是我尝试手动添加 Assets :
func applicationDidFinishLaunching(aNotification: NSNotification) {
/* Pick a size for the scene */
if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
let sceneToBePresented = GameScene()
/* Set the scale mode to scale to fit the window */
sceneToBePresented.scaleMode = .AspectFill
sceneToBePresented.size = scene.size
/* Sprite Kit applies additional optimizations to improve rendering performance */
self.skView!.ignoresSiblingOrder = true
self.skView!.showsFPS = true
self.skView!.showsNodeCount = true
scene.enumerateChildNodesWithName("*") { node, stop in
sceneToBePresented.addChild(node.copy() as SKSpriteNode)
}
self.skView!.presentScene(sceneToBePresented)
}
}
我查看了 SpriteKit 类 - SKNode
、SKScene
、SKTexture
、SKSPriteNode
- 寻找关于路径的任何线索、缓存、预加载或其他任何东西,但无法找到可以使这项工作正常进行的事情。
我正在运行 Xcode 6.1.1,我的目标是 10.9,我使用的语言是 Swift,尽管使用 ObjC 也有同样的行为。这是功能还是错误?还有其他人遇到过类似情况吗?
在此先感谢您的帮助
[更新]
看起来这还没有实现——从 Assets 目录加载纹理——因为开发论坛中的这篇帖子讨论了同样的问题,他的解决方案是将 Assets 目录重命名为与纹理相同的名称。本质上,我发现根文件夹中有图像文件:How do you load sprite textures from Images.xcassets when using SKS scene file ,虽然我设法回滚到工作状态的早期应用程序确实从 .atlas'es 加载纹理,但我似乎无法使用干净的模板来完成!!!
最佳答案
[在这里回答我自己的问题]
据我所知,目前,从 Assets 目录加载纹理 - Images.xcassets
- 同时取消归档或反序列化 SKScene
文件在 OSX 上不起作用基于我的尝试和上面引用的 devforumns 帖子。
然而,从图像图集中加载纹理是通过强制 SKTexture
加载图像来实现的。可以通过 preloadWithCompletionHandler(_:)
或 preloadTextures(_:, withCompletionHandler:)
方法强制或“触摸”SKTexture
,或者正如我所发现的,只需打印 Sprite 的 SKTexture
的描述即可。
为了任何可能需要进一步帮助的人的利益,这里是一个代码片段,它在解压缩 SKS 文件后预加载纹理:
if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
for child in scene.children as [SKNode] {
if child is SKSpriteNode {
let sprite = child as SKSpriteNode
sprite.texture?.preloadWithCompletionHandler({ })
/* or even a simple debug log of the texture */
/* println(sprite.texture) */
}
}
/* Do your other stuff ... */
...
}
如果我说错了请指正。在有人这样做之前,或者 Apple 修复了 SpriteKit 在 iOS 和 OSX 之间的行为之间的差异,我不会寻找其他解决方案,并且会遵循 Murphey 定律:
If it works, don't fix it
关于xcode - SpriteKit unarchiveFromFile 不会从 Assets 目录和图集中加载纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28345805/
我在我的应用程序中使用rails 4 和 ruby 1.9.3 以及fancybox2-rails gem,但是 Assets 管道存在一个普遍问题。如果我运行 rake task 进行预编译,那
我把我所有的 Assets 都放在我的包里例如myBundle/Resources/public/css/ 然后像这样加载它们: {% block stylesheets %} {{ parent()
我正在创建RoR-6应用程序,并从此行的application.html.erb文件中引发以下错误: javascript_include_tag 'application', 'data-turbo
我正在对 Play Subproject 功能进行更多扩展测试,如下所述:http://www.playframework.com/documentation/2.0/SBTSubProjects .
我是 symfony 2 和 Assetic 的新手。我想在 CSS 中使用 assetic 和 Sass。我使用自定义字体。我在资源下的包中创建文件夹“assets/css”,里面有 _base.s
这是我的目录结构(这只是一个测试项目): stan@mypc:/generate_assets$ sudo tree -L 3 -p . ├── [drwxr-xr-x] assets │ └─
我使用 node.js connect/express。 有人知道支持 TypeScript 源代码即时编译和缩小的 Assets 管理器吗? 知道如何以编程方式调用编译器吗? 我一直在使用 conn
因此,我们在 Assets 管道摘要方面遇到了一个小问题,因为我们有许多 HTML 模板作为 Assets (对于 AngularJS),并且我们使用 asset_path 在 Javascript
我想从iPad的照片库中获取图像URL。 当我尝试从Image Piicker的信息中获取 UIImagePickerControllerReferenceURL 时 我将URL设为: assets
我正在使用带有Assetic的Symfony 2.1.10版,并且在上次 Composer 更新之后,当我尝试运行php app/console assetic:dump时出现以下错误 Dumping
我的 Assets 管道有问题,我已经有一个名为 Assets 的资源/ Controller 。所以我已将 assets.prefix 选项更改为“/externals”。 config.asset
更新到 Expo sdk 34 后,出现此错误:TypeError:Asset.fromModule 不是函数。 (在“Asset.fromModule(image)”中,“Asset.fromMod
将 Play 框架项目从 2.2.4 迁移到 2.3.8 后遇到问题: 这是运行命令“activatorcompile”的错误输出: [error] ...\workspace\testproject
我在将 Google Analytics 添加到我的 Rails 4 应用程序时遇到了一些困难(参见 this post)。 我通过在 /public/assets/google-analytics.
我正在使用 Symfony2 和 Assetic。最近我一直在做很多 CSS 工作,所以在某个时候我需要命令 $ php app/console assetic:dump --env=prod --n
我正在 Android 开发中迈出第一步,并遇到了 Assets 一词。 据我了解, Assets 只是一个未被解析或引用为资源的文件。 这个词有更准确的定义吗?我应该在哪些情况下在我的应用程序中使用
我添加了 danial-farid--angular-file-upload通过 Rails Assets 将库添加到我的 Rails 4 应用程序。主库加载正常,但 sprockets 找不到它包含
这是我的代码,尽管编码非常粗糙: public void loadStack(AssetManager manager, String path) { String[] lis
我正在使用 Assets 管理我的 Symfony 2 框架中的 CSS 文件。它在生产模式下运行良好。 我的问题是在 Debug模式下,assetic 不断将我的文件合并为一个输出文件。这使得跟踪特
我想以编程方式从重复的相册中删除 Assets (照片不是)。我可以使用照片框架删除相册 我想知道如何从相册中删除 Assets 而不从照片应用中完全删除它。我想在多个地方使用它,例如将 Assets
我是一名优秀的程序员,十分优秀!