0

おそらくこれと重複している可能性がありますが、私の問題を解決するものを見つけることができないようです.

私の問題は、3 つの画像ファイルのうちの 1 つが、コンパイルされた JAR ファイル内からロードされないことです。ロードできる唯一の方法は、画像が .jar ファイルのすぐ外側にある場合です。

私の3つの画像ファイル名:

Tiles.png <---One that only loads outside
Sheet.png
Level.png

SpriteSheet.java <---- スプライトを取得してタイル サイズを指定します

public class SpriteSheet {
private BufferedImage image = null;
private BufferedImage[][] tiles = null;

public int tileSize = 0;

public SpriteSheet(String file, int tileSize) {
    this.tileSize = tileSize;
    try {
        InputStream url = SpriteSheet.class.getResourceAsStream(file);
        image = ImageIO.read(url);
    } catch (IOException e) {
        e.printStackTrace();
    }
    split();
}

Level.java <---- レベルをロードし、マップを描画します。その画像をうまくロードします。

public class Level {
private Map map = null;
private ArrayList<Entity> entities = new ArrayList<Entity>();
private Player player = null;
private BufferedImage sourceImage = null;
private SpriteSheet sprites = null;

public Level(String file, Player player) {
    this.player = player;


    try {
        URL url = SpriteSheet.class.getResource(file);
        sourceImage = ImageIO.read(url);
    } catch (IOException e) {
        e.printStackTrace();
    }

    map = new Map(sourceImage, this.player);
    sprites = new SpriteSheet("/sheet.png", 8);
    entities.add(this.player);
}

Map.java <---- ここが主な問題です。Tile.png は JAR 内ではシークされませんが、外部でシークされます。

public class Map {
private BufferedImage source = null;
private SpriteSheet sheet = null;
private Level level;

private Tile[][] tiles = null;
private int width = 0;
private int height = 0;

private Camera cam = null;
public int xOffset;
public int yOffset;

public Map(BufferedImage source, Entity cameraTarget) {
    cam = new Camera();
    cam.attach(cameraTarget);

    this.source = source;

    String is = ("/Tiles.png");     
    sheet = new SpriteSheet(is, 8);

    System.out.print(source +"");
    load();
}

および Gamescene.java <--- イメージを正常にロードします。

    public class GameScene extends Scene {
private Level level = null;
private Player player = null;

public GameScene() {
    player = new Player();
    level = new Level("/level.png", player);
}

必要に応じて、さらにコードを提供できます。

4

1 に答える 1

3

推測。最初は大文字のイニシャルを使用し、コードでは小文字を使用します。Java は内部的に大文字と小文字を区別しますが、Windows はそうではありません (Linux もそうです)。ケースのマッチングを見てください。

于 2013-03-07T12:53:32.563 に答える