1

PlayNゲームフレームワークを調べて調べたところ、とても気に入りました。私はScalaでプログラミングしていて、実際にはJavaを知りませんが、Javaはうまく連携するので、通常は問題になりません。

Eclipseで基本的なプロジェクトを設定し、すべてのライブラリと依存関係をインポートしました。基本のMavenプロジェクトコードを翻訳しました。2つのファイルは次のとおりです。

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を見つけることさえできました。私は何か間違ったことをしていますか?忘れているものはありますか?

4

2 に答える 2

1

JavaAssetsManage rのコードを見ると、ファイルではなくリソースを読み込もうとしているようです。したがって、画像が実際にクラスパスにあり、指定したパス( "resources / images / bp.png")にあることを確認する必要があります。

getRemoteImageまたは、ファイルURLを使用して渡すこともできます。の使用に成功したので、Fileのjava.io.FileメソッドでURLを取得できます(非推奨)。toUritoUrl

于 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

私はそれが実際にこれらの1つのように見えると想像します:

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 に答える