0

LWJGL と Slick2D を使用しています。プロジェクトを .jar にエクスポートし、JarSplice を使用して実行可能ファイルを生成するので、実行可能 jar がある場所にライブラリ ファイルは必要ありません。私の問題は、Eclipse からプロジェクトを実行するとすべてのイメージがロードされることですが、エクスポートされた実行可能 jar を実行するとイメージが見つからないためロードされません。写真は /res フォルダにあり、これはテクスチャをロードする方法です:

private Texture loadTexture(String key) {
    try {
        return TextureLoader.getTexture("PNG", new FileInputStream(
                new File("res/" + key + ".png")));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

ここでテクスチャをロードします。

Texture background = loadTexture("main_menu/bg");

jar をエクスポートする多くの方法を試しましたが、うまくいきません。

4

3 に答える 3

0

私の古いコードをチェックしてください、これはうまくいくかもしれません

ByteBuffer buf = null;
    try{
    texture = TextureLoader.getTexture("PNG", ResourceLoader.getResourceAsStream("res/" + key + ".png"));
    int texId = texture.getTextureID();
    buf = ByteBuffer.allocateDirect(4*texture.getImageWidth()*texture.getImageHeight());
    }catch(IOException e){
        e.printStackTrace();
    }   

    // Create a new texture object in memory and bind it
    //int texId = GL11.glGenTextures(); - if the trick with texture.getTextureID() won't work - use THIS
    GL13.glActiveTexture(GL13.GL_TEXTURE0);
    GL11.glBindTexture(GL11.GL_TEXTURE_2D, texId);

    // All RGB bytes are aligned to each other and each component is 1 byte
    GL11.glPixelStorei(GL11.GL_UNPACK_ALIGNMENT, 1);

    // Upload the texture data and generate mip maps (for scaling)
    GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGB, texture.getImageWidth(), texture.getImageHeight(), 0,
    GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, buf);

    //then you can generate some mipmaps

    //Setup the ST coordinate system
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL12.GL_CLAMP_TO_EDGE);
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL12.GL_CLAMP_TO_EDGE);

    // Setup what to do when the texture has to be scaled
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST_MIPMAP_LINEAR);

そして、あなたが必要とするのはtexIdです。

テクスチャの操作方法を知っているといいのですが;)。

于 2013-01-18T19:11:58.010 に答える
0

私がしたことは、netbeans プロジェクトにsourceというフォルダーがあり、.jar を作成したときに、それを JarSplice と一緒に使用して lib とネイティブをロードすることでした。次に、新しい .jar を winrar で開き、ソースを .jar にドラッグしました。.jar を実行するたびに、jar 内のフォルダーが使用されます。source は res と同じものですが、名前を変更しました。

したがって、基本的に res フォルダーを .jar に入れると機能します。

于 2013-01-18T20:16:05.653 に答える
0

それらが jar 内にある場合は、クラス パス リソースとしてロードする必要がある場合があります。見る:

 getClass().getClassLoader().getResourceAsStream(...)
于 2013-01-18T15:59:40.867 に答える