DXライブラリ 総合スレッド 2008
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2008/10/25(土) 17:37:53ID:BCFbbKcoGUIのゲームを比較的容易に作成する事を可能にする、
「DXライブラリ」に関するスレッドです。
DXライブラリの詳細ついては
http://homepage2.nifty.com/natupaji/DxLib/
を参照して頂きたい。
DXライブラリに関するテクニックなどの情報交換などを行う事で、
多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。
過去スレ:DXライブラリ 総合スレッド
http://pc11.2ch.net/test/read.cgi/gamedev/1197468399/
0099名前は開発中のものです。
2008/11/15(土) 20:27:43ID:MzdFlqka返事ありがとう。
リフレッシュレート自体はわかったんですが
後半よくわからなかったのでちょっと調べてみます・・・。
0100名前は開発中のものです。
2008/11/15(土) 20:51:40ID:56rIt8Huってのがどんなのか判らないけど、
ScreenFlipの垂直同期信号待ちを利用した方法だとすると
前述したようにリフレッシュレートに依存するから
「どのPCでも一定の速度」にはならないよ。
リフレッシュレートを60にしてるPCと70にしてるPCではスピードが違う。
まぁそれを踏まえた上でいちばん簡単で代表的な速度を一定にする方法なんだけどね。
(つまり、リフレッシュレートが60の場合を前提としてゲームを作り、
60以外にしてる人は60にしてからプレイしてください、となるw)
0101名前は開発中のものです。
2008/11/15(土) 21:13:47ID:56rIt8Hu俺も聞きかじりの知識だが。
最近はテレビにしろディスプレイにしろ、液晶が主流で「薄型」になってるが
もしブラウン管(分厚い)のテレビなりディスプレイがあるなら、画面の前で手を振ってみるといい。
残像がぶつ切りに、ストップモーションのように見えるはずだ。
これはどういう事かというと、画面が60分の1秒に一回、点滅してるからそう見えるんだ。
(厳密には60分の1秒に画面半分)
つまり、画面が光ってる時に「手の影が見えて」、画面が消えてる時には「見えない」から
手の動きがぶつ切りに見えるわけだ。
そうやって点滅してるのに、ずっと光ってるように見えるのは残像のせい。
もっとも「眼(瞳孔)」の方は反射で動いてるから、画面が光ってる時には瞳孔が小さくなり
画面が消えてる時は瞳孔が大きくなってたりするはず。
だから画面に近づいたり、暗い部屋で画面を見たりすると極端に眼が疲れる。
0102名前は開発中のものです。
2008/11/15(土) 21:24:13ID:56rIt8Huブラウン管ってのは、奥から電子ビームを画面に向けて照射して、その部分のみを光らせてるわけだから
実際に光ってるのは1点のみ。(もっとも一度照射されるとしばらくは持続するらしいが)
その電子ビームの照準が、画面の左上から始まって、右端まで動き、
一段さがってまた左端から始まって右まで動き、を繰り返し、画面の右下まで進む。
つまり
┏━━━┓
┃□ぬ□┃
┃□る□┃ みたいな画面が表示されてると、それは実際は
┃□ぽ□┃
┗━━━┛
┏━━━┓
┃□ぬ□┃
┃■■■┃
┃■■■┃
┗━━━┛
┏━━━┓
┃■■■┃
┃□る□┃
┃■■■┃
┗━━━┛
┏━━━┓
┃■■■┃
┃■■■┃
┃□ぽ□┃
┗━━━┛
という感じで高速に書き換えられてるという事。
0103名前は開発中のものです。
2008/11/15(土) 21:30:19ID:56rIt8Huもしこの「動く」のが前述した「画面を書き換えてるタイミング」だったらどうなる?
┏━━━┓
┃ぬ□□┃
┃る□□┃ この状態から
┃ぽ□□┃
┗━━━┛
┏━━━┓
┃□□ぬ┃
┃□□る┃ この状態からにまで移動しようとすると
┃□□ぽ┃
┗━━━┛
┏━━━┓
┃ぬ□□┃
┃■■■┃
┃■■■┃
┗━━━┛
┏━━━┓
┃■■■┃
┃□る□┃
┃■■■┃
┗━━━┛
┏━━━┓
┃■■■┃
┃■■■┃という感じになり、
┃□□ぽ┃
┗━━━┛
┏━━━┓
┃ぬ□□┃
┃□る□┃ 人間の目にはこう映ってしまう。この現象をティアリングと呼ぶ。
┃□□ぽ┃
┗━━━┛
0104名前は開発中のものです。
2008/11/15(土) 21:38:19ID:zVe3F0+t「ScreenFlipを使う前と後の時間差を利用してる方法」ってのを普通に解釈したらリフレッシュレートに依存せずに一定になるよ。
ScreenFlipの待ち時間に関係なく、1フレーム(1ループ)の差時間から移動距離を割り出せばok。
ただし、ゲーム画面がアクティブでなくても実際に時間は経過してるので、ゲームに戻るとその分進む(進んだ)ことになる。
これを回避するなら、ゲーム内で独自にインクリメントカウントを設置し、そこから移動距離を割り出せばok。
ゲームプログラミング独特の考え方だね。
0105名前は開発中のものです。
2008/11/15(土) 21:40:57ID:zVe3F0+tブラウン管テレビは29.97fpsだよ。
0106名前は開発中のものです。
2008/11/15(土) 21:41:23ID:56rIt8Huこれが「垂直同期信号待ち」であって、つまりは
ディスプレイが画面全体の書き換えが終わるまで、
次の描画処理をしないで待ってるってわけだ。
これがScreenFlipではデフォルトで行われてる。
だからScreenFlipを使うと速度が一定に保たれる……のだが、
「画面の点滅は60分の1秒」と言ったが前述したが、これが要するにリフレッシュレートの事。
つまりこの速度をPC側で自由に変更できたりする。
リフレッシュレート60の場合はScreenFlipは60分の1秒経つまで待つわけだが、
リフレッシュレート70の場合は70分の1秒しか待ってくれない。
その分ゲーム速度は速くなってしまうわけだ。
(もしプログラム処理自体が重くて、70分の1秒で終わらなかったら
70分の2秒、つまり35分の1秒かかるわけで、逆に遅くなる)
0107名前は開発中のものです。
2008/11/15(土) 21:47:42ID:56rIt8Hu当たり判定もそれ相応の処理にしなくてはいけないし、
そうなるとリプレイ記録&再生をどうやればいいのかわからなくなる。
そこらへんはどうやってるのかな。
ってこれはDXライブラリと関係ないか。
0108名前は開発中のものです。
2008/11/15(土) 21:57:26ID:zVe3F0+tでもScreenFlipの待ち時間を基準にするなんて誰もしないと思うから
あたかもScreenFlipを使うとスピードがリフレッシュレート依存になるみたいな解説はやめたほうがいいと思うよ。
0109名前は開発中のものです。
2008/11/15(土) 22:29:29ID:PnDW3j7Q1ループが17ミリ秒(60FPS)になるまでウェイトをかけてやればいい
これが一番簡単で確実
0110名前は開発中のものです。
2008/11/15(土) 22:34:05ID:RlpGwAN3それ以外はタイマで
0111名前は開発中のものです。
2008/11/15(土) 23:12:07ID:56rIt8Huいや、俺してたし、してるしw
0112名前は開発中のものです。
2008/11/15(土) 23:32:40ID:zVe3F0+tその話をしてるのは君だけど、実際にそれを採用してる人はいないって事だよ。
もしかして君は採用もしてるの?
だとしたら自分が長々と説明したデメリットが解消できてないよね。
それを解消したくて質問したいならそれなりの場所でそれなりの質問方法を取ればいいと思うよ。
もしそうじゃないなら誰も採用しない方法を解説されてもややこしくなるだけだから…。
0113名前は開発中のものです。
2008/11/15(土) 23:41:52ID:56rIt8Hu最初はゲーム起動時に測って自動切換えにしてたけど
それもやめて結局手動切り替えに……。
0114名前は開発中のものです。
2008/11/15(土) 23:43:35ID:56rIt8Hu移動距離算出方法はやった事ないです。
0115名前は開発中のものです。
2008/11/16(日) 00:40:12ID:H38ODQJJとりあえずDXライブラリを使うならScreenFlip()で垂直同期を待てば良いと思うよ。
スピードの話はまた別の話。
>>113
ゲーム起動時に何を測るの?
それと、切り替える必要性が見えないんだけど・・・?
0116名前は開発中のものです。
2008/11/16(日) 01:43:29ID:Hwka3oLK>ゲーム起動時に何を測るの?
ScreenFlipを一秒間繰り返して、その回数で判断。
>>98で書いたけど、垂直同期信号待ちをしてるはずなのに
ScreenFlipで待ってくれない場合があるから、
FPS値が異常に高かったらそうだと判断して
タイマー値によるウェイトかけるようにしてた。
>それと、切り替える必要性が見えないんだけど・・・?
それはどっちを基準にして?
ScreenFlipを基本として考えるなら、リフレッシュレートが変更された場合や
上で書いた垂直同期信号待ちしてくれない環境の時に異状スピードになってしまう。
タイマ値でウェイトかける場合は、やっぱりティアリングが気になるし、
1フレームごとに点滅するエフェクトとかがきちんと点滅しなくなる。
0117名前は開発中のものです。
2008/11/16(日) 02:40:28ID:H38ODQJJえっと、だからね、ScreenFlipとティアリングは関係あるけど、
それらとウェイトは関係ないって事だよ。
ゲーム起動時にScreenFlipの待ち時間からリフレッシュレートを判断してるようだけど、
それも結局ScreenFlip基準でタイマー取る方式だよね。
てことは例えば60Hzを基準にウェイトをかけるって事だよね。
だとしたらはじめからリフレッシュレートのウェイトなんかに頼らずに、
マルチメディアタイマーででも1/60sを基準にコードを書けばいいでしょ?
だから起動時に測る必要もないし、リフレッシュレートの変更やVsyncを待たない場合は考慮しなくていいの。
繰り返すけど、タイマーでウェイトかけてもScreenFlipを使うならティアリングはないよ。
0118名前は開発中のものです。
2008/11/16(日) 03:40:07ID:Hwka3oLKタイマでウェイトかける場合は、ScreenFlipのVsync待ちはOFFにしてあるんだけど、
それでもティアリングは発生しない?
んじゃ発生してる俺のプログラムは何か間違ってるのか。
理屈上、1/60sを基準にウェイトかけるようにすれば
ゲームスピードは一定になるが、タイミング次第で
ティアリングが発生しない状態か、
あるいはティアリングが発生し続ける状態が
維持されるものだと思っていたのだが。
0119名前は開発中のものです。
2008/11/16(日) 04:22:31ID:H38ODQJJこれを前提に最初から読み返してみて。
0120名前は開発中のものです。
2008/11/16(日) 14:59:43ID:Yf+kFgNP0121名前は開発中のものです。
2008/11/16(日) 17:43:53ID:fHnaEgZYティアリングは発生しないけど動きが凄いガクつくぞ
ADVみたいに動きの少ないゲームならそれでも良いと思うけど、
STGやACTでは見るに耐えない
0122名前は開発中のものです。
2008/11/16(日) 18:33:07ID:H38ODQJJ75Hzの環境なら60fpsに制限されるから多少はガクつくけどこれはトレードだね。
ちなみに3Dモノとか海外のゲームはfpsを出来るだけあげて垂直同期しないっていうのが主流みたい。
>>121みたいにfps制限はするわ垂直同期しないわっていうのは愚の骨頂。
ティアリングするわfps制限されてるわでひどいもんですわ。
0123名前は開発中のものです。
2008/11/16(日) 21:17:57ID:gVsDrcFZガッ
0124名前は開発中のものです。
2008/11/16(日) 21:57:20ID:fHnaEgZYなんでそんなに相手を見下したような態度なの?
>60Hzに合わせれば60Hzの環境なら結局タイマーでウェイトしないから問題ないよ。
それはわかってるよ
だから最初にリフレッシュレート測って垂直同期主体にするかタイマー同期にするか判断するんでしょ?
121はあくまでfpsとリフレッシュレートが一致していない場合の話
>75Hzの環境なら60fpsに制限されるから多少はガクつくけどこれはトレードだね。
ここで122の言うとおり垂直同期とるかとらないかはプレイヤーの好みの問題
オプションで選択できるようにすべきだと思う
>ちなみに3Dモノとか海外のゲームはfpsを出来るだけあげて垂直同期しないっていうのが主流みたい。
そうだね。3Dモノは可変fpsと相性良いよね。
>>121みたいにfps制限はするわ垂直同期しないわっていうのは愚の骨頂。
垂直同期をとらないことで手軽に入力に対するレイテンシを下げることができるし、
リプレイを取る目的でfpsを固定しなければならない場合もあるんだから、
短絡的に愚の骨頂というのはどうだろう
122的には60fps固定+垂直同期してない東方緋想天は愚の骨頂?
俺はそうは思わないけど・・・
0125名前は開発中のものです。
2008/11/16(日) 22:50:57ID:5RilDqvEリプレイ周りの実装も含めて、やっぱりFPSは60に固定でロジックを組みますよ。
オプションで「Vsync待ちをするかタイマーか」を選択させてます。
124さんもリプレイの話をしているから、そういう前提で言ってるのだと思うのですが。
0126名前は開発中のものです。
2008/11/16(日) 23:07:43ID:xtMr6+ch入力があったキーとその時の経過フレーム数があればいいんだし
0127名前は開発中のものです。
2008/11/16(日) 23:30:59ID:0yDeWpwc0128名前は開発中のものです。
2008/11/17(月) 01:36:47ID:GetktCW+何そのゲーム。>東方なんたら
最悪だね〜。
>>126
だよねぇ。
0129名前は開発中のものです。
2008/11/17(月) 03:32:51ID:qWlXMT4E0130名前は開発中のものです。
2008/11/17(月) 18:51:51ID:TAngTg8T0131名前は開発中のものです。
2008/11/17(月) 21:49:06ID:E1tboJG/0132名前は開発中のものです。
2008/11/17(月) 22:00:58ID:tSUha7RY作者の好意で公開してるソースをそんな言い方するなよ
0133名前は開発中のものです。
2008/11/17(月) 22:04:49ID:Zhr1hzWJ0134125
2008/11/17(月) 22:57:25ID:pxmPH9a8たしかにそうですね。
ただ、自分の場合は、FPSを固定すればあとはキー入力さえきちんと記録できていれば
リフレッシュレートが違えどもリプレイがずれることがないのでそうしていました。
0135名前は開発中のものです。
2008/11/17(月) 23:31:08ID:OriaVhLmやり方も違ってくるんじゃないかな。
0136名前は開発中のものです。
2008/11/18(火) 13:05:35ID:FZcPiuDyしょぼんのアクション だっけ?
やっと1−1クリアだと思ったのに愕然とした記憶がある。
0137名前は開発中のものです。
2008/11/19(水) 13:43:13ID:xnzA6xl60138名前は開発中のものです。
2008/11/19(水) 14:54:42ID:TpPgoKXnあれはやばいです
あれはほんとうに・・やばい・・。
この道10年のベテランですらあれを見ると悶絶して悶え死ぬレベル。
あのソースを読んだあの日、私は自分の人生について考えさせられました。
0139名前は開発中のものです。
2008/11/19(水) 15:08:39ID:lxkh5WN50140名前は開発中のものです。
2008/11/19(水) 15:11:10ID:Lz0a0oQh0141名前は開発中のものです。
2008/11/19(水) 18:41:54ID:TpPgoKXn0142名前は開発中のものです。
2008/11/20(木) 23:58:11ID:UIc9LZep0143名前は開発中のものです。
2008/11/21(金) 00:08:16ID:AZA6fSH/0144名前は開発中のものです。
2008/11/21(金) 00:14:35ID:IPu5qEL0むしろ逆に頭良いと思う
0145名前は開発中のものです。
2008/11/21(金) 00:46:35ID:PFCyKir90146名前は開発中のものです。
2008/11/21(金) 05:06:26ID:0gMw7+uwこれもマジキチ
0147名前は開発中のものです。
2008/11/21(金) 05:58:28ID:VvYw+mZMこれはアイテム4つで実装力尽きるw
配列すら使ってないとかやべぇ
でもスレチ
0148名前は開発中のものです。
2008/11/21(金) 12:55:25ID:3m8CIP+tそれにしてもその作者はDXライブラリ3Dの作者なの?
なんか色々考えさせられるな…。
0149名前は開発中のものです。
2008/11/21(金) 15:36:28ID:ELcxKG7H0150名前は開発中のものです。
2008/11/21(金) 19:40:33ID:yD9XL+v+0151名前は開発中のものです。
2008/11/21(金) 21:42:08ID:FU8hvFU50152名前は開発中のものです。
2008/11/22(土) 22:21:51ID:j0m39ynAゲーム一本完成させるって難しいな。
0153名前は開発中のものです。
2008/11/23(日) 02:26:12ID:YAgqgFQm0154名前は開発中のものです。
2008/11/23(日) 02:27:42ID:Ef5lma7pプログラム練習としても面白いジャンルのような気がします
がんばりましょう
0155名前は開発中のものです。
2008/11/23(日) 14:21:16ID:bJorsnCE俺知ってるよ
そういうのをあじゃいるって言うんだよね
0156名前は開発中のものです。
2008/11/23(日) 17:55:00ID:pnQpCtQfSaveDrawScreen()で画面全体を保存した後に、
その画像を加工して表示するという方法を試しましたが、遅くてとても使えませんでした。
ちなみに手順は
保存→加工→保存→表示です。
加工と二回目の保存の処理の間がとても遅かったです。
直接DXライブラリで描画してる画像をぼかせばもっと早くなると思うのですが、
DXライブラリで直接ぼかす方法がさっぱりわからりません。
どういう方法でぼかせれるのでしょうか?
0157名前は開発中のものです。
2008/11/23(日) 20:09:39ID:YAgqgFQm昔、モーションブラーもどきを自分で作ったが細かいやり方は忘れた。
0158名前は開発中のものです。
2008/11/25(火) 00:31:59ID:xYyBQpV1そのまま画像を描画
↓
αブレンドを適当に128くらいに指定してxy数ドットずらして描画×数回…
こんなのでどう?
0159157
2008/11/25(火) 20:03:29ID:5UMAw8SPああ、そうそう。
そんな感じでできると思う。たぶん。
ずらし量やブレンド率でぼけ足上手いこと調整してどうにかする。
関数化できたら楽そうだ。
0160名前は開発中のものです。
2008/11/25(火) 22:23:11ID:VmASE6nWいろいろとありがとうございます。
アドバイスのおかげで、それらしいのはできました。
縦には動かしていないのですが、とりあえずそれっぽい動作はします。
ソースは以下の通りです。
private void GraphOff(int dot,int graphHandle)
{
for (int i = 0; i < 640 / dot; i++)
{
DrawGraph(i * dot - 640, 0, graphHandle, 0);
DrawGraph(640 - i * dot, 0, graphHandle, 0);
}
}
これでまた問題が出たのですが、この処理非常に重いです。
FPS30固定にしているのですがこれをするとFPS10〜15になります。
軽くする良い方法は何かないでしょうか?
0161名前は開発中のものです。
2008/11/25(火) 22:39:54ID:MBrRa9Zc0162名前は開発中のものです。
2008/11/25(火) 23:02:53ID:EDWbdjkCi < 640/dot
を
i < 160/dot
くらいにまで下げてみる
ぼかすのがゲーム上そんなに大事じゃなかったら
このくらいで妥協するのが一番
0163157
2008/11/26(水) 02:18:18ID:eTjv2Xnvそんなに回数要る?
dotの値がいくら位で何回位描画しているのかとか、コードの意図とかちょっとわからんので
↓とどっちのコードの方が性能良いのかよくわからんけど…
int times = 4;//描画回数:4〜16推奨
int gap = 2;//ギャップ:1〜4推奨。残像拳のような効果を狙うなら大き目に。
SetDrawBlendMode( DX_BLENDMODE_ALPHA , 32 ) ;//描画回数×ブレンド率=128〜256推奨
for (int i = 0; i < times; i++){
DrawGraph( i*gap - times*gap, 0, GHandle, 0);
DrawGraph( times*gap - i*gap, 0, GHandle, 0);
}
0164名前は開発中のものです。
2008/11/26(水) 04:53:23ID:mqCcsZAV本当に速度が必要で、それなりのクオリティーが欲しいなら
LoadSoftImage関数とLoadSoftImageToMem関数を使うといいかもしれない。
自分は近頃、DXライブラリまったく触ってなかったから、どんなもんか
わからんが、説明を読む限りではこっちの関数で処理して
GraphHandleをつけて、表画させる方が高速みたいだし・・・・・
0165名前は開発中のものです。
2008/11/27(木) 05:33:03ID:9lHdy+ssDXライブラリとかの関数を変な使い方すると、めっちゃ重くなったりして(コンパイルエラーが出るわけではない)、
上手く扱わないとたとえ数百行のプログラムでさえ上手く動かないのに
市販されてる3Dゲームとかだとそれこそ想像もつかない量のプログラム書いてると思うんですが
それを全く重くならないように作るというのはまさに神の所業としか思えないんですが・・・
やはり職人的なひとはそれほどすごいってことでしょうか?
それとも単にまだ自分が未熟なだけでしょうか?
なんか抽象的な質問ですみません。
0166名前は開発中のものです。
2008/11/27(木) 07:22:55ID:UFJsiMGy普通に使っている分には問題ないと思うけど…
コード量も関係ないし。
メインのループ(秒間30〜60回くらい回しているとこ)の外で1回やれば済む処理を
ループの中で毎回やってたりしてない?
例えばグラフィックハンドルへの画像の読み込みを毎回やっているとか。
0167名前は開発中のものです。
2008/11/27(木) 12:05:54ID:tLRoJzh6そりゃまぁPCの性能にもよるけど。
市販されてる3Dゲームとかは、俺はヘボプログラマだからそれこそ神の領域にしか思えないけど
同じ市販ゲームでも、すごいグラフィックなのに軽快なのとか、やったらもっさりして重いのとかあるから
そこらへんはプログラマの腕次第でしょ。
凄腕のプログラマは極限まで無駄な処理を省いてるんだと思う。
0168名前は開発中のものです。
2008/11/27(木) 17:02:45ID:HwZNU9zJ0169名前は開発中のものです。
2008/11/27(木) 18:56:41ID:9lHdy+ssなるほどサンクス・・・
確かに無駄に繰り返してるかもしれない・・・。
0170名前は開発中のものです。
2008/11/27(木) 20:46:39ID:GnzSYpCC0171名前は開発中のものです。
2008/11/27(木) 22:41:46ID:LOD/UyCKありがとうございます。
回数がご指摘の通り多すぎました。
>>157のコードと併用して、思っていたぼかしができました。
コードは私の作成したコードと>>157のコードを関数化しただけなので省略させていただきます。
0172名前は開発中のものです。
2008/11/27(木) 22:48:28ID:tLRoJzh6別フォント用意すりゃいいことだが。
0173名前は開発中のものです。
2008/11/28(金) 05:15:28ID:10isJ4oYにしたらドラゴンボールの世界になってワロタ
0174名前は開発中のものです。
2008/11/29(土) 16:25:44ID:BtMciNRd0175名前は開発中のものです。
2008/11/29(土) 22:48:46ID:kaHILOZBいますぐ昔の再放送の刑事ドラマやドラマの
事務所シーンを見るんだ!!!
パソコンのディスプレイあるだろアレみるとわかりやすい
0176名前は開発中のものです。
2008/11/30(日) 02:55:10ID:Kx1+nHAmあれ今見るとなんでそう見えるか理解出来るな
タイヤが逆回転して見えるのとかも
0177名前は開発中のものです。
2008/12/01(月) 09:18:57ID:PQmt2oZjDXライブラリ(3D)で完璧に作ったのと
DirectXで完璧に作ったのだったら動きのサクサクさにどれくらい差が出るのかな?
PCの性能は結構良いのでそれは関係なく
個人的にはマリオ64くらいのクオリティーは出したいと思ってるんだけど
始めての大型ゲームなんで全く想像付かない
0178名前は開発中のものです。
2008/12/01(月) 09:51:01ID:Mqk5OkvC0179名前は開発中のものです。
2008/12/01(月) 10:23:13ID:PQmt2oZj0180名前は開発中のものです。
2008/12/01(月) 16:53:55ID:B+fc1nCX0181名前は開発中のものです。
2008/12/01(月) 16:57:45ID:Mqk5OkvCそのプロセッサ専用のライブラリを熟知してれば
サクサク動くゲームになる
例えばPS2ならEEとかのベクトル計算のためのライブラリの仕様とか
windowsマシンにはそんな計算機能はデフォルトじゃついてないから
どうしてもグラボ依存になる
0182名前は開発中のものです。
2008/12/02(火) 00:02:20ID:zbFv8MtrChangeWindowMode(TRUE);
SetDrawScreen(DX_SCREEN_BACK);
while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
ClsDrawScreen();
〜〜
ScreenFlip();
}
}
↑こう書いたとき、〜〜 の部分の処理が毎回変わるモノだった場合でも、よほど〜〜の処理が長くならない限り、
ScreenFlip()があることによって、画面に出力される周期は〜〜の処理時間によらない、と考えていいんでしょうか?
なんか説明下手ですみません・・・。 たとえば、指数関数的に動く物体を作りたいとして、
〜〜の部分を「毎回n=n+1して、x^nの位置に画像を出力」という内容にしたとした場合、
ループが来るたびにnが増えるからx^nの計算の処理が多少だんだん増えていくと思うのですが、
もしその処理時間も画面出力に影響してしまったら、動きが時間の正確な指数関数にならないと思うのですが、
『ScreenFlip()によって、「処理が終わっても、規定時間δtが来るまでは画面出力しない」という仕組みが加わってるので、
処理時間に影響せず一定時間ごとに画面出力される。 ただし、もちろん 処理時間の方がδtを超えてしまったら、重くなるという別の影響は出てくる。』
というものだと解釈していいのでしょうか?
(すみません。アク禁中の代レスなので、返事できないかもしれません。)
0183名前は開発中のものです。
2008/12/02(火) 08:48:55ID:jLo5RDUc本文は読んでいない。
0184名前は開発中のものです。
2008/12/02(火) 08:53:50ID:l3NK/S0H0185名前は開発中のものです。
2008/12/02(火) 09:50:01ID:ptyOGcVX0186名前は開発中のものです。
2008/12/02(火) 21:13:42ID:xSROB0kK0187名前は開発中のものです。
2008/12/02(火) 22:13:19ID:g62jpxUX0188名前は開発中のものです。
2008/12/03(水) 05:14:23ID:Ts8WjI0J#include <stdio.h>
#include <windows.h>
void main (){
int cell=0,jinzo18=2,jinzo17=2,tensinhan=25,seimeiryoku=1;
int hikinobasi=0;
cell+=jinzo17;
for(hikinobasi=0;hikinobasi<30;hikinobasi++){printf("おお\n"); SleepEx(200,TRUE);}
printf("天津飯「まずい17号を吸収しやがった・・・チャオズ俺は死ぬかも知れない\n");SleepEx(2000,TRUE);
printf("セル「天津飯!!雑魚が何をするつもりだ!」\n");SleepEx(4000,TRUE);
printf("天津飯「新気功砲!!ハー」\n");SleepEx(200,TRUE);
printf("セル「(゚Д゚)ぬお!\n");SleepEx(200,TRUE);
while(tensinhan>0){
printf("セル「<`Д´>おのれー」\n");SleepEx(200,TRUE);
printf("天津飯「(; ゚Д゚)ハァー!」\n");SleepEx(500,TRUE);
tensinhan-=seimeiryoku;}
printf("天津飯「化け物め・・・・うう・・・・」\n");SleepEx(5000,TRUE);
printf("セル「むううう」\n");SleepEx(1000,TRUE);
printf("セル「こんな雑魚に足止め食らうとは」\n");SleepEx(4000,TRUE);
cell=jinzo17+jinzo18;
for(hikinobasi=0;hikinobasi<100;hikinobasi++){printf("おお\n"); SleepEx(50,TRUE);}
printf("完全体セル「すばらしい力だ 諸君!!」\n");
SleepEx(10000,TRUE);
}
0189名前は開発中のものです。
2008/12/03(水) 05:38:32ID:ecRDRm37空のサーフェスを作成 → 一旦バックバッファに文字列を描画 → バックバッファから空のサーフェスに文字列の画像を取得
こうして予め文字列を描画しておいたサーフェスから
毎回メイン処理でDrawGraphしているのですが、どうもスッキリしません。
しかもGetDrawScreenGraphの説明にもある通り透過色が使用出来ません。
DXライブラリでは作成したサーフェスに直接描画出来ないのでしょうか?
やりたい事は「同じ文字列を毎フレーム描画する処理を軽くしたい」だけなのですが、
文字グラフィックファイルを用意することは出来れば避けたいので、良い方法があったら教えて下さい1
0190189
2008/12/03(水) 05:45:19ID:ecRDRm37(例えば説明文等の)同一の文字列を毎フレーム描画する処理を軽くしたいが
文字グラフィックファイルを用意する以外で良い方法があったら誰か教えて下さいです。
0191名前は開発中のものです。
2008/12/03(水) 09:09:23ID:Zrkeui/rフォントハンドルを毎回読み込んだりしていない?
0192189
2008/12/03(水) 17:18:45ID:ecRDRm37お返事遅くなって申し訳ありません。
当方の環境ではDrawStringでやった場合のFPSが30くらいでDrawGraphにすると60になりました。
DirectX自体、文字描画にGDIを使っているのでビデオカードで処理できるBitBltの方が高速だと思っていました。数年前の知識ですが。。
低スペックでも快適に動くように作りたいので、DrawStringは極力使いたくないです。
0193189
2008/12/03(水) 17:29:14ID:ecRDRm370194名前は開発中のものです。
2008/12/03(水) 18:07:17ID:o+fnXJLeそれともPC環境が悪すぎる?
俺普通にDrawString使ってるけど別に遅くなった事ないよ?
普通に60FPS出てる。古いノートパソコンで。
最高でまぁ10行程度の表示しかしてないけど。
0195名前は開発中のものです。
2008/12/03(水) 18:30:58ID:JlppSG1I192の知識通り、今も文字列表示は遅いよ。
189の方法が適切だと思うし、他に方法を提示できないのは申し訳ないけど、
少なくとも文字列表示が遅いって前提でレスされると無駄だと思ったので口を出してみた。
0196名前は開発中のものです。
2008/12/03(水) 18:37:18ID:JlppSG1I○少なくとも文字列表示が遅いって前提を否定するレスは無駄だと
0197名前は開発中のものです。
2008/12/03(水) 19:17:52ID:o+fnXJLe別にテストしたわけじゃなくて、普通に使ってるだけなんだが。
文字列表示が遅いってのが前提なら、そもそもグラフィック表示だって遅いだろ。
グラフィック表示が遅いから他の方法はありますか? って質問があったとしたら
まず現在どういう環境でどれだけのグラフィックをどういう方法で表示させてるのか教えろってのは普通の流れだろ?
そこをかっとばしてグラフィック表示処理そのものを早くする方法を考えるのは無駄な話だ。
0198名前は開発中のものです。
2008/12/03(水) 19:27:15ID:zxrZF3eH今与えられた情報だけではなんともいえんな
■ このスレッドは過去ログ倉庫に格納されています