合計 昨日 今日

アバター
Dixq (管理人)
管理人
 
記事: 1535
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (567)
日記
- 11月 2017
アンパンマンとバナナ (0)
   2017年11月16日(木) 23:28

+ 10月 2017
+ 9月 2017
+ 8月 2017
+ 7月 2017
+ 6月 2017
+ 5月 2017
+ 4月 2017
+ 3月 2017
+ 2月 2017
+ 1月 2017
+ 12月 2016
+ 11月 2016
+ 10月 2016
+ 9月 2016
+ 8月 2016
+ 7月 2016
+ 6月 2016
+ 5月 2016
+ 4月 2016
+ 3月 2016
+ 2月 2016
+ 1月 2016
+ 12月 2015
+ 11月 2015
+ 10月 2015
+ 9月 2015
+ 8月 2015
+ 7月 2015
+ 6月 2015
+ 5月 2015
+ 4月 2015
+ 3月 2015
+ 2月 2015
+ 1月 2015
+ 12月 2014
+ 11月 2014
+ 10月 2014
+ 9月 2014
+ 8月 2014
+ 7月 2014
+ 6月 2014
+ 5月 2014
+ 4月 2014
+ 3月 2014
+ 2月 2014
+ 1月 2014
+ 12月 2013
+ 11月 2013
+ 10月 2013
+ 9月 2013
+ 8月 2013
+ 7月 2013
+ 6月 2013
+ 5月 2013
+ 4月 2013
+ 3月 2013
+ 2月 2013
+ 1月 2013
+ 12月 2012
+ 11月 2012
+ 10月 2012
+ 9月 2012
+ 8月 2012
+ 7月 2012
+ 6月 2012
+ 5月 2012
+ 4月 2012
+ 3月 2012
+ 2月 2012
+ 1月 2012
+ 12月 2011
+ 11月 2011
+ 10月 2011
+ 9月 2011
+ 8月 2011
+ 7月 2011
+ 6月 2011
+ 5月 2011
+ 4月 2011
+ 3月 2011
+ 2月 2011
+ 1月 2011
+ 12月 2010
+ 11月 2010
+ 10月 2010
フォロー
カテゴリー
日常
1 記事

Java版DXライブラリ制作 .1

パーマリンクby Dixq (管理人) on 2012年10月08日(月) 23:38

C++でプログラムを書いてる時、Boostを使ったりSTLを使ったりして何とかJavaライクに、C#ライクにプログラムを書こうとしますが、

だったら最初からJavaで書けばえぇやん!

ってことで、DXライブラリのJava版を作っている人がいないか探しました。

・・・・結果居ませんでした。

じゃ、作るか。

ってことで作り始めました。

手順としては、

1. まずピュアCでDXライブラリの関数をjni経由で呼べるように宣言し、jniインターフェイスを持ったDXライブラリをDLL化します。
2. 次にJavaからはそのDLLを使えるようにしたnativeメソッドを揃えたクラスを用意し、Javaのコードから参照します。

って感じです。

しかしCでオーバーロードが出来ないことと、デフォルト引数がJavaで使えないことが痛いんですよね・・・。
文字コードの違いがあったり、Stringを色々とCで使えるようにしてあげないといけなかったりと面倒なことは多いようですが、
とりあえずこの連休でゲームプログラミングの館のコードの8割は動くようになりました。
(と言っても目ぼしい関数をいくつか使えるようにしただけなので、使える関数は全体のまだ数%も満たない状況)

まだ作りかけですがEclipseのプロジェクトを一式置いておきます。これだけでJavaからDXライブラリが使えます。
http://dixq.net/blog/12.10.08/DxLibGames.zip

需要は無いでしょうが、DLL側も置いておきます。
http://dixq.net/blog/12.10.08/DxJava.zip

で、結果どうなったかというと、C版コードと、Java版コードをゲームの館3.5章のコードで比較してみます。

[ C++版 ]
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <math.h>
#include "DxLib.h"
 
#define PI 3.141592654f
 
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
    ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );
 
    int Handle, Count = 0;
    Handle = LoadGraph("res/images/char.png" );
 
    while(ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0){
 
        DrawRotaGraph( 100, 240+sin(PI*2/240*Count)*200, 1.0, 0.0, Handle, TRUE );
        DrawRotaGraph( 500, 240, 1.0+sin(PI*2/120*Count)*0.5, 0.0, Handle, TRUE );
        Count++;
 
    }
   
    DxLib_End();
    return 0;
}


[ Java版 ]
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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();
    }
}


うん、割と抵抗なく同じように見える♪

しかし問題はあの膨大なDxLib.hの関数・・・。
まさか手作業であれを全て一つ一つjni化するわけにいきません・・・。
早い所変換ツールでも作ろうかと思います。

ん~・・そんなうまく行くのだろうか・・。構造体を引数に持った関数はとりあえず後にしよう・・。


で、ある程度使えるようになったら公開したいと思いますが・・・需要あるんですかね・・・。
最後に編集したユーザー Dixq (管理人) [ 2012年10月08日(月) 23:46 ], 累計 2 回

コメント数: 5 閲覧数: 27794
コメント

Re: Java版DXライブラリ制作 .1

パーマリンクby トントン on 2012年10月08日(月) 23:44

DXライブラリをswig使ってPerlで動かそうと思ったら
上手くいかず挫折した記憶があります。

ちなみに、需要はあると思います。
(コードタグがC++なところが素敵)
トントン
 
記事: 100
登録日時: 2010年10月16日(土) 21:45
日記: 日記を見る (22)

Re: Java版DXライブラリ制作 .1

パーマリンクby Dixq (管理人) on 2012年10月08日(月) 23:47

需要ありそうなら頑張って作りたいところですw

ちなみに、コードタグは最初Javaにしてたんですが、色が違い過ぎて見にくかったので、「同じ感」を出すためにもC++にしました・・w
アバター
Dixq (管理人)
管理人
 
記事: 1535
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (567)

Re: Java版DXライブラリ制作 .1

パーマリンクby tk-xleader on 2012年10月09日(火) 07:33

C++でJavaライクにコーディングしようという人のために、こんなライブラリがありますよ。

http://pocoproject.org/

まぁ、本当にJavaで書くのよりもは、物足りないといわれればそうですけどね…
アバター
tk-xleader
 
記事: 140
登録日時: 2011年4月23日(土) 01:23
お住まい: 関西某所
日記: 日記を見る (50)

Re: Java版DXライブラリ制作 .1

パーマリンクby Dixq (管理人) on 2012年10月09日(火) 20:03

>tk君
pocoプロジェクトってなんかかわいいねw
出だしちょっと読んだ位だけだと、あんまJavaライクな雰囲気掴めなかったけど、Javaライクなの?
アバター
Dixq (管理人)
管理人
 
記事: 1535
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (567)

Re: Java版DXライブラリ制作 .1

パーマリンクby naohiro19 on 2012年10月16日(火) 15:07

pocoはラテン語系で「わずか少し」という意味があります。(英語のlittleに相当する単語です)
naohiro19
 
記事: 243
登録日時: 2010年10月16日(土) 20:16
お住まい: 愛知県
日記: 日記を見る (110)

オンラインデータ

登録ユーザー: なし