2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

DXライブラリ 総合スレッド その18

1 :名前は開発中のものです。:2014/05/07(水) 19:44:28.30 ID:qr2Z08k5.net
Cを習得した程度のスキルでも、ゲームのグラフィックを比較的容易に描画する事のできる、
「DXライブラリ」に関するスレッドです。
DXライブラリに関するテクニックなどの情報交換などを行う事で、
多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。

【公式】
http://homepage2.nifty.com/natupaji/DxLib/

【関連スレ】
C/C++ゲーム製作総合スレッド Part5
http://toro.2ch.net/test/read.cgi/gamedev/1389798031/
ゲームプログラムなら俺に聞け30
http://toro.2ch.net/test/read.cgi/tech/1388933972/

●DXライブラリではなくDirectXの質問ならこっちへ
【C++】DirectX初心者質問スレ【C】(プログラム技術板)
http://toro.2ch.net/test/read.cgi/tech/1370015791/

831 :名前は開発中のものです。:2015/09/06(日) 17:29:28.59 ID:qpvafNwe.net
>>825-826
まず公式サイトのチュートリアルとか市販の解説本とかで
DXライブラリの描画の基本を覚えた方がいいんでない?
>>830が少し書いてくれてるけど、DXライブラリでのオーソドックスな描画の流れは

1. 裏画面を準備する
2. 裏画面の内容をクリア
3. 表示させたいグラフィックスを裏画面に描く
4. ScreenFlipで裏画面の内容を表画面に反映
5. 2に戻る

って感じ
定石無視してるとなると質問についてはどういう流れで描画をやらせてるのかが分からないと
予想の範囲でしか回答は無理だな・・・

832 :名前は開発中のものです。:2015/09/06(日) 19:28:07.81 ID:z/NhP+Yl.net
>>830
いきなり表画面に表示される設定ですよ?
だってDXライブラリのサンプルにある真ん中に点を打つっていう
プログラムを改変しただけですもん。

for(i=0; i<=10000 i++)
{
drawcircle();//ランダムな場所に円表示、シグネチャは割愛
}


この場合5〜10秒たってから一気に表示です。
おかしくないですか?裏側に描写せずそのまま表画像表示なのに
何故いきなり表示されないんですか?

833 :814:2015/09/06(日) 19:35:00.27 ID:z/NhP+Yl.net
つまり
drawcircleの中に ScreenFlip関数が埋め込まれているのではないか?
っていうのが僕の予想です。

でもscreenflip関数によってある程度書き込みがなかったら、一定期間終了後
書き出すんじゃないでしょうか?つまりscreenflip関数が呼び出されたかどうか
監視するための、Detectionscreenflip関数なるものがあって、それによって制御
されていると。

だから1万回連続でdrawcircleがあった場合、連続的に書き込まれるために
5〜10秒待たなければならない、でもwaitを挟むとDetectionscreenflip関数が
FALSEを返すから、すぐに出力されると。たぶん5〜10ミリの間だと思いますね。

違いますか?

834 :名前は開発中のものです。:2015/09/06(日) 21:07:10.01 ID:N98xBdEO.net
 ScreenFlip()を使わずに一瞬表示だというのなら、それは単純にターゲット環境が速いだけでしょ。
 前世紀8ビット時代の様に、ライン文実行すると始点から終点まで作画が見えるような時代でもないですし。
 「実行前の初期化」の方が、「実行内容」より重かったりするのも、現代ではありがちです。
 試しに、WaitTimer()で千単位の引数をDraw命令の直後に置いてみれば分かるのではないでしょうか。

835 :822:2015/09/07(月) 02:36:49.56 ID:eAYDJya1.net
俺は同じ事言ったつもりだったんだけどなあ… 人に何かを伝えるって大変だな

836 :814:2015/09/07(月) 19:10:44.33 ID:nsmH+La5.net
実験しました

for(i=0; i<=100; i++){drawcircle(); waittimer(1000);}の場合も
for(i=0; i<=100; i++){drawcircle(); waittimer(100000);}の場合も

最初の円を表示する時間はいずれも3秒前後でした。もちろん次の円以降は
waittimerの影響で後者のほうが100倍遅いですが…

つまりdraw系の関数は、連続でdrawが実行されない場合は3秒たったら
出力されるってことでいいですかね?

837 :814:2015/09/07(月) 19:37:15.54 ID:nsmH+La5.net
違うな…
やっぱりわかんね…
10ミリwaitかませたら、最初は3秒でも次以降は10ミリ秒未満で連続で
表示されるってことだからな…


何故drawcircleが連続であるときは、一気に表示されずに
waitを挟むと連続的に表示されるのか?

これが謎です

838 :814:2015/09/07(月) 19:53:55.22 ID:nsmH+La5.net
分かった分かった
最初の3秒はたぶん描画と関係ないんだ、エンジンを準備してるとか
そういう話なんだろうな。
さっき
for(i=0; i<=100; i++){drawcircle(); waittimer(1);}
で試したら、こっちは10秒くらいたってから一気に表示
for(i=0; i<=100; i++){drawcircle(); waittimer(10);}
の場合は3秒たってから1個ずつ10ミリ感覚で表示


つまりdrawcircle内の描画の部分は1〜1+xしか感覚がない場合は
まだ描画を我慢してるってことなのかな?

839 :名前は開発中のものです。:2015/09/07(月) 19:55:16.01 ID:VQkXc7Tw.net
drawcircle()の中身が間違ってるというか、

>だってDXライブラリのサンプルにある真ん中に点を打つっていう
>プログラムを改変しただけですもん。

の時点でまったくわかってないからそうなる。
だからみんな描画の仕組みを理解しろと言ってる。

いいからここを見て勉強するんだ。
http://homepage2.nifty.com/natupaji/DxLib/dxprogram.html

840 :814:2015/09/07(月) 19:55:45.18 ID:nsmH+La5.net
でなんでdrawcircleを待ってるかって言うと
一々描画のエンジンを呼んでたら処理量が多くなるから
描画エンジンのバッファを一定期間開放して溜まったら表示みたいに
したほうが効率的なんだろうね

ここまで分かると本当に気持ちいいな

総レス数 995
233 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★