从scala playn读取图像时出错

时间:2013-01-20 06:17:52

标签: java scala playn

我研究并研究了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。 我做错了吗?有什么我忘记了吗?

2 个答案:

答案 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(...) 将不起作用。