1

我研究并研究了 PlayN 游戏框架,我非常喜欢它。我在 Scala 中编程,实际上并不了解 Java,但这通常不是问题,因为它们可以很好地协同工作。

我已经在 eclipse 中建立了一个基本项目并导入了所有的库和依赖项。我什至翻译了基础 Maven 项目代码。这是两个文件:

时代精神

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

4

2 回答 2

1

查看JavaAssetsManager r 的代码,它看起来像是在尝试加载资源而不是文件。因此,您应该检查您的图像实际上是否在类路径中以及您提供的路径中(“resources/images/bp.png”)

或者,您可以使用getRemoteImage并传递文件 URL。当您成功使用 ajava.io.File时,您可以使用toUriFile (toUrl已弃用) 方法获取 URL。

于 2013-01-20T11:18:24.023 回答
0

这几乎可以肯定是行不通的,因为您正在这样做:

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夹中。

值得注意的是,当前的实现调用:

getClass().getClassLoader().getResource(...)

不是:

getClass().getResource(...)

区别在其他地方有所介绍,但 tldr 是可行的plat.assets.getImage("images/pea.png"),但plat.assets.getImage("/images/pea.png")不会。

于 2018-11-03T12:01:30.600 回答