ページ 11

Java用ゲームライブラリでの画像読み込みについて

Posted: 2013年5月01日(水) 17:49
by 海Sea
いつもありがとうございます。
現在Java用ゲームライブラリを使用した開発を行っているところです。
しかし、どうしても画像の読み込みが、
どの様にパスを指定しても失敗し、エラーが発生してしまいます。
eclipseのプロジェクトには画像を追加しています。
どうパスを設定すればばうまく読み込みが行われるか、ご教授お願いします。

開発環境
・eclipse4.2(pleadesAllinonestandard)
・javaSE 7u21
・JavaSE向けビデオゲームライブラリ

コード:

//コード
package testgame;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;

import videogame.VGCanvas;
import videogame.VGFrame;
import videogame.image.VGImage;

public class Hello extends VGCanvas
{
	VGImage image;

	public Hello()
	{
		Image img = getResourceImage("jiki.png");//ここで読み込む画像を文字列で指定

		image = new VGImage(img,32,0,32,32);

	}

	protected void frameUpdate(int skipped)
	{
	        //
	    //  ゲームの内部状態を1フレーム分進行させる処理をここに書く
	    //
	}


	protected void frameRender(Graphics g)
	{
	    //
	    //  ゲーム画面を描く処理をここに書く
	    //
		g.setColor(Color.BLACK);
		g.fillRect(0, 0, 640, 480);
		image.paint(g,120,240, 0);
	}

    public static void main(String[] args)
        {
	      // 640×480の画面サイズでウインドウに載せて起動する
	      new VGFrame(new Hello(), 640, 480, "ゲーム画面");
	}

	
}

コード:

//エラー内容
Uncaught error fetching image:
java.lang.NullPointerException
	at sun.awt.image.URLImageSource.getConnection(Unknown Source)
	at sun.awt.image.URLImageSource.getDecoder(Unknown Source)
	at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
	at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
	at sun.awt.image.ImageFetcher.run(Unknown Source)


Re: Java用ゲームライブラリでの画像読み込みについて

Posted: 2013年5月01日(水) 18:34
by ISLe
同じJavaでも他のプラットフォームではほとんど意識しないことですが、Javaではクラスパスが重要です。
リソースファイルを検索する際にもクラスパスが意味を持ちます。

Eclipseでは、プロジェクトのプロパティで『Javaのビルド・パス』の『ライブラリー』タブで画像ファイルのあるフォルダを追加してください。

リソース種別ごとにサブフォルダを作って、相対パスを使うこともできます。
例えば
./res/image/jiki.png
というファイルは
クラスパスを ./res として、コードでは image/jiki.png と指定することができます。


ちなみに、Javaコマンドを使って手動で起動するときにアプリケーション固有の設定を行うには-cpオプションを使います。
jarファイルにパッケージするときは、MANIFEST.MFに記述します。

Re: Java用ゲームライブラリでの画像読み込みについて

Posted: 2013年5月01日(水) 21:05
by 海Sea
ISLe さんが書きました:同じJavaでも他のプラットフォームではほとんど意識しないことですが、Javaではクラスパスが重要です。
リソースファイルを検索する際にもクラスパスが意味を持ちます。

Eclipseでは、プロジェクトのプロパティで『Javaのビルド・パス』の『ライブラリー』タブで画像ファイルのあるフォルダを追加してください。

リソース種別ごとにサブフォルダを作って、相対パスを使うこともできます。
例えば
./res/image/jiki.png
というファイルは
クラスパスを ./res として、コードでは image/jiki.png と指定することができます。


ちなみに、Javaコマンドを使って手動で起動するときにアプリケーション固有の設定を行うには-cpオプションを使います。
jarファイルにパッケージするときは、MANIFEST.MFに記述します。

ありがとうございます!
教えて頂いた通りにプロパティの設定をし、
Image img = getResourceImage("image/jiki.png");
としたら、画像を読み込むことができました。
Androidの時はこういう設定が無く、文字列でパス指定をするだけで
読み込みが可能だったので、ひとつ勉強になりました。