トップページ > 記事閲覧
Radial Gradient
名前:Beginner 日時: 2023/09/24 02:15

こんにちは。 円形のグラデーションを実装したいのですが、難しいです。円形のグラデーションを描く方法はありますか?中心座標は画面サイズの半分に設定しています(ScreenWidth / 2、ScreenHeight / 2)。 for文で円を描く方法が分かりません。 数学式が必要ですか? グラデーションが滑らかでなくても大丈夫です。 for (auto i = 0; i < 360; ++i) { auto angle = i * (DX_PI_F / 180.0F); x = ? y = ? } xとyをどうすればいいでしょうか? 以下は線形グラデーション(Linear-Gradient)コードです。VERTEX2Dを応用して作る方法が分かりません。 ================================================== DrawLinearGradient2D(const int x1, const int y1, const int x2, const int y2, const unsigned int startColor, const int startAlpha, const unsigned int endColor, const int endAlpha, const int alpha, const eGradientDirection dir) const noexcept { int start_red, start_green, start_blue; DxLib::GetColor2(startColor, &start_red, &start_green, &start_blue); int end_red, end_green, end_blue; DxLib::GetColor2(endColor, &end_red, &end_green, &end_blue); DxLib::VERTEX2D Vertex[6]; DxLib::SetDrawBlendMode(DX_BLENDMODE_ALPHA, alpha); switch (dir) { case eGradientDirection::Left: { Vertex[0].pos = DxLib::VGet(x1, y1, 0.0F); Vertex[0].rhw = 1.0F; Vertex[0].dif = { (unsigned char)start_red, (unsigned char)start_green, (unsigned char)start_blue, (unsigned char)startAlpha }; Vertex[0].u = 0.0F; Vertex[0].v = 0.0F; Vertex[1].pos = DxLib::VGet(x2, y1, 0.0F); Vertex[1].rhw = 1.0F; Vertex[1].dif = { (unsigned char)end_red, (unsigned char)end_green, (unsigned char)end_blue, (unsigned char)endAlpha }; Vertex[1].u = 0.0F; Vertex[1].v = 0.0F; Vertex[2].pos = DxLib::VGet(x1, y2, 0.0F); Vertex[2].rhw = 1.0F; Vertex[2].dif = { (unsigned char)start_red, (unsigned char)start_green, (unsigned char)start_blue, (unsigned char)startAlpha }; Vertex[2].u = 0.0F; Vertex[2].v = 0.0F; Vertex[3].pos = DxLib::VGet(x2, y2, 0.0F); Vertex[3].rhw = 1.0F; Vertex[3].dif = { (unsigned char)end_red, (unsigned char)end_green, (unsigned char)end_blue, (unsigned char)endAlpha }; Vertex[3].u = 0.0F; Vertex[3].v = 0.0F; Vertex[4] = Vertex[2]; Vertex[5] = Vertex[1]; } break; case eGradientDirection::Right: { Vertex[0].pos = DxLib::VGet(x1, y1, 0.0F); Vertex[0].rhw = 1.0F; Vertex[0].dif = { (unsigned char)end_red, (unsigned char)end_green, (unsigned char)end_blue, (unsigned char)endAlpha }; Vertex[0].u = 0.0F; Vertex[0].v = 0.0F; Vertex[1].pos = DxLib::VGet(x2, y1, 0.0F); Vertex[1].rhw = 1.0F; Vertex[1].dif = { (unsigned char)start_red, (unsigned char)start_green, (unsigned char)start_blue, (unsigned char)startAlpha }; Vertex[1].u = 0.0F; Vertex[1].v = 0.0F; Vertex[2].pos = DxLib::VGet(x1, y2, 0.0F); Vertex[2].rhw = 1.0F; Vertex[2].dif = { (unsigned char)end_red, (unsigned char)end_green, (unsigned char)end_blue, (unsigned char)endAlpha }; Vertex[2].u = 0.0F; Vertex[2].v = 0.0F; Vertex[3].pos = DxLib::VGet(x2, y2, 0.0F); Vertex[3].rhw = 1.0F; Vertex[3].dif = { (unsigned char)start_red, (unsigned char)start_green, (unsigned char)start_blue, (unsigned char)startAlpha }; Vertex[3].u = 0.0F; Vertex[3].v = 0.0F; Vertex[4] = Vertex[2]; Vertex[5] = Vertex[1]; } break; case eGradientDirection::Top: { Vertex[0].pos = DxLib::VGet(x1, y1, 0.0F); Vertex[0].rhw = 1.0F; Vertex[0].dif = { (unsigned char)start_red, (unsigned char)start_green, (unsigned char)start_blue, (unsigned char)startAlpha }; Vertex[0].u = 0.0F; Vertex[0].v = 0.0F; Vertex[1].pos = DxLib::VGet(x2, y1, 0.0F); Vertex[1].rhw = 1.0F; Vertex[1].dif = { (unsigned char)start_red, (unsigned char)start_green, (unsigned char)start_blue, (unsigned char)startAlpha }; Vertex[1].u = 0.0F; Vertex[1].v = 0.0F; Vertex[2].pos = DxLib::VGet(x1, y2, 0.0F); Vertex[2].rhw = 1.0F; Vertex[2].dif = { (unsigned char)end_red, (unsigned char)end_green, (unsigned char)end_blue, (unsigned char)endAlpha }; Vertex[2].u = 0.0F; Vertex[2].v = 0.0F; Vertex[3].pos = DxLib::VGet(x1, y2, 0.0F); Vertex[3].rhw = 1.0F; Vertex[3].dif = { (unsigned char)end_red, (unsigned char)end_green, (unsigned char)end_blue, (unsigned char)endAlpha }; Vertex[3].u = 0.0F; Vertex[3].v = 0.0F; Vertex[4] = Vertex[2]; Vertex[5] = Vertex[1]; } break; case eGradientDirection::Bottom: { Vertex[0].pos = DxLib::VGet(x1, y1, 0.0F); Vertex[0].rhw = 1.0F; Vertex[0].dif = { (unsigned char)end_red, (unsigned char)end_green, (unsigned char)end_blue, (unsigned char)endAlpha }; Vertex[0].u = 0.0F; Vertex[0].v = 0.0F; Vertex[1].pos = DxLib::VGet(x2, y1, 0.0F); Vertex[1].rhw = 1.0F; Vertex[1].dif = { (unsigned char)end_red, (unsigned char)end_green, (unsigned char)end_blue, (unsigned char)endAlpha }; Vertex[1].u = 0.0F; Vertex[1].v = 0.0F; Vertex[2].pos = DxLib::VGet(x1, y2, 0.0F); Vertex[2].rhw = 1.0F; Vertex[2].dif = { (unsigned char)start_red, (unsigned char)start_green, (unsigned char)start_blue, (unsigned char)startAlpha }; Vertex[2].u = 0.0F; Vertex[2].v = 0.0F; Vertex[3].pos = DxLib::VGet(x2, y2, 0.0F); Vertex[3].rhw = 1.0F; Vertex[3].dif = { (unsigned char)start_red, (unsigned char)start_green, (unsigned char)start_blue, (unsigned char)startAlpha }; Vertex[3].u = 0.0F; Vertex[3].v = 0.0F; Vertex[4] = Vertex[2]; Vertex[5] = Vertex[1]; } break; default: { return; } break; } DxLib::DrawPolygon2D(Vertex, 2, DX_NONE_GRAPH, FALSE); DxLib::SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0); DxLib::ClearDrawScreenZBuffer(); // Reset }
メンテ

Page: 1 | 2 |

Re: Radial Gradient ( No.13 )
名前:管理人 日時:2023/10/14 12:38

手元の環境で韓国語(949)環境で試した所、空白の追加ができない現象を再現できました ユニコード文字セットではない場合に DX_CHARCODEFORMAT_UHC を指定しても□□□□になってしまう問題と 併せて修正しましたので、よろしければこちらの修正版をお試しください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 11.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
メンテ
Re: Radial Gradient ( No.14 )
名前:Beginner (解決) 日時:2023/10/28 01:01

確認がとても遅かった。 本当にありがとうございます。
メンテ
Re: Radial Gradient ( No.15 )
名前:Beginner 日時:2024/01/26 23:17

こんにちは。 お久しぶりです。 翻訳を使ったので、語法が変かもしれません。 予めご了承ください。 1. DrawObtainStringを使用しています。 より正確な使い方を知りたいので質問します。 関数はWindowのサイズに基づいて次の行に進むようです。 Windowが640x480のときに640の場合、次の行に進むようです。 ユーザーが定義したサイズ(ゾーン)を設定して使用したいと思います。 たとえば、Window は 640x480 ですが、X 座標 100 から始まり、テキストが 320 に到達した場合 (指定された X 座標)、次の行に移動したいと思います。 2. MakeShadowMapに関する質問です。 現在Windowでのみ利用可能と表記されていますが、今後AndroidまたはiOSをサポートする予定はありますか? 3. LoadSoundMem の BufferNum はどのような用途に使用されますか? デフォルトは3になっていますが、どの用途なのかよくわかりません。
メンテ
Re: Radial Gradient ( No.16 )
名前:管理人 日時:2024/01/27 17:14

> 1. DrawObtainStringを使用しています。 より正確な使い方を知りたいので質問します。 >  関数はWindowのサイズに基づいて次の行に進むようです。 Windowが640x480のときに640の場合、 > 次の行に進むようです。 ユーザーが定義したサイズ(ゾーン)を設定して使用したいと思います。 >  たとえば、Window は 640x480 ですが、X 座標 100 から始まり、テキストが 320 に到達した場合 >  (指定された X 座標)、次の行に移動したいと思います。 SetDrawArea で描画範囲を指定することで、DrawObtainsString で改行される範囲を設定することができます https://dxlib.xsrv.jp/function/dxfunc_graph3.html#R4N3 > 2. MakeShadowMapに関する質問です。 現在Windowでのみ利用可能と表記されていますが、今後AndroidまたはiOSをサポートする予定はありますか? 今後対応する可能性はありますが、今のところ対応作業をする予定はありません > 3. LoadSoundMem の BufferNum はどのような用途に使用されますか? デフォルトは3になっていますが、どの用途なのかよくわかりません。 同時に再生することができる数が BufferNum となります 例えば爆弾が爆発する音の再生時間が4秒だった場合、 PlaySoundMem で爆発音を再生してから4秒経過せずに再度 PlaySoundMem で爆発音を再生した場合、 BufferNum が 1 の場合は最初に再生した爆発音が停止して、爆発音が最初から再生されます BufferNum が 2 の場合は最初に再生した爆発音が停止せず、追加で爆発音が最初から再生されます( 2つの爆発音が重なって再生されます )
メンテ
Re: Radial Gradient ( No.17 )
名前:Beginner 日時:2024/05/05 01:06

こんにちは。 GetJoypadDirectInputStateに関する質問があります。 GetJoypadDirectInputStateでXInput(XBOX 360/One)になったJoypadの値を取得する時、LT(L1)とRT(R1)の値を区別したいです。 Z変数に-1000~0~1000になっていて、LTとRTのどちらを押したのか区別が難しいようです。 LTを最後まで押すと-1000ですが、ここでRTを押すとその間の値になります。 しかし、これはLTを少し押したのと同じなので、区別が必要だと思います。 GetJoypadXInputStateを使用していないのは、Android環境でも機能する必要があるためです。 リファレンスはWindows用に見えます。 WindowsはDIJOYSTATE2を活用すれば可能に見えますが、もしJoypadによって設定値が異なる場合もありますか? だとしたら、とても複雑になりそうですね… まず可能な作業かどうか答えを聞きたいです。
メンテ
Re: Radial Gradient ( No.18 )
名前:管理人 日時:2024/05/05 03:23

残念ながら GetJoypadDirectInputState で LT(L1)とRT(R1)の値を区別することはできません これは DirectInput の仕様なので、DXライブラリ側ではどうすることもできません > WindowsはDIJOYSTATE2を活用すれば可能に見えますが、もしJoypadによって設定値が異なる場合もありますか? だとしたら、とても複雑になりそうですね… JOYSTATE2 を使用しても LT(L1)とRT(R1)の値を区別することはできません
メンテ
Re: Radial Gradient ( No.19 )
名前:Beginner 日時:2024/05/08 00:42

残念です...答えありがとうございます。
メンテ
Re: Radial Gradient ( No.20 )
名前:Beginner 日時:2024/05/11 17:12

こんにちは。毎度失礼します。Androidに関する質問があります。 Android 13(Tiramisu)をターゲットに開発を進めています。 NDK最新バージョンを使用しており、テスト機種はS20FEです。 //dxlib.xsrv.jp/lecture/Android/Android_Java_Storage_AndroidStudio.htmlに書かれているREAD_EXTERNAL_STORAGEとWRITE_EXTERNAL_STORAGEはAndroid 13からは権限を要求することができません。 そこで、READ_MEDIA_IMAGESとREAD_MEDIA_VIDEOの権限を要求しました。 "storage/emulated/0/Download"にアクセスできることは確認しました。 しかし、ファイルの読み込みに失敗してどうしたらいいのか質問します。 std::ifstreamとstd::ofstreamを利用してファイルの読み書きをしようとしています。 ofstreamでファイルを作成した後、ifstreamで読み込むことは可能ですが、既に存在するファイルは読み込めないようです。 既に存在するファイルを読み込む時、FILEポインタやifstreamを利用してデバッグするとnullが割り当てられます。 例のFileRead_sizeも-1を返します。新しく生成した後、読み取りだけ可能なようです。 assetsにファイルを含めて読むのもいいですが、ライセンスがかかっていて、一緒に配布するのが難しい状況です。 それで、ユーザーがStorageにダウンロードしたファイルを読んで使おうと思います。 Android開発は初めてなので、どの部分からアプローチしたらいいのか分かりません。
メンテ
Re: Radial Gradient ( No.21 )
名前:管理人 日時:2024/05/11 23:16

> assetsにファイルを含めて読むのもいいですが、ライセンスがかかっていて、一緒に配布するのが難しい状況です。 > それで、ユーザーがStorageにダウンロードしたファイルを読んで使おうと思います。 Android ではソフト固有のファイル以外の外部のファイルへのアクセスが非常に厳しく制限されているようです ( 昔は気軽にアクセスできたのですが、悪用などが多かったりしてどんどん厳しくなっていったのかもしれません ) こちらに Android 12 までのファイルアクセスに関する変遷が詳しく記載されていましたのでよろしければ ご覧になってみてください <Androidのファイルストレージに関する仕様の整理> https://qiita.com/aqua_ix/items/213c470d5c49c52686ba こちらの記事によると外部ファイルのアクセスには Media Store API や Storage Access Framework といった APIを使用する必要がありそうです なので C、C++ で馴染みのある fopen や std::ifstream 等での外部ファイルのアクセスは難しそうです…
メンテ
Re: Radial Gradient ( No.22 )
名前:Beginner 日時:2024/05/12 18:55

回答ありがとうございます。 バージョンが高くなるほど権限が厳しくなっていますね。 さらに調べてみるとMANAGE_EXTERNAL_STORAGEというものがありますが、Googleで推奨していない方法ですね。 お知らせいただいた内容を参考にして、様々な方法を試してみようと思います。
メンテ
Re: Radial Gradient ( No.23 )
名前:Beginner 日時:2024/05/14 01:11

すごく複雑でしたが、教えていただいたSAF方式を使って解決しました。 原理は簡単でした。 ユーザーからディレクトリを選択してもらい、アクセスできる権限を取得します。 その後、アプリの内部ストレージにファイルを移動して使用します。 誰かが見てくれるかもしれないので、大まかなコードを書きます。 コメントは英語で書きました。私の能力では出来ませんでしたが、データが多い場合フリーズする場合があるので、バックグラウンドで動作するようにしたらいいと思います。 Appを開く度にフォルダ選択ウィンドウが出るので、ユーザーエクスペリエンスとしては良くないようです。 ===== MainActivity.java ===== @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // selects a directory // onActivityResult~~ Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); startActivityForResult(intent, 1); } protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // success? if (requestCode == 1 && resultCode == Activity.RESULT_OK) { if (data != null) { // get uri Uri uri = data.getData(); if (uri != null) { // move Files to internal storage (/storage/emulated/0/Android/data/{package}/files/) try { moveFilesToInternalStorage(uri); } catch (IOException e) { // error e.printStackTrace(); Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); } } } } } private void moveFilesToInternalStorage(Uri treeUri) throws IOException { // Create DocumentFile instance DocumentFile selectedFolder = DocumentFile.fromTreeUri(this, treeUri); // call methods to copy to inernal storage try { copyFileOrDirectory(selectedFolder, getExternalFilesDir(null)); Toast.makeText(this, "The file has been moved to internal storage", Toast.LENGTH_SHORT).show(); } catch (Exception e) { // error Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); } } private void copyFileOrDirectory(DocumentFile srcDir, File dstDir) throws IOException { for (DocumentFile file : srcDir.listFiles()) { if (file.isDirectory()) { // Create new directory File newDir = new File(dstDir, file.getName()); if (!newDir.exists()) { newDir.mkdirs(); // new directory } // recursive copyFileOrDirectory(file, newDir); } else { // copy files copyFile(file, new File(dstDir, file.getName())); } } } private void copyFile(DocumentFile sourceFile, File destFile) throws IOException { try (InputStream in = getContentResolver().openInputStream(sourceFile.getUri()); OutputStream out = new FileOutputStream(destFile)) { byte[] buffer = new byte[1024]; int length; while ((length = in.read(buffer)) > 0) { out.write(buffer, 0, length); } } } ========== ===== Main.cpp ===== char path[256]; DxLib::GetInternalDataPath(path, 256); char temp[256]; snprintf(temp, 256, "%s/your_file.extension", path); if (std::ifstream br{ temp, std::ifstream::in | std::ifstream::binary }; br.is_open()) { // logic br.close(); } ========== 上記のように使います。
メンテ
Re: Radial Gradient ( No.24 )
名前:管理人 日時:2024/05/15 03:12

SAF方式で解決したとのことで何よりです 参考用のコードもありがとうございます、丁寧なコードで非常に分かりやすいです
メンテ
Re: Radial Gradient ( No.25 )
名前:Beginner 日時:2024/05/22 21:01

こんにちは。いつもお世話になっております。 Joypadの関連質問があります。 1) 現在、リファレンスによると、振動機能はWindowsのみ可能ですが、Androidのサポート計画はありますか? Joypadが振動モーターを持っていますが、使用できないのが残念です。 Androidの権限で難しいのでしょうか? Vibrator_vibrate関数で振動を与える方法もありますが、Bracket(取付け台)を使っている場合は違和感があります。 2) Joypadのタイプを区別する方法はありますか? 一部のJoypadはModeを変更することでPS3、PS4、Androidなどとして認識させることができますが、PS3モードを選択した後、GetJoypadTypeを実行すると0(DX_PADTYPE_OTHER)と表示されます。DX_PADTYPE_DUAL_SHOCK_3で認識されるかと思いましたが...。 DX_PADTYPE_OTHERと表示されると、PS3モードなのかAndroidなのか区別が難しくなります。何か良い方法はないでしょうか?
メンテ
Re: Radial Gradient ( No.26 )
名前:Beginner 日時:2024/05/23 00:36

ご迷惑をおかけして申し訳ございません。 GetJoypadInputStateを利用すれば、[2]番はある程度解決できそうです。 各モードごとにキー値をいちいち取得して対応するようにしています。 だいたい下記のような値(10進数)が表示されるようです。 =================== #Android Mode UP : 8 DOWN : 1 LEFT : 2 RIGHT : 4 A : 16 B : 32 X : 128 Y : 256 L1 : 1024 R1 : 2048 L2 : 4096 R2 : 8192 L3 : 131072 R3 : 262144 BACK : 16384 START : 32768 #XBOX UP : 8 DOWN : 1 LEFT : 2 RIGHT : 4 A : 16 B : 32 X : 64 Y : 128 L1 : 256 R1 : 512 L2 : R2 : L3 : 4096 R3 : 8192 BACK : 1024 START : 2048 # PS3 UP : 8 DOWN : 1 LEFT : 2 RIGHT : 4 A : 64 // X B : 32 // O X : 128 // △ Y : 16 // □ L1 : 256 R1 : 512 L2 : 1024 R2 : 2048 L3 : 16384 R3 : 32768 BACK : 4096 START : 8192 # PS4 UP : 8 DOWN : 1 LEFT : 2 RIGHT : 4 A : 32 // X B : 64 // O X : 16 // △ Y : 128 // □ L1 : 256 R1 : 512 L2 : 1024 R2 : 2048 L3 : 16384 R3 : 32768 SHARE : 4096 OPTIONS : 8192 TOUCHPAD : 131072 PS : 65536 =================
メンテ
Re: Radial Gradient ( No.27 )
名前:管理人 日時:2024/05/24 01:45

> 現在、リファレンスによると、振動機能はWindowsのみ可能ですが、Androidのサポート計画はありますか? ありません Android はそもそもゲームパッドを振動させるためのAPIが無いようなのです あれば振動させたいと思うのですが… > PS3モードを選択した後、GetJoypadTypeを実行すると0(DX_PADTYPE_OTHER)と表示されます すみません、GetJoypadType が対応しているのは Windows環境だけですので、Android では GetJoypadType によるコントローラーの判別は行えません m(_ _;m
メンテ
Re: Radial Gradient ( No.28 )
名前:Beginner 日時:2024/05/25 16:14

お忙しい中、ご回答いただきありがとうございます。 1) - ReloadFileGraphAll - SetRestoreGraphCallback - SetGraphicsDeviceRestoreCallbackFunction Device Lost発生時、復旧処理を実行したり、復旧処理を実行する関数を登録するようですが、コールバック関数は一つしか登録されないのでしょうか? もし、複数登録された場合、その中から必要なコールバック関数を削除する機能もあるのでしょうか? 制作中のプロジェクトでSceneManagerで複数のシーンを管理しているのですが、各シーンごとに必要なリソースを呼び出して使用しています。 そこで、必要なコールバック関数を登録及び削除しながら使用したいです。 複雑な作業であれば、Device Lostだけでも検出したいと思っています。DxLibにも似たような機能があるのでしょうか?
メンテ
Re: Radial Gradient ( No.29 )
名前:管理人 日時:2024/05/26 03:10

> Device Lost発生時、復旧処理を実行したり、復旧処理を実行する関数を登録するようですが、コールバック関数は一つしか登録されないのでしょうか? はい、登録できる関数は一つだけです > 制作中のプロジェクトでSceneManagerで複数のシーンを管理しているのですが、各シーンごとに必要なリソースを呼び出して使用しています。 そこで、必要なコールバック関数を登録及び削除しながら使用したいです。 その場合はお手数で申し訳ありませんが複数のコールバック関数を管理する仕組みを別途作成していただいて、 SetRestoreGraphCallback などには作成していただいた管理処理の関数を登録して、複数のコールバック関数はその 管理処理から呼ぶ、という形にしていただければと思います m(_ _;m > 複雑な作業であれば、Device Lostだけでも検出したいと思っています。DxLibにも似たような機能があるのでしょうか? SetGraphicsDeviceRestoreCallbackFunction がデバイスロストから復帰した後に呼ばれるコールバック関数を登録するための関数となります デバイスロストが発生してデバイスの復帰が行われる前に呼ばれるコールバック関数を登録するための関数として SetGraphicsDeviceLostCallbackFunction がありますが、 こちらはコールバック関数の中では LoadGraph や ReloadGraph などが呼べない( まだデバイスを復帰していないタイミングなので )ので 通常は SetGraphicsDeviceRestoreCallbackFunction を使用します
メンテ
Re: Radial Gradient ( No.30 )
名前:Beginner 日時:2024/05/30 00:44

お礼が遅くなりました。回答ありがとうございます。 メンバー関数を登録するための過程が複雑でしたが、解決しました。 GetJoypadTypeはWindowsでもDX_PADTYPE_OTHERが返されましたが、サードパーティコントローラーなのでそうだと思います。 他のブランドのサードパーティコントローラーでテストした時はPS3やPS4として認識されます。しかし、振動が鳴らない問題があります...。どうやら最終配布時に正規品の使用を推奨するように表記する必要がありそうです。 もう一つ気になることがあるのですが、質問してもいいですか? もしかしたらJoypadのジャイロ(Gyro)センサーの検出も可能でしょうか?リファレンスには別途表記されていないので、検出ができるのか気になります。
メンテ
Re: Radial Gradient ( No.31 )
名前:管理人 日時:2024/05/31 03:41

> GetJoypadTypeはWindowsでもDX_PADTYPE_OTHERが返されましたが、サードパーティコントローラーなのでそうだと思います。 SONY発売の純正PS3コントローラーではないということでしょうか? 確かにその場合は DX_PADTYPE_OTHER になると思います > もしかしたらJoypadのジャイロ(Gyro)センサーの検出も可能でしょうか?リファレンスには別途表記されていないので、検出ができるのか気になります。 残念ながら DirectInput や XInput にジャイロセンサーの情報を取得するための機能が無いので、 ジャイロセンサーの情報を取得することはできません…
メンテ
Re: Radial Gradient ( No.32 )
名前:Beginner 日時:2024/05/31 14:51

回答ありがとうございます。 はい、正規品以外のコントローラーにすると、DX_PADTYPE_OTHERとして認識されます。 しかし、コントローラーによって異なるようです。 どの製品は認識し、どの製品は認識せず...。 だいたい中国製は福不福のようです。 ジャイロセンサーは残念ですね。 お忙しい中、回答を書いていただき、ありがとうございます。
メンテ

Page: 1 | 2 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存