1.1 Java版のDXライブラリを使ってみよう
※前書き
本サイトは、本家でC#版DXライブラリが公開されているにも拘らず、Java版のDXライブラリを使いたい人のためのマニアックなサイトです。
使えない関数は非常に多いですし、まだ「作ってみたらなんか動いた」程度ですので、御了承下さい。
制作は有用性とモチベーションに起因します。
さて、2.1章から紹介しているDXライブラリのDLLをJavaから使えるようにしてみます。
Eclipseのプロジェクトファイル一式をこちらに置きます。
Eclipseを立ち上げ、
「ファイル」>「インポート」>「一般」>「既存プロジェクトをワークスペースへ」を選んで次へ
「参照」から上でダウンロードしたプロジェクトのあるフォルダを選択して完了。
これで既に実行可能になっていますので、Ctrl+F11を押して実行して見ましょう。
ここで src/net.dixq.dxgames.Main を見て下さい。以下のように書かれています。
package net.dixq.dxgames; import jdx.Dx; public class Main { public static void main(String[] args) { Dx.ChangeWindowMode(Dx.TRUE); Dx.DxLibInit(); Dx.SetDrawScreen(Dx.DX_SCREEN_BACK); int Handle, Count = 0; Handle = Dx.LoadGraph("res/images/char.png"); while (Dx.ScreenFlip() == 0 && Dx.ProcessMessage() == 0 && Dx.ClearDrawScreen() == 0) { Dx.DrawRotaGraph(100, (int)(240 + Math.sin(Math.PI * 2 / 240 * Count) * 200), 1.0, 0.0, Handle, Dx.TRUE); Dx.DrawRotaGraph(500, 240, 1.0 + Math.sin(Math.PI * 2 / 120 * Count) * 0.5, 0.0, Handle, Dx.TRUE); Count++; } Dx.DxLibEnd(); } }
これはゲームプログラミングの館3.5章にあるコードをJava版DXライブラリで使えるように書き換えたものです。
ほとんどそのまま書けます。
変わっているのは、DXライブラリの関数や定義の前に"Dx."が付いている程度かと思います。
現在使用可能なDXライブラリの機能は、src/jdx.Dx の中を見れば分かります。この中の「public」の付いているメソッド・定義が使用可能です。
(2012/10/09現在のver.)
public final class Dx {
static {
System.loadLibrary("DxJava");
}
public static native int DxLibInit ();
public static native int DxLibEnd ();
public static native int ChangeWindowMode (int Flag);
public static native int SetDrawScreen (int DrawScreen);
private static native int LoadGraph (byte[] FileName);
public static native int ScreenFlip ();
public static native int ProcessMessage ();
public static native int ClearDrawScreen ();
private static native int DrawString (int x, int y, byte[] string, int Color);
public static native int DrawGraph (int x, int y, int GrHandle, int TransFlag ) ;
public static native int DrawRotaGraph (int x, int y, double ExRate, double Angle, int GrHandle, int TransFlag);
public static native int SetDrawBlendMode (int BlendMode, int BlendParam ) ;
public static native int GetRand (int RandMax ) ;
public static native int SRand (int Seed ) ;
private static native int LoadSoundMem (byte[] FileName);
public static native int PlaySoundMem (int SoundHandle, int PlayType);
public static native int GetColor (int red, int green, int blue);
public static int LoadGraph(String fileName){
try {
byte[] fn = fileName.getBytes(CHAR_CODE);
return LoadGraph(fn);
} catch (UnsupportedEncodingException e) {
return ERROR;
}
}
public static int DrawString(int x, int y, String string, int Color){
try {
return DrawString(x,y,string.getBytes(CHAR_CODE),Color);
} catch (UnsupportedEncodingException e) {
return ERROR;
}
}
public static int LoadSoundMem(String fileName){
try {
return LoadSoundMem(fileName.getBytes(CHAR_CODE));
} catch (UnsupportedEncodingException e) {
return ERROR;
}
}
public static final int ERROR = -1;
public static final int FALSE = 0;
public static final int TRUE = 1;
public static final int DX_SCREEN_FRONT = 0xfffffffc;
public static final int DX_SCREEN_BACK = 0xfffffffe;
public static final int DX_SCREEN_WORK = 0xfffffffd;
public static final int DX_SCREEN_TEMPFRONT = 0xfffffffb;
public static final int DX_BLENDMODE_NOBLEND= 0; // ノーブレンド
public static final int DX_BLENDMODE_ALPHA = 1; // αブレンド
public static final int DX_BLENDMODE_ADD = 2; // 加算ブレンド
public static final int DX_BLENDMODE_SUB = 3; // 減算ブレンド
public static final int DX_BLENDMODE_MUL = 4; // 乗算ブレンド
private static final int DX_PLAYTYPE_LOOPBIT = 0x0002; // ループ再生ビット
private static final int DX_PLAYTYPE_BACKBIT = 0x0001; // バックグラウンド再生ビット
public static final int DX_PLAYTYPE_NORMAL = 0; // ノーマル再生
public static final int DX_PLAYTYPE_BACK = (DX_PLAYTYPE_BACKBIT); // バックグラウンド再生
public static final int DX_PLAYTYPE_LOOP = (DX_PLAYTYPE_LOOPBIT | DX_PLAYTYPE_BACKBIT); // ループ再生
private static final String CHAR_CODE = "Shift-JIS";
private Dx(){}
}
一部メソッドの定義がprivateになっているのは、JavaのStringをDLLで解釈出来るようにするためです。
privateメソッドは同じ関数名で、下にpublicの定義があります。
stringで受け取った物は、Shift-JISにエンコードしてByte配列に変換して渡す必要があるので、一度ラップしています。
Dxを利用する時は、publicの付いた物さえ確認すればOKです。
Portions of this page are modifications
based on work created and shared by Google and used according to terms
described in the Creative Commons 3.0 Attribution License.
- Remical Soft -