我对 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/
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案
我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
是否可以在应用程序中包含的gem代码中知道应用程序的Rails文件系统根目录?这是gem来源的示例:moduleMyGemdefself.included(base)putsRails.root#returnnilendendActionController::Base.send:include,MyGem谢谢,抱歉我的英语不好 最佳答案 我发现解决类似问题的解决方案是使用railtie初始化程序包含我的模块。所以,在你的/lib/mygem/railtie.rbmoduleMyGemclassRailtie使用此代码,您的模块将在
在我让另一个人重做我的前端UI之前,我的Rails应用程序运行平稳。我已经尝试解决此错误3天了。这是错误:Nosuchfileordirectory-identifyExtractedsource(aroundline#59):575859606162@post=Post.find(params[:id])authorize@postif@post.update_attributes(post_params)flash[:notice]="Postwasupdated."redirect_to[@topic,@post]else{"utf8"=>"✓","_method"=>"patc
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我正在尝试以一种更类似于普通RubyGem结构的方式构建我的Sinatra应用程序。我有以下文件树:.├──app.rb├──config.ru├──Gemfile├──Gemfile.lock├──helpers│ ├──dbconfig.rb│ ├──functions.rb│ └──init.rb├──hidden│ └──Rakefile├──lib│ ├──admin.rb│ ├──api.rb│ ├──indexer.rb│ ├──init.rb│ └──magnet.rb├──models│ ├──init.rb│ ├──invite.rb│ ├─
我想编写一个ruby脚本来递归复制目录结构,但排除某些文件类型。因此,给定以下目录结构:folder1folder2file1.txtfile2.txtfile3.csfile4.htmlfolder2folder3file4.dll我想复制这个结构,但不包含.txt和.cs文件。因此,生成的目录结构应如下所示:folder1folder2file4.htmlfolder2folder3file4.dll 最佳答案 您可以使用查找模块。这是一个代码片段:require"find"ignored_extensions=[".cs"