DXライブラリ質問&雑談掲示板2
[トップに戻る] [使いかた] [ワード検索] [管理用]
おなまえ
題  名
メッセージ
削除キー (記事削除用。英数字で8文字以内)
クッキー情報を保存

<管理人>
ご返信は一週間に一度、土日のどちらかで行います。平日は時間に余裕があるときだけご返信します。
この掲示板はマルチポスト禁止です。

[5283] ご返信 投稿者:管理人 投稿日:2022/05/06(Fri) 02:01 [返信]
> jirouさん 無事コンパイルできたようで何よりです 削除キーを使用しての記事の削除は、掲示板の一番右下にある入力欄に 記事Noと、その記事を投稿する際に設定した削除キーを入力して『記事削除』ボタンを 押すと記事を削除できます( 投稿の際に削除キーを設定していなかった場合は削除できません )

[5282] Re [5280] ご返信 投稿者:jirou 投稿日:2022/05/05(Thu) 03:43 [返信]
管理人様 恥ずかしい話ですが、再起動すれば正常になりました。 原因はわからないままですが、快適に動作しております。 これで、カメラ画像とDXライブラリを組み合わせて、新しいゲームが作れそうです。 長時間、丁寧、かつ敏速に対応していただいて、本当に有難うございました。 これからもよろしくお願いいたします。 (削除キーの使い方がわからなかったので、前記事を削除できませんでした) jirou

[5281] Re:[5280] ご返信 投稿者:jirou 投稿日:2022/05/04(Wed) 22:21 [返信]
管理人様 対応していただいて、本当に有難うございます。 早速、実行しようとしたのですが、 error c2039:'CAP_PROP_FRAME_WITH':'cvのメンバーでありません' error c2039:'CAP_PROP_FRAME_HEIGT':'cvのメンバーでありません' とエラーが出て、ビルドが出来ないでいます。 色々と試行錯誤しましたが、解決の目途が立たないため、 恥ずかしながら、管理人さんにアドバイスをいただきたく思います。 未熟さを実感したjirou

[5280] ご返信 投稿者:管理人 投稿日:2022/05/04(Wed) 09:26 [返信]
> jirouさん > HD解像度(1920X1080)のカメラを使用したいと思っています。 > 入力解像度を設定できるようにできないでしょうか? 了解です カメラからのキャプチャ解像度と、ウィンドウの表示解像度を1920x1080に設定するようにプログラムを変更してみました ( あと、DrawPixel で1ピクセルづつ描画するのは処理速度的に遅いので、ソフトイメージを介して グラフィックハンドルに画像データを転送してから描画するようにしてみました ) #include "DxLib.h" #include <string.h> #define SCREEN_W 1920 #define SCREEN_H 1080 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { cv::VideoCapture video; cv::Mat image ; int SoftImage = -1 ; int GraphHandle = -1 ; int ImageW = -1, ImageH = -1 ; int i, j ; BYTE *Src, *DestBase, *Dest ; int DestPitch ; // カメラをオープン video.open( 0 ) ; // カメラオープンに失敗したら何もせず終了 if( video.isOpened() == false ) { // カメラが起動しないときは終了する return 0; } // キャプチャ解像度を設定 video.set( cv::CAP_PROP_FRAME_WIDTH, SCREEN_W ) ; video.set( cv::CAP_PROP_FRAME_HEIGHT, SCREEN_H ) ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // 画面サイズを 1920x1080 に設定 SetGraphMode( SCREEN_W, SCREEN_H, 32 ) ; // デスクトップのDPI設定に関係なく等倍表示するように設定 SetWindowSizeExtendRate( 1.0 ) ; // DXライブラリ初期化処理 if( DxLib_Init() == -1 ) return -1; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // メインループ while( ProcessMessage() == 0 ) { // フレームを取得 video >> image ; // フレームの取得に失敗したら何もせずに終了 if( image.empty() ) continue ; // サイズに変更があったか、又はまだソフトイメージやグラフィックハンドルを作成していなかった場合は再作成 if( image.cols != ImageW || image.rows != ImageH || SoftImage < 0 || GraphHandle < 0 ) { // ソフトイメージやグラフィックハンドルが既に作成済みの場合は削除 if( SoftImage >= 0 ) { DeleteSoftImage( SoftImage ) ; } if( GraphHandle >= 0 ) { DeleteGraph( GraphHandle ) ; } // サイズの保存 ImageW = image.cols ; ImageH = image.rows ; // ソフトイメージとグラフィックハンドルを作成 SoftImage = MakeRGB8ColorSoftImage( ImageW, ImageH ) ; GraphHandle = MakeGraph( ImageW, ImageH ) ; } // ソフトイメージとグラフィックハンドルが作成できていたら処理を進める if( SoftImage >= 0 && GraphHandle >= 0 ) { // フレームの内容をソフトイメージに転送 DestBase = ( BYTE * )GetImageAddressSoftImage( SoftImage ) ; DestPitch = GetPitchSoftImage( SoftImage ) ; for( i = 0 ; i < image.rows; i++ ) { Src = &image.data[ image.step1() * i ] ; Dest = DestBase + DestPitch * i + DestPitch - 3 ; for( j = 0 ; j < image.cols ; j++ ) { Dest[ 0 ] = Src[ 0 ] ; Dest[ 1 ] = Src[ 1 ] ; Dest[ 2 ] = Src[ 2 ] ; Dest -= 3 ; Src += 3 ; } } // ソフトイメージの内容をグラフィックハンドルに転送 ReCreateGraphFromSoftImage( SoftImage, GraphHandle ) ; // 画面に画像を描画 SetDrawMode( DX_DRAWMODE_BILINEAR ) ; DrawExtendGraph( 0, 0, SCREEN_W, SCREEN_H, GraphHandle, FALSE ) ; } // 裏画面の内容を表画面に反映 ScreenFlip() ; } // ソフトイメージの削除 if( SoftImage >= 0 ) { DeleteSoftImage( SoftImage ) ; } // 画像の削除 if( GraphHandle >= 0 ) { DeleteGraph( GraphHandle ) ; } // DXライブラリ使用の終了処理 DxLib_End() ; // ソフトの終了 return 0 ; }

[5279] Re:[5278] ご返信 投稿者:jirou 投稿日:2022/05/03(Tue) 08:50 [返信]
管理人様 すみません。 その後、管理人さんのプログラムを異なるカメラで試したところ、 表示画像が640X480に固定されていることがわかりました。 HD解像度(1920X1080)のカメラを使用したいと思っています。 入力解像度を設定できるようにできないでしょうか? お手間を取らせますが、よろしくお願いいたします。 jirou

[5278] Re:[5277] ご返信 投稿者:jirou 投稿日:2022/05/03(Tue) 03:56 [返信]
管理人様 いつもながらの、敏速な対応をしていただき有難うございます。 正常に表示できました。 これからもよろしくお願いいたします。 jirou

[5277] ご返信 投稿者:管理人 投稿日:2022/05/03(Tue) 01:54 [返信]
> jirouさん 私も手元で試してみたのですが、cvCreateCameraCapture を使用する方法は古いのか、 cvCreateCameraCapture の戻り値が NULL となっていて、カメラの初期化に失敗していました cv::VideoCapture を使用する新しい方式( 新しいと言っても何年も前からある機能のようです )を 使用した所、正常にカメラの映像を取得することが出来ました よろしければその際のテストプログラムをお試しになってみてください m(_ _)m #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { cv::VideoCapture video; cv::Mat image ; int i, j ; unsigned char *p ; // カメラをオープン video.open( 0 ); // カメラのオープンに失敗したら何もせず終了 if( video.isOpened() == false ) { // カメラが起動しないときは終了する return 0; } // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリ初期化処理 if( DxLib_Init() == -1 ) return -1; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // メインループ while( ProcessMessage() == 0 ) { // フレームを取得 video >> image ; // フレームの取得に失敗したら何もせずに再ループ if( image.empty() ) continue ; // フレームの内容を画面に描画 for( i = 0 ; i < image.rows; i ++ ) { p = &image.data[ image.step1() * i ] ; for( j = 0 ; j < image.cols ; j ++, p += 3 ) { DrawPixel( j, i, GetColor( p[ 2 ], p[ 1 ], p[ 0 ] ) ) ; } } // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリ使用の終了処理 DxLib_End() ; // ソフトの終了 return 0 ; }

[5276] Webカメラの画像 投稿者:jirou 投稿日:2022/05/01(Sun) 19:17 [返信]
いつも大変お世話になっています。 この度、Webカメラから画像を読み込みたいと思っています。 過去ログから、同様の質問(たろさん(2009/05/15))に対する回答として、 管理人さんのサンプルプログラムがありましたので、 そのまま実行したところ、フレーム枠は表示されるのですが、DrawPixelの行で、 「読み取り中にアクセス違反が発生しました」、「表示できない文字を含んでいます」 というエラーがでます。 画像を表示するには、どうしたらよいでしょうか? DXライブラリは Ver 3.23 、OpenCVは3.0を使用しています。 <管理人さんのサンプルプログラム> #include <cv.h> #include <highgui.h> #include <ctype.h> #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { CvCapture *capture ; IplImage *image ; int i, j ; unsigned char *p ; ChangeWindowMode( TRUE ) ; // ウインドウモードで起動 if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先を裏画面にする capture = cvCreateCameraCapture( 0 ) ; // カメラからのビデオキャプチャを初期化する // メインループ while( ProcessMessage() == 0 ) { image = cvQueryFrame( capture ) ;// フレームを取得 // フレームの内容を画面に描画 for( i = 0 ; i < image->height; i ++ ) { p = ( unsigned char * )( image->imageData + image->widthStep * i ) ; for( j = 0 ; j < image->width ; j ++, p += 3 ) { DrawPixel( j, i, GetColor( p[ 2 ], p[ 1 ], p[ 0 ] ) ) ; } } ScreenFlip() ; // 裏画面の内容を表画面に反映 } cvReleaseCapture( &capture ) ; // ビデオキャプチャの後始末 DxLib_End() ; return 0 ; }

[5275] ご返信 投稿者:管理人 投稿日:2022/04/17(Sun) 16:56 [返信]
> chairoさん > 後日メールで詳細の方をお送りさせていただきたいのですが、ゲームコンテストなどの大会にswordboutのタスクシステム(タスクリスト)とinput システム、バイナリ読み込みシステム、ステージエディタのソースコードを参考・引用したゲームを制作させていただきいたのですが、 > Swordboutのソースコードのライセンスは法人が運営するコンテスト、大会などの引用・使用においても制限されないものとされるのでしょうか? はい、制限はありません > また、コンテスト・ゲームジャムなどの提出時にライセンス表記・管理人様のお名前明記が必要などありましたら是非教えて頂きたいです。 > 宜しくお願い致します。 ライセンス表記についてはこちらをご参照ください m(_ _)m <ライセンスについて> https://dxlib.xsrv.jp/dxlicense.html ↑ こちらには記載がありませんが、 Sword Bout については、DXライブラリと同じく絶対必要というわけではありませんが もし表記していただける際はこちらを記載してください m(_ _)m Copyright(C) 2014 Sword Bout production team > 書籍の要素を理解した先の段階として、Dxlibでシネマティックアクションゲーム(メタルギアソリッドシリーズみたいな)を作るには、C++の高等知識+AI技術の勉強+アルゴリズム設計能力+数学知識+モデル・モーション制作能力の他に何が必要だと思いますか? うーん列挙する形で何が必要か、となるとちょっと漠然としていてお答えし難いですが、 サウンドを自作するのでしたらサウンド作成の能力、素材集などを使用するということでしたら素材選定能力でしょうか… あとゲーム用のツールが無いと開発効率が非常に悪くなりますので、ツール作成能力も必要です あとはゲーム設計能力が一番重要かと思います 技術があっても面白いと思えるゲーム内容を考えられなくて、習作的なものを作って頓挫、というのは非常によくあることですので… ( 逆にゲーム設計能力がある方はあまり技術が無くてもなんとかゲームを形にしてしまったりします )

[5274] 無題 投稿者:chairo 投稿日:2022/04/16(Sat) 19:09 [返信]
雑談ですが、C++を理解してC#を理解するよりC++の理解の方が早いと感じ、既存のC++ゲーム制作書籍でメタルギアソリッドのような経路探索を使用したゲームを制作しています。 基本このような3Dアクションゲーム+AI+経路探索のソースコードは公開されていないので、オライリーのゲームAIやゲーム数学の書籍を買い漁って勉強してますが、 書籍の要素を理解した先の段階として、Dxlibでシネマティックアクションゲーム(メタルギアソリッドシリーズみたいな)を作るには、C++の高等知識+AI技術の勉強+アルゴリズム設計能力+数学知識+モデル・モーション制作能力の他に何が必要だと思いますか? あと、昔管理人様にはTPSカメラの製作を質問して、その果てに自分のゲームのバグの直し方が分からなくてかなり無茶苦茶な質問をした事を今になって恥じています… あの時はお世話になりました&すみませんでした….

[5273] Re:[5272] 無題 投稿者:chairo 投稿日:2022/04/16(Sat) 18:59 [返信]
> 管理人様、お世話になります。 > 後日メールで詳細の方をお送りさせていただきたいのですが、ゲームコンテストなどの大会にswordboutのタスクシステム(タスクリスト)とinput システム、バイナリ読み込みシステム、ステージエディタのソースコードを参考・引用したゲームを制作させていただきいたのですが、 > Swordboutのソースコードのライセンスは法人が運営するコンテスト、大会などの引用・使用においても制限されないものとされるのでしょうか? > お忙しい中恐縮ですが、ご確認をお願いしたいです。 また、コンテスト・ゲームジャムなどの提出時にライセンス表記・管理人様のお名前明記が必要などありましたら是非教えて頂きたいです。 宜しくお願い致します。

[5272] 無題 投稿者:chairo 投稿日:2022/04/16(Sat) 18:51 [返信]
管理人様、お世話になります。 後日メールで詳細の方をお送りさせていただきたいのですが、ゲームコンテストなどの大会にswordboutのタスクシステム(タスクリスト)とinput システム、バイナリ読み込みシステム、ステージエディタのソースコードを参考・引用したゲームを制作させていただきいたのですが、 Swordboutのソースコードのライセンスは法人が運営するコンテスト、大会などの引用・使用においても制限されないものとされるのでしょうか? お忙しい中恐縮ですが、ご確認をお願いしたいです。

[5271] ご返信 投稿者:管理人 投稿日:2022/02/23(Wed) 01:41 [返信]
> はしもとさん 了解しました 少しやり取りが長くなりそうなのでスレッド式掲示板の方にスレッドを立てました ご返信もこちらにしましたので、問題なければ以降はこちらのスレッドでできればと思います m(_ _)m https://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=5284

[5270] 無題 投稿者:はしもとさん 投稿日:2022/02/22(Tue) 10:26 [返信]
管理人さん dxライブラリを使っています。 C++言語ですが、C言語で行いたいです。 MV1DrawModelを使ってみます。 将棋盤と駒はどのように位置づけて、描画すればよろしいでしょうか。

[5269] ご返信 投稿者:管理人 投稿日:2022/02/22(Tue) 00:26 [返信]
> はしもとさん 了解です。 すみません、一つ確認なのですが、こちらはDXライブラリの質問掲示板です 3Dオブジェクトの表示の仕方をC++言語とDXライブラリを使用して 行いたいということでしょうか? ( 因みにメタセコイアで作成したモデルファイルはDXライブラリの関数 MV1LoadModel で読み込み、  関数 MV1DrawModel で描画できます )

[5268] 無題 投稿者:はしもとさん 投稿日:2022/02/21(Mon) 10:08 [返信]
> 管理人さん プログラム環境は整っています。 3Dのオブジェクトの置き方だけでもいいのですが、例えば空間座標の 認識とかを、簡易的でいいので、分かりますでしょうか。

[5267] ご返信 投稿者:管理人 投稿日:2022/02/19(Sat) 02:01 [返信]
> はしもとさん > どこから手をつけていいかわからず、簡単に手順とかは > 分かりますか。 すみません、将棋のゲームは作成したことが無いので、私も手順は分かりません > directxはすでに動いています。 DirectX を使用したプログラムを実行するためのプログラミング環境は整っているということでしょうか?

[5266] 将棋のゲーム 投稿者:はしもとさん 投稿日:2022/02/17(Thu) 18:18 [返信]
将棋のゲームを3Dで、作成したいと思っています。 メタセコイアにより、盤面を作りたいと思います。 どこから手をつけていいかわからず、簡単に手順とかは 分かりますか。directxはすでに動いています。

[5265] あけましておめでとうございます 投稿者:管理人 投稿日:2022/01/02(Sun) 22:40 [返信]
今年もマイペースで開発を続けます ただ、アクションRPGのフリーゲーム ASTLIBRA の商用版( ASTLIBRA Revision )の開発に 携わることになりました関係で、ASTLIBRA Revesion の開発中に見つかったDXライブラリの バグの修正や、必要になった機能の追加が反映されることになると思います (・・; ( 去年の画像読み込み速度高速化や非同期読み込みのバグ修正などはその一例です ) > draさん ご返信が大変遅くなり申し訳ありません DXライブラリ Linux版! 手元に Linux環境が無いので試すことはできませんが、凄いです…! 現在のDXライブラリのソースは一応マルチプラットフォーム用の作りになっているとはいえ、 かなり面倒だったのではないでしょうか…? お疲れさまでした m(_ _;m ( OpenGL ES の互換性は凄いですよね、iOS版の DxGraphicsiOS.cpp も殆ど DxGraphicsAndroid.cpp のコピペです… ) 今の所DXライブラリ Linux版を私の方でリリースする予定は無いのですが、もし将来 Linux版を リリースすることになった際には参考にさせていただきます m(_ _;m ( 参考どころかそのまま コードを使用させていただく部分が殆どになるかもしれませんが… ) > メンテナンスお疲れ様です > DXライブラリのバグと思われる部分がありましたので直していただければ幸いです ありがとうございます! pre-0001 - pre-0004 の修正を反映させていただきました! m(_ _)m

[5264] アドベントカレンダー 投稿者:dra 投稿日:2021/12/29(Wed) 21:59 [返信]
ばんわ AdC書いてみました DXライブラリをLinuxへ移植してみた qiita.com/dragoon2014/items/04f809868fc77f57742a 管理人さんへ メンテナンスお疲れ様です DXライブラリのバグと思われる部分がありましたので直していただければ幸いです github.com/dragoon2014/dxlib-for-linux 内の各 pre-*.patch (0004はバグと言うよりは依存関係の削減、vorbisは諦めた) 差分のベースは3.22eですが3.23でも残ってました

[5263] ご返信 投稿者:管理人 投稿日:2021/12/17(Fri) 02:27 [返信]
> kanamaruさん > 今のところ僕しか記事を書いていないんですけどやっぱり人気ないんですか? ライブラリのダウンロード数を集計していない上に特にエゴサーチ等もしていないので 人気が無いのかあるのかは把握していませんが、アドベントカレンダーに投稿される方が 少ないのは今年に限ったことではありません 個人的にはDXライブラリを使用されている方が一番多かったのは 2010年頃で、 その後はどんどん右肩下がりで使用されている方もかなり減ったような気がしているのですが 掲示板へのご質問の数などは以前とあまり変わっていないという状態です > 一人何個まで書いていいものなんでしょうか? 少し見てみた所、一人で25個記事を書かれているカレンダーもあったので、 投稿記事数に制限は無いようです

[5262] アドベントカレンダーについて 投稿者:kanamaru 投稿日:2021/12/15(Wed) 22:13 [返信]
今年もアドベントカレンダーの時期でなんですけど、 今のところ僕しか記事を書いていないんですけどやっぱり人気ないんですか? 一人だけしか記事を書いていないと寂しすぎるのですが。 誰か一個でいいので書いてくれないかなー。 それともさらに記事を書くか。もうすでに去年と同じ記事3つ書いているんですが…。 一人何個まで書いていいものなんでしょうか?

[5261] DXライブラリ 3.23 をアップしました 投稿者:管理人 投稿日:2021/11/27(Sat) 21:50 [返信]
今回はバグ修正がメインです ( あと Visual Studio Community 2022 でDXライブラリを使う手順のページを追加しました ) 一番致命的なバグがこちらで ・Windows版:Windows7 で XInput 対応の Xboxコントローラー以外のコントローラーを使用するとメモリの不正なアクセスが発生してしまうバグを修正。 Windows7 で XInput非対応のゲームパッドを接続していると DxLib_Init でエラー終了してしまうというものです なので、お手数で申し訳ありませんが、Ver3.22e をお使いの方は 3.23 に更新して頂ければと思います m(_ _;m その他の更新に着いてはこちらをご参照ください m(_ _)m <DXライブラリ更新履歴> https://dxlib.xsrv.jp/dxlog.html

[5260] ご返信 投稿者:管理人 投稿日:2021/11/23(Tue) 07:14 [返信]
> lego hasiriさん > 今年もアドベントカレンダーの季節がやってまいりました。 おお、もうそんな時期なんですね 一年経つのが早いですね… (・・;

[5259] 2021アドベントカレンダー 投稿者:lego hasiri 投稿日:2021/11/20(Sat) 03:34 [返信]
今年もアドベントカレンダーの季節がやってまいりました。 ないのも個人的に寂しいので、(書く人がいるかは置いといて)とりあえず作っておきました。 書く気がある人や暇な人はぜひ。 僕は頑張って書きます。 qiita.com/advent-calendar/2021/dxlib

[5258] ご返信 投稿者:管理人 投稿日:2021/11/14(Sun) 06:56 [返信]
> Dixqさん なんと、JNI呼び出しのオーバーヘッドは軽かったのですね… 問題が解決したようで何よりです > もしほぼフルKotlinでゲームが作れたらまた報告に来ますね。 楽しみにさせていただきます (^ ^

[5257] Re:[5256] [5255] ご返信 投稿者:Dixq 投稿日:2021/11/12(Fri) 20:24 [返信]
う、どうもおかしいと思って調べてみると、他の処理に不正なボトルネックがあっただけで JNIの呼び出しにはほとんど時間がかかっていませんでした。。。 わざわざ間違ったネタ投下しに来たみたいですみませんm(_ _;)m でも、独自プロトコルを作る発想はどこかで活かせるかもしれません。 もしほぼフルKotlinでゲームが作れたらまた報告に来ますね。

[5256] Re:[5255] ご返信 投稿者:Dixq 投稿日:2021/11/12(Fri) 12:37 [返信]
なるほど! さすが管理人さん、発想が柔軟ですね! つまりWebの通信プロトコルみたいに、独自プロトコル決めちゃうってことですね。 1byte目はこの意味、 2byte目はこの意味・・という独自のDxLibJNIプロトコルなるものを決め、 10万回の描画にまつわるあらゆる命令を全てbyte配列にして連結して シリアライズしてKotlin⇒C++に1回の関数コールで送り、 C++側でデシリアライズして命令を解釈する・・。 こうすれば、どんなに複雑で大量な命令でも1度の関数コールで行えるので JNIのオーバーヘッドが減らせそうです。 >ただ、仮に上記のような関数を実装しても、Kotlin 上の配列を C++ 側に送るオーバーヘッドが大きかった場合はやはり遅いかもしれませんが… プロトコルを作って実装するのちょっと大変そうですが、 10万バイトの配列呼び出しにかかる時間の測定とかならすぐできそうですね。 まぁ・・ここまで大変なことするならおとなしくC++で書けってことになるかもしれませんが・・(^^; KotlinでDxLib使えるようになったら(わずかかもしれませんが)需要あるかもしれませんし、 フレームワークの実装検討してみます!

[5255] ご返信 投稿者:管理人 投稿日:2021/11/12(Fri) 01:53 [返信]
> Dixqさん お久しぶりです! Kotlin は Java VM 上で動作するので C++ の関数の呼び出しには Java と同じく JNI を経由 しなければならないので遅いのですね… JNI 呼び出しのオーバーヘッドが問題なのでしたら、以下のような関数を用意したら 高速になるかもしれませんね (^_^; ( ただ、Kotlin 側から C++ 側にintの配列を渡すような仕組みがあればですが… ) int DrawGraphSet( int *SetData, int SetNum ) ; SetData のポインタには以下のような情報を入れます SetData[ 0 ] : 1つ目の DrawGraph の x 座標 SetData[ 1 ] : 1つ目の DrawGraph の y 座標 SetData[ 2 ] : 1つ目の DrawGraph のグラフィックハンドル SetData[ 3 ] : 1つ目の DrawGraph の透過フラグ SetData[ 4 ] : 2つ目の DrawGraph の x 座標 SetData[ 5 ] : 2つ目の DrawGraph の y 座標 SetData[ 6 ] : 2つ目の DrawGraph のグラフィックハンドル SetData[ 7 ] : 2つ目の DrawGraph の透過フラグ SetData[ 8 ] : 3つ目の DrawGraph の x 座標 SetData[ 9 ] : 3つ目の DrawGraph の y 座標 SetData[ 10 ] : 3つ目の DrawGraph のグラフィックハンドル SetData[ 11 ] : 3つ目の DrawGraph の透過フラグ . . . SetNum の数だけ続く… ただ、上記の場合は DrawGraph しか使えないので、もっと本格的に以下のような関数の方が良いですかね… (・・; int DrawBatch( int *BatchData, int DataNum ) ; BatchData の内容 BatchData[ 0 ] : 1つ目の処理の識別番号( 0:DrawGraph 1:DrawExtendGraph 2:DrawRotaGraph 3:DrawModiGraph 4:SetDrawBlendMode 5:SetDrawMode 7:SetDrawArea 6:SetDrawScreen ) BatchData[ 1 ] : 1つ目の処理で指定した関数の第1引数 BatchData[ 2 ] : 1つ目の処理で指定した関数の第2引数 BatchData[ 3 ] : 1つ目の処理で指定した関数の第3引数 . . . BatchData[ n ] : 2つ目の処理の識別番号 BatchData[ n + 1 ] : 2つ目の処理で指定した関数の第1引数 BatchData[ n + 2 ] : 2つ目の処理で指定した関数の第2引数 . . . . . DataNum の数だけ続く ただ、仮に上記のような関数を実装しても、Kotlin 上の配列を C++ 側に送るオーバーヘッドが大きかった場合はやはり遅いかもしれませんが…

[5254] Kotlinでゲーム製作 投稿者:Dixq 投稿日:2021/11/12(Fri) 00:30 [返信]
お久しぶりです。雑談しに来ました。 ながらくKotlinを使っていてC++を触っていなかったせいで、 どうもC++を書くと厄介に感じてしまいて・・。 そこで、DxLibのメソッドの呼び出しを一つ一つJNIにし、 ゲームプログラムの本体を全てKotlinで書いてしまってはどうかと思って、 パフォーマンスを測定するためのテストプロジェクトを作って比較してみました。 GalaxyNote10+にて1万個、10万個の弾を描画する処理にかかった時間は以下の通りでした。 [Kotlin] 1万 = 103 ms 10万 = 13794 ms [C++] 1万 = 9 ms 10万 = 96 ms 結果を見ると、JNIの膨大な呼び出しがボトルネックになっているのか10倍以上処理時間が異なりました。 しかも何故か、数が増えると時間が指数関数的に増える・・。 1フレームにこんなに時間がかかってはちょっとゲームにならないですね。 頑張ってC++でコーディングするしかないですかね・・。

記事No 削除キー

- Aska BBS -