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

<管理人>
ご返信は一週間に一度、土日のどちらかで行います。平日は時間に余裕があるときだけご返信します。

[5009] 無題 投稿者:名無三 投稿日:2019/05/15(Wed) 05:54 [返信]
mv1様 貴重なデータをありがとうございます。 管理人様 影の有無をグラフィック設定で追加することにします。 drive.google.com/file/d/1f8hPM0M8qevkK-Kl1Q_q1Sux8cmDg3lf/view?usp=sharing キャラモデルを艤装分軽いであろうお船のゲームのものに置換したところ、十分に60~70fpsが出ました。 改めて、今回もアドバイスありがとうございました。

[5008] ご返信 投稿者:管理人 投稿日:2019/05/15(Wed) 00:54 [返信]
> 名無三さん、.m1vさん おお、解決されている… .m1vさんご情報・ご対応ありがとうございます m(_ _)m pmxファイルは一般的に動画用の豪華な造りのモデルなので ゲーム用に作られる軽量なモデルよりはかなり処理負荷が高くなると思います あと、ShadowMapの処理は重いのでShadowMapの処理を行う対象を減らすだけでも結構軽くなるかもしれません

[5007] Re:[5006] 無題 投稿者:.m1v 投稿日:2019/05/14(Tue) 20:42 [返信]
念のためですが補足情報を書いておきます。 コメントNo.4994のソースを実行した結果ですが、会社の事務用PCでは54fps程度で、nowtime3と4、つまり ShadowMapにMV1を描くところで70fpsあたりまで落ちています。(Win7 x86 Corei3 チップセットVideo 1280x1024) 床部分を表示すると45fpsくらいまで落ちます。 ごっそりプログラムを削り、GetNowCount()の間を上から埋めていって都度fpsをチェックし、どこでがくっと 落ちるかを確認した結果は以下の通りです。 oldtimeとnowtimeのみ ⇒ 750fps nowtime1とnowtime2の間を追加 ⇒ 710fps nowtime2とnowtime3の間を追加 ⇒ 300fps <--- ここで半分以下 nowtime3とnowtime4の間を追加 ⇒ 70fps <--- ここで1/4以下! nowtime4とnowtime5の間を追加 ⇒ 69fps nowtime5とnowtime6の間を追加 ⇒ 54fps ※Corei7 GTX1060 1920x1080 Win10 x64のPCでは 520〜600fpsくらい出ます。

[5006] 無題 投稿者:名無三 投稿日:2019/05/14(Tue) 16:28 [返信]
PMX読み込んでいるところをコメントアウトしてみたら122fps出ました… 単純にポリゴン数で比較してはいけませんね、他モデルで試してみようと思います。 管理人様お手数をおかけしました。 mv1様、管理人様ありがとうございました。

[5005] Re:[5004] [5003] 無題 投稿者:名無三 投稿日:2019/05/14(Tue) 13:07 [返信]
> 要は「描くものがいっぱいなので重く、60fpsにならない」というシンプルな理由です。 drive.google.com/file/d/1N2pKyXQ-SYMGUPEU-QE7nki0qIBoYSYu/view?usp=drivesdk 前作では1〜6万ポリゴン前後の車両を10両+風景を描画しましたが、額面通りに計測結果が出ていました。 この差はなんでしょうか

[5004] Re:[5003] 無題 投稿者:.m1v 投稿日:2019/05/14(Tue) 10:10 [返信]
DxLibは描画命令を実行してもあとでまとめて実行される方式なので、描画命令を強制的に フラッシュさせないかぎり、その間の描画時間を測ってもあまり意味がありません(描画していないので) 例えばnowtime4と3の間は数ミリ秒しかかかっていませんが、強制描画させると15ミリ秒くらい かかっていると思います。 要は「描くものがいっぱいなので重く、60fpsにならない」というシンプルな理由です。 ScreenFlipが重いのはまとめ描画が(このソースでは)ここで実行されているからです。

[5003] 無題 投稿者:名無三 投稿日:2019/05/14(Tue) 05:14 [返信]
>管理人様 >fps HSPの仕様上awaitまたはwaitを0msでも挿入しておかないと、キー入力をした時点で応答無しになるので不可です。 あらかじめデバッグ画面を開いた状態で起動しても54fps以上は出ませんでした >MV1CollCheck_Line 必要な変数が増えていたんですね。きちんと動くようになりました、ありがとうございます! >モニター answers.microsoft.com/ja-jp/windows/forum/windows8_1-gaming/%E3%83%AA%E3%83%95%E3%83%AC%E3%83%83%E3%82%B7/a93bae4b-3691-41b3-a9e7-5931228151d2 こちらで40~55というワードが引っかかったからです。

[5002] ご返信 投稿者:管理人 投稿日:2019/05/14(Tue) 00:33 [返信]
> 名無三さん > 200~300でした。 > 今までも問題なかったので、今回追加した処理とHSPが合わなかったという結論…ですかね。 実際のプログラムの方では await 0;1000./frate で 60fps に保たれるようにウェイトを入れていますが、 こちらをコメントアウトしてもフレームレートが 54〜40 しか出ないのでしょうか? ( SetWaitVSyncFlag( FALSE ); を実行している場合、制限がなくなるので最近の PC では 200fps などになるのですが… ) > MV1CollCheck_Sphereの代用としてgame_mainの44行目から壁判定に使用しています… > が、1行書いて実行した時点で発症したので繰り返しなどは関係ないと思います。 原因かは分かりませんが、dim HitPoly,19 とされていますが、最新バージョンでは MV1_COLL_RESULT_POLY の メンバー変数が増え、容量は 100byte となっているので、dim HitPoly,25 としなければならないのではないかと思います よろしければ dim HitPoly,25 でお試しください m(_ _)m > 常時接続しているわけではないですが、60〜75Hzで動く1280×1080のモニターDsubで接続しています。 > MSのページでそれらしいものがあった為、念のためのご報告です。 接続した場合としない場合では何か動作結果が異なるのでしょうか…? 質問ばかりですみません…

[5001] 無題 投稿者:名無三 投稿日:2019/05/13(Mon) 17:20 [返信]
常時接続しているわけではないですが、60〜75Hzで動く1280×1080のモニターDsubで接続しています。 MSのページでそれらしいものがあった為、念のためのご報告です。

[5000] 無題 投稿者:名無三 投稿日:2019/05/13(Mon) 05:20 [返信]
#include "source/DxLib.as"//DXlib ; long Time = 0 ; // ウインドウモードで起動 ChangeWindowMode TRUE // VSYNC 待ちをしない SetWaitVSyncFlag FALSE // DXライブラリの初期化 DxLib_Init//DxLibの初期化 if stat = -1{dialog"エラー"} // 描画先を裏画面にする SetDrawScreen DX_SCREEN_BACK // メインループ while DX.ProcessMessage() == 0 // 画面のクリア ClearDrawScreen 0 // 処理時間の描画 DrawString 0, 0, strf("Time:%d",Time), GetColor( 255, 255, 255 ) Time = GetNowHiPerformanceCount() ; // 裏画面の内容を表画面に反映 ScreenFlip ; Time = GetNowHiPerformanceCount() - Time ; wend // DXライブラリの後始末 DxLib_End if stat = -1{dialog"エラー"} end 200~300でした。 今までも問題なかったので、今回追加した処理とHSPが合わなかったという結論…ですかね。 drive.google.com/file/d/13ACK2Uy-NzvAwzA7-hgZpFuLSff2M6fL/view?usp=sharing (暫定で3.18あたりにしています) MV1CollCheck_Sphereの代用としてgame_mainの44行目から壁判定に使用しています… が、1行書いて実行した時点で発症したので繰り返しなどは関係ないと思います。

[4999] ご返信 投稿者:管理人 投稿日:2019/05/13(Mon) 00:40 [返信]
> 名無三さん 手元で C# で以下のようなプログラムを組んで SetWaitVSync( FALSE ); を実行した状態で ScreenFlip の処理時間を計測してみたのですが、大体 0.2ms でした long Time = 0 ; // ウインドウモードで起動 DX.ChangeWindowMode( DX.TRUE ) ; // VSYNC 待ちをしない DX.SetWaitVSyncFlag( DX.FALSE ) ; // DXライブラリの初期化 if( DX.DxLib_Init() < 0 ) return ; // 描画先を裏画面にする DX.SetDrawScreen( DX.DX_SCREEN_BACK ) ; // メインループ while( DX.ProcessMessage() == 0 ) { // 画面のクリア DX.ClearDrawScreen() ; // 処理時間の描画 DX.DrawString( 0, 0, "Time:" + Time.ToString(), DX.GetColor( 255, 255, 255 ) ) ; Time = DX.GetNowHiPerformanceCount() ; // 裏画面の内容を表画面に反映 DX.ScreenFlip() ; Time = DX.GetNowHiPerformanceCount() - Time ; } // DXライブラリの後始末 DX.DxLib_End() ; よろしければ上記のプログラムと同様の処理を HSP で実行してみていただけないでしょうか? もしそれでも 16ms 掛かってしまうとしますと、申し訳ありませんが DxLib.dll 以外の HSP 関連の 何かの影響で 16ms になっている可能性があり、私の方ではどうしようもできない可能性が高いです > そして新たな質問なのですが、前回質問したMV1CollCheck_Line使用後に終了後…の件なのですが、 > 再燃しました。dxlib.asは最新です。 > それ以外の関数ではいまのところ発生していないです…(報告) HSP については全く知識が無いのでこちらもお力にはなれるか分かりませんが、とりあえず今回アップしていただいた プログラムでは MV1CollCheck_Line は使用されていないようですね… MV1CollCheck_Line を使用するようにされたものを拝見することはできますでしょうか?

[4998] 無題 投稿者:名無三 投稿日:2019/05/12(Sun) 07:44 [返信]
何度も失礼します、SetWaitVSyncFlag FALSEはしているのですが、 それでもScreenFlipで16ms取られてます…

[4997] 無題 投稿者:名無三 投稿日:2019/05/12(Sun) 07:35 [返信]
ごめんなさい書いてる途中で送信しました。質問ではないです。

[4996] 無題 投稿者:名無三 投稿日:2019/05/12(Sun) 07:29 [返信]
> 管理人様 なるほど、自動でしてくれるようになっているのですね。ありがとうございます。 そして新たな質問なのですが、前回質問したMV1CollCheck_Line使用後に終了後…の件なのですが、 再燃しました。dxlib.asは最新です。 それ以外の関数ではいまのところ発生していないです…(報告)

[4995] ご返信 投稿者:管理人 投稿日:2019/05/12(Sun) 02:43 [返信]
> 名無三さん ScreenFlip は内部で VSYNC 待ちを行っていますので、関数から出てくるまでの時間は処理に 余裕があればあるほど長くなります 表画面に直接描画する方法ですが、実は最近の DirectX では『表画面』という概念が無くなって しまっているので、表画面を描画対象にした場合はDXライブラリ内部で『裏画面に描画したものを 定期的に自動で ScreenFlip する』という処理が行われていて、『裏画面』に描画するよりも 動作が不安定になってしまいますので『表画面』への描画は行わないようにしてください m(_ _;m DxLib_Init を実行する前に SetWaitVSyncFlag( FALSE ); を実行すると VSYNC 待ちをしなく なりますのでフレームレートが改善されるかもしれません よろしければお試しください m(_ _)m

[4994] 無題 投稿者:名無三 投稿日:2019/05/11(Sat) 21:15 [返信]
またHSPから失礼します 8drive.google.com/file/d/1bW32X7xJ9ovFVYUCcjwWXwJ-110Q453r/view?usp=sharing (前回の反省から、.csを.asに変換するコードにより3.20c対応しました) 戦車の方がほぼ完成したので、FPSを製作しだしました。その際にフレームレートが54~40しか 出ない現象に遭遇しています。(60+-1が目標です) F3キーで処理時間を計測できるようにすると、 await 0 //HSP標準の待機命令 ScreenFlip ProcessMessage で14~16ms取り、それ以外の部分の3~6msと合わさり目標の16.67msを超えてしまっているようです そのためScreenFlipを使わないように 表画面にmakescreenで作成した画面を持ってくるように書くと、今度は SetDrawScreen をそのループ出始めて使用した際に16ms処理するようになってしまいました。 何かいけない処理を使ってしまっているのでしょうか…

[4993] DXライブラリ 3.20f をアップしました 投稿者:管理人 投稿日:2019/05/06(Mon) 20:57 [返信]
今回の大きな変更点は、Windows版のみですが ・Windows版:文字コードの変換に文字コード変換用数値配列を使用しない方式に変更。  ( 数値配列がセキュリティソフトに不正なソフトウェアと判定される原因となっていた可能性があるため ) です 以前DXライブラリ内部で持つバイナリデータ( シェーダーコードなど )が原因でセキュリティソフトに 不正なソフトと誤判定された際に、このバイナリデータを文字列の羅列に変換して持つようにすることで 誤判定されないようにしたのですが、シフトJISなどの文字コードを Unicode の文字コードに変換したり、 逆に Unicode の文字コードをシフトJISの文字コードに変換したりするための数値配列だけ文字列に 変換しない状態で内部に持ってしまっていました 最近もちょくちょくセキュリティソフトに引っかかっていたのはこれが原因だと思います ( CreateDXFontData.exe などでも最近同様の文字コードテーブルを使用するようにしたら CreateDXFontData.exe も  セキュリティソフトに不正なソフト扱いされたので、高確率でこれが原因… ) この『文字コード変換用数値配列』も文字列の羅列にすればそれで良いのですが、 このデータは元々 Windows API を使用して取得していたものなので、Windows版では グローバル配列として持たず Windows API を使用して実行時に数値配列を構築するようにしました これで、セキュリティソフトにも誤判定されなくなり、おまけに作成される実行ファイルの容量が バイナリデータ分の数百KB減らせました ( 因みに、この配列 PS4 対応などを始めた 2014年半ば頃から内部に持っていたので、5年間ほど  誤判定され易い状態を放置してしまっていたことに… orz )

[4992] Re:[4991] ご返信 投稿者:シャド 投稿日:2019/04/22(Mon) 06:37 [返信]
2を行ったらデバッグしました。 よくよく考えたらファイルの中のslhの上に画像を保存してあったのを assetsで追加してしまったから多分エラーがでたのだと思います。(確信はありませんが) ピクチャから追加したらエラーが起きなくなりました。

[4991] ご返信 投稿者:管理人 投稿日:2019/04/22(Mon) 00:14 [返信]
> シャドさん よろしければ以下のことを試してみていただけないでしょうか? 1. VisualStudio のメニューの『ビルド(B)』→『ソリューションのリビルド(R)』を実行してからデバッグ実行 2. assets に追加した画像を削除してみたら起動しますでしょうか? 3. VisualStudio を一度終了して再起動してからデバッグ実行 4. 一度シミュレーターを終了して再起動してからデバッグ実行 5. 一度シミュレーターを終了して再起動してから、更に VisualStudio も一度終了して再起動してからデバッグ実行

[4990] 配置エラー 投稿者:シャド 投稿日:2019/04/21(Sun) 20:16 [返信]
こんばんわ 夜分に申し訳ございません。 visual studio 2019 NativeActivity android-19 Debug x86を使用しているのですが デバッグをするとPackaging x86 Debug 〇〇〇.apkがディスクに存在しない というエラーがでました。 色々ネットで解決方法を探りましたがなかなか解決できずに時間をつぶしてしまいました。 最初はうまくデバッグしてくれたのですがassetsに画像を追加してからエラーが発生するよう になりました。

[4989] DXライブラリ 3.20e をアップしました 投稿者:管理人 投稿日:2019/04/14(Sun) 05:22 [返信]
今回の主な変更内容は ・iOS版:Retinaディスプレイでの表示解像度が半分、又は3分の1になってしまっていたバグを修正。 ・iOS版:文字列を描画すると文字の端にゴミが描画されるバグを修正。 ・iOS版:MV1DrawModel で3Dモデルを描画した後、DrawGraph で画像が描画できなくなることがあるバグを修正。 など、主に iOS版の致命的なバグの修正です orz 他には ・文字列描画をカーニングを考慮した処理に改良 というものもあります 恥ずかしいことに今までカーニングというものを知りませんでした カーニングについて簡単にご説明すると、例えば VA のような文字の組み合わせの場合、フォントによっては V の 右上の部分と A の左下の部分が Y軸上では重なってしまうほど近づいて表示されないと不格好になってしまう 場合があるのですが、カーニング情報はどのような文字の組み合わせの場合に、右側にある文字をどれだけ左側に スライドさせれば良いか、の情報です 今までこの情報を考慮しない描画を行っていたので、一部のフォントでは VAWM のような文字の組み合わせの場合に 文字同士が異様に離れていて格好悪い状態になっていました ただ、カーニング情報を持っているのは主に英字のみしかないフォントで、MSゴシックやMS明朝など日本語にも 対応しているフォントの多くはカーニング情報を持っていないので、今まで対応していなかったとはいえ、影響は それほど無かったかもしれませんが… ( なので逆に、今回対応したといっても改善を実感する方は殆ど居られないかもしれません )

[4988] 無題 投稿者:名無三 投稿日:2019/04/03(Wed) 21:24 [返信]
昔のものは3.16dでしたか…とんだ勘違いをしてました…(log見ればよかったんですかね?) 現象がまだ起こっていないところを探るために怪しい箇所(1_0_load以降)goto*edを追加したところ、 MV1CollCheck_Lineを使用した後必ず応答無しを吐いたためこういう結論になりました。 3.17aで終了可能になりましたので、だましだまし使いつつ.asを直すなりしようと思います 思い込みでバグなどと言ってしまい大変申し訳ありませんでした…そして真摯に考えてくださった .m1v様、管理人様ありがとうございます。

[4987] Re:[4986] 無題 投稿者:.m1v 投稿日:2019/04/03(Wed) 21:03 [返信]
昨日のファイルは3.20cのDLL、今朝のファイルは3.16dのDLL、ですね。 自分の環境ではゲーム開始後にEscで終了しても何も起きないので、どうにもわかりません。 「MV1CollCheck_Lineを利用した後に」と書かれていますが、この関数が怪しいと思う理由が なにかあるのでしょうか?(エラーメッセージが表示されるとか?) HSPの仕様もわからないので、たぶん関係ないと思いますが、思いつくことを挙げさせていただきます。 @終了時の処理 現在、Escを押したら OBAQのクローズ(qterm)とDxLibのクローズ(DxLib_End)だけで終わっていますが、 シェーダーとかMakeScreenとかいろいろ使用されているようなので、念のため *ed qterm MV1InitModel InitGraph InitMask InitShader InitFontToHandle InitSoundMem DxLib_End end のようにしてみてはどうでしょうか?(たぶん関係ない) ADxLib.asが古い HSPでDxLibを使用するための DxLib.as は 3.14f 時代のものです(※配布されているものと数行異なりますが)。 気になるのは、名無三さんも使用されている DrawRotaGraph など一部の関数は、3.19bから引数の個数が 変更されています。(7 ---> 8個) DxLib.asは3.14fなので7個で宣言されていますが、スクリプトで7個指定でエラーなく動いているようです。 (8個目の引数は省略したらFALSEになる項目だから大丈夫なのだろうか…?) そういった感じで、本来ならDxLib.as(とスクリプト)を「最新仕様」に修正した方がよいのではないかと 思ったりしますが、HSPがどういう挙動で動作するのかわからないためなんとも言えません。

[4986] 無題 投稿者:名無三 投稿日:2019/04/03(Wed) 05:21 [返信]
こちらになります drive.google.com/file/d/1B3skhp6m7uBgeQviJ0F4FMWoG_FVCtyH/view?usp=sharing こちらではきちんと動作終了する代わりにシャドウ関連が使えない?ようでした

[4985] ご返信 投稿者:管理人 投稿日:2019/04/03(Wed) 01:08 [返信]
> 名無三さん game.exe を実行してみたのですが、ロードの途中のような画面で止まってしまいました ( 恐らく.m1vさんがご指摘の箇所だと思いますが… ) hspについては殆ど知識がないので、お手数で申し訳ありませんが現象が確認できる ( 少なくとも起動中に止まってしまわない )状態のファイルを頂けないでしょうか?

[4984] 無題 投稿者:名無三 投稿日:2019/04/02(Tue) 23:59 [返信]
conf.core→conf.data です、失礼しました

[4983] 無題 投稿者:名無三 投稿日:2019/04/02(Tue) 23:39 [返信]
ごめんなさい、タイトルのものはプレイヤーさんにわかりやすいかと思いあの様な文にしました が配慮足りませんでした… loadcommonについては、初めて起動したかを判別するスイッチがconf.core内にあり、 それがオフになっているためだと思います… 特定ということはなく、MV1CollCheck_Lineを利用した後に(こちらの環境では)確実に発生します。

[4982] Re:[4981] 無題 投稿者:.m1v 投稿日:2019/04/02(Tue) 22:00 [返信]
HSPを使ったことはありませんが試してみました。 ダウンロードしたファイルを解凍して game.exe を実行すると、起動後真っ黒になってハングします。 HSPで core.hsp を実行しても同じ症状になります。 調べると 0_0_loadcommon.hsp の   if hatsu=0 {addFont "data/font/x14y24pxHeadUpDaisy.ttf" } の行で止まったままになります。ここをコメントアウトすると進行します。 起動すると「DXライブラリのバグについて」と書かれているのが気になりますが… Start をクリックして戦車を降下させます。で、EscやAlt-F4で終了させますが、一瞬で終了します。 現行最新のDLL(いわゆる Temp版)や、DxLib.asにあわせて3.14fのDLLで実行しても、 とくにハングったりしません。exeをつくってやってみても同じです。 ログの記録をオフにされていますが、ONにして実行したところCOMの終了も完了していますし 特に問題はなさそうです。 降りてすぐの終了ではなく、特定のシーンでの終了ということなのでしょうか?

[4981] 無題 投稿者:名無三 投稿日:2019/04/02(Tue) 18:31 [返信]
いつもお世話になっていると共に、初質問失礼します drive.google.com/file/d/1Mp3v6C9l61WyNuYvNRag241sORK5oure/view?usp=sharing (環境がとても特殊なのは許してください) こちらでタイトルからゲームスタートしたのちESCで終了した (MV1CollCheck_Lineを利用した後DxLib_Endし終了した)ところ応答なしになってしまいます。 2017年ごろにDLした3.20では特に問題がなかったので、DXLib側の問題なのでは…と思うのですが HSP以外でのプログラミング経験がなく皆目見当もつきません。

[4980] Re:DxaArchive(解決) 投稿者:haruki 投稿日:2019/03/24(Sun) 20:48 [返信]
>4sさん 上手くいきました。ありがとうございました。

記事No 削除キー

- Aska BBS -