我研究并研究了PlayN游戏框架,我非常喜欢它。我在Scala中编程并且实际上不了解Java,但它通常不是一个问题,因为它们可以很好地协同工作。
我在eclipse中设置了一个基本项目并导入了所有库和依赖项。我甚至翻译了基础maven项目代码。这是两个文件:
Zeitgeist.scala
package iris.zeit.core
import playn.core.PlayN._
import playn.core.Game
import playn.core.Image
import playn.core.ImageLayer
class Zeitgeist extends Game {
override def init (){
var bgImage: Image = assets().getImage("images/bg.png")
var bgLayer: ImageLayer = graphics().createImageLayer(bgImage)
graphics().rootLayer().add(bgLayer)
}
override def paint (alpha: Float){
//painting stuffs
}
override def update(delta: Float){
}
override def updateRate(): Int = {
25
}
}
Main.scala
package iris.zeit.desktop
import playn.core.PlayN
import playn.java.JavaPlatform
import iris.zeit.core.Zeitgeist
object Main {
def main(args: Array[String]){
var platform: JavaPlatform = JavaPlatform.register()
platform.assets().setPathPrefix("resources")
PlayN.run(new Zeitgeist())
}
}
很酷的是它有效!窗户完美出现。唯一的问题是我似乎无法加载图像。使用上面的行,“assets()。getImage(”images / bg.png“)”它弹出
Could not load image: resources/images/bg.png [error=java.io.FileNotFoundException: resources/images/bg.png]
我玩过资源文件的位置无济于事。我甚至可以用java.io.File找到自己的bg.png。 我做错了吗?有什么我忘记了吗?
答案 0 :(得分:1)
查看the code of JavaAssetsManage r,看起来它正在尝试加载资源而不是文件。因此,您应该检查您的图像是否实际位于类路径和您提供的路径中(“resources / images / bp.png”)
或者,您可以使用getRemoteImage
并传递文件URL。当您成功使用java.io.File
时,您只需获取文件方法toUri
的网址(toUrl
已弃用)。
答案 1 :(得分:0)
这几乎肯定是行不通的,因为您正在这样做:
Accept: application/json
这意味着您要说的源文件夹如下:
Content-Type: application/json
我想它实际上看起来像其中之一:
platform.assets().setPathPrefix("resources")
或:
src/main/resources/resources/images/bg.png
src/main/resources/resources/images/pea.png
src/main/resources/resources/images
如果没有前缀,则可以执行以下操作:
src/main/resources/assets/images/bg.png <-- 'assets' the default prefix
src/main/resources/assets/images/pea.png
src/main/resources/assets/images
或者只是将文件放在src/main/resources/images/bg.png <-- You have failed to put a subfolder prefix in
src/main/resources/images/pea.png
src/main/resources/images
文件夹内的plat.assets().setPathPrefix("")
子文件夹中。
值得注意的是,当前的实现调用:
assets
不是:
resources
区别在于其他地方,但tldr是getClass().getClassLoader().getResource(...)
将起作用,而getClass().getResource(...)
将不起作用。