0

私は最近、作成中のゲームの基本を完成させ、それを何人かの友人に送るつもりでしたが、彼らが .jar を開くたびに、それはただの灰色のウィンドウです。画像の取得方法が原因だと思ったと聞いたとき(フルパスを使用しました:C:\Users\etc)。私はいくつかのグーグルを行い、より効率的に見える画像を取得する方法を見つけました.

private static Image[] mobImages =  new Image[1];

public static void loadImages()
{
     mobImages[1] = Handler.loadImage("res/EnemyLv1.png");
}

public static Image getMobImages(int index)
{
     return mobImages[index];
}

それが私が使いたいものです。しかし、私はそれを行い、それをサポートするために残りのコードを変更しました。ゲームを実行するたびに、いくつかのエラーが発生します。どれが戻ってくるか

これ: if(getBounds().intersects(tempEnemy.getBounds()))

おそらく私も画像を取得している方法です。どうすればこれを修正できますか? そして、画像を取得するより良い方法はありますか? いくつか試してみましたが、うまくいきませんでした。

編集:私は最終的にすべてのエラーを解決しました! :D 唯一の問題は、画像が表示されないことです。これが私のコードです。他に助けはありますか?それは素晴らしいでしょう!みんな今まで応援してくれてありがとう!

4

3 に答える 3

1

コードで何がうまくいかないかを言うのは難しいです。ただし、画像ファイルをJavaプロジェクトのパッケージに入れて(JARファイルの一部になるように)、Class.getResource()/ Class.getResourceAsStream()を使用してアクセスすることをお勧めします。これにより、複数の落とし穴を回避し、すべてをまとめることができます。

画像をパッケージに構造化する方法のサンプル:

myproject
  images
    ImageLocator.class
    MyImage1.jpg
    MyImage2.jpg

次に、ImageLocatorクラスは、リソースにアクセスするために相対パス(画像名と拡張子のみ)を使用する必要があります。

public class ImageLocator {
    public final static String IMAGE_NAME1 = "MyImage1.jpg";

    public static Image getImage(final String name) {
        URL url = ImageLocator.class.getResource(name);
        Image image = Toolkit.getDefaultToolkit().createImage(url);
        // ensure the image is loaded
        return new ImageIcon(image).getImage();            
    }
}

これはよりエレガントに行うことができますが、これで始めることができます。ImageLocatorクラスで画像名を定数として定義すると、プロジェクト全体に具体的なパスが広がることを回避できます(ImageLocatorで名前が正しい限り、他のすべてはコンパイラーによってチェックされます)

于 2012-08-06T14:39:09.113 に答える
0

理由の一部として、コードがサイズ 1 の配列の "1" のインデックスを指していることが考えられます。これは、使用可能な唯一のインデックスが実際には "0" であることを意味します。

試すmobImages[0] = Handler.loadImage("res/EnemyLv1.png");

于 2012-08-06T17:19:09.880 に答える
0

あなたのコードは、Enemy.java で「C:\Users\Kids\Desktop\Java Game\Cosmic Defense\res\EnemyLv2.png」を引き続き使用しています。これが存在することは確かですか?Cosmic Defense フォルダーを移動した場合は移動しません。

(絶対パスを相対パスに変更することについて話していたので、これが問題かもしれません)

于 2012-08-06T14:35:03.353 に答える