トップページgamedev
1001コメント397KB

DXライブラリ 総合スレッド 2008

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2008/10/25(土) 17:37:53ID:BCFbbKco
Cを習得した程度のスキルでも、
GUIのゲームを比較的容易に作成する事を可能にする、
「DXライブラリ」に関するスレッドです。

DXライブラリの詳細ついては
http://homepage2.nifty.com/natupaji/DxLib/
を参照して頂きたい。

DXライブラリに関するテクニックなどの情報交換などを行う事で、
多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。

過去スレ:DXライブラリ 総合スレッド
      http://pc11.2ch.net/test/read.cgi/gamedev/1197468399/
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
>>100
「ScreenFlipを使う前と後の時間差を利用してる方法」ってのを普通に解釈したらリフレッシュレートに依存せずに一定になるよ。
ScreenFlipの待ち時間に関係なく、1フレーム(1ループ)の差時間から移動距離を割り出せばok。
ただし、ゲーム画面がアクティブでなくても実際に時間は経過してるので、ゲームに戻るとその分進む(進んだ)ことになる。
これを回避するなら、ゲーム内で独自にインクリメントカウントを設置し、そこから移動距離を割り出せばok。
ゲームプログラミング独特の考え方だね。
0105名前は開発中のものです。2008/11/15(土) 21:40:57ID:zVe3F0+t
>>101
ブラウン管テレビは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:PnDW3j7Q
画面を書き換えたときに時間を取得し、前回取得した時間と比較して、
1ループが17ミリ秒(60FPS)になるまでウェイトをかけてやればいい
これが一番簡単で確実
0110名前は開発中のものです。2008/11/15(土) 22:34:05ID:RlpGwAN3
リフレッシュレートが60のときはScreenFlip依存でいいんじゃね
それ以外はタイマで
0111名前は開発中のものです。2008/11/15(土) 23:12:07ID:56rIt8Hu
>でもScreenFlipの待ち時間を基準にするなんて誰もしないと思うから

いや、俺してたし、してるしw
0112名前は開発中のものです。2008/11/15(土) 23:32:40ID:zVe3F0+t
>>111
その話をしてるのは君だけど、実際にそれを採用してる人はいないって事だよ。

もしかして君は採用もしてるの?
だとしたら自分が長々と説明したデメリットが解消できてないよね。
それを解消したくて質問したいならそれなりの場所でそれなりの質問方法を取ればいいと思うよ。
もしそうじゃないなら誰も採用しない方法を解説されてもややこしくなるだけだから…。
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
>>115
>ゲーム起動時に何を測るの?

ScreenFlipを一秒間繰り返して、その回数で判断。
>>98で書いたけど、垂直同期信号待ちをしてるはずなのに
ScreenFlipで待ってくれない場合があるから、
FPS値が異常に高かったらそうだと判断して
タイマー値によるウェイトかけるようにしてた。

>それと、切り替える必要性が見えないんだけど・・・?

それはどっちを基準にして?

ScreenFlipを基本として考えるなら、リフレッシュレートが変更された場合や
上で書いた垂直同期信号待ちしてくれない環境の時に異状スピードになってしまう。

タイマ値でウェイトかける場合は、やっぱりティアリングが気になるし、
1フレームごとに点滅するエフェクトとかがきちんと点滅しなくなる。
0117名前は開発中のものです。2008/11/16(日) 02:40:28ID:H38ODQJJ
>>116
えっと、だからね、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
Vsync待ち、かつ、タイマーで制御するんだよ。
これを前提に最初から読み返してみて。
0120名前は開発中のものです。2008/11/16(日) 14:59:43ID:Yf+kFgNP
ScreenFlipもやって、1/60secも待って、ってやらないと一定にならないし、ちらつきも解消されないよ。
0121名前は開発中のものです。2008/11/16(日) 17:43:53ID:fHnaEgZY
タイマー待ちを使うんならVsync待ち無しのScreenFlipじゃないと
ティアリングは発生しないけど動きが凄いガクつくぞ
ADVみたいに動きの少ないゲームならそれでも良いと思うけど、
STGやACTでは見るに耐えない
0122名前は開発中のものです。2008/11/16(日) 18:33:07ID:H38ODQJJ
60Hzに合わせれば60Hzの環境なら結局タイマーでウェイトしないから問題ないよ。
75Hzの環境なら60fpsに制限されるから多少はガクつくけどこれはトレードだね。
ちなみに3Dモノとか海外のゲームはfpsを出来るだけあげて垂直同期しないっていうのが主流みたい。

>>121みたいにfps制限はするわ垂直同期しないわっていうのは愚の骨頂。
ティアリングするわfps制限されてるわでひどいもんですわ。
0123名前は開発中のものです。2008/11/16(日) 21:17:57ID:gVsDrcFZ
>>102-103
ガッ
0124名前は開発中のものです。2008/11/16(日) 21:57:20ID:fHnaEgZY
>>122
なんでそんなに相手を見下したような態度なの?

>60Hzに合わせれば60Hzの環境なら結局タイマーでウェイトしないから問題ないよ。
それはわかってるよ
だから最初にリフレッシュレート測って垂直同期主体にするかタイマー同期にするか判断するんでしょ?
121はあくまでfpsとリフレッシュレートが一致していない場合の話

>75Hzの環境なら60fpsに制限されるから多少はガクつくけどこれはトレードだね。
ここで122の言うとおり垂直同期とるかとらないかはプレイヤーの好みの問題
オプションで選択できるようにすべきだと思う

>ちなみに3Dモノとか海外のゲームはfpsを出来るだけあげて垂直同期しないっていうのが主流みたい。
そうだね。3Dモノは可変fpsと相性良いよね。

>>121みたいにfps制限はするわ垂直同期しないわっていうのは愚の骨頂。
垂直同期をとらないことで手軽に入力に対するレイテンシを下げることができるし、
リプレイを取る目的でfpsを固定しなければならない場合もあるんだから、
短絡的に愚の骨頂というのはどうだろう

122的には60fps固定+垂直同期してない東方緋想天は愚の骨頂?
俺はそうは思わないけど・・・
0125名前は開発中のものです。2008/11/16(日) 22:50:57ID:5RilDqvE
2Dシューティングを過去いくつか作ってきましたが、
リプレイ周りの実装も含めて、やっぱりFPSは60に固定でロジックを組みますよ。
オプションで「Vsync待ちをするかタイマーか」を選択させてます。
124さんもリプレイの話をしているから、そういう前提で言ってるのだと思うのですが。
0126名前は開発中のものです。2008/11/16(日) 23:07:43ID:xtMr6+ch
リプレイって別にFPS固定必要ないような
入力があったキーとその時の経過フレーム数があればいいんだし
0127名前は開発中のものです。2008/11/16(日) 23:30:59ID:0yDeWpwc
おまいら もちつけよ.
0128名前は開発中のものです。2008/11/17(月) 01:36:47ID:GetktCW+
>>124
何そのゲーム。>東方なんたら
最悪だね〜。

>>126
だよねぇ。
0129名前は開発中のものです。2008/11/17(月) 03:32:51ID:qWlXMT4E
なんだ釣りか
0130名前は開発中のものです。2008/11/17(月) 18:51:51ID:TAngTg8T
なんだこんなすばらしいスレがあったのか>>1
0131名前は開発中のものです。2008/11/17(月) 21:49:06ID:E1tboJG/
DXライブラリで作った横スクロールアクションのソースってどこかに転がってない?
0132名前は開発中のものです。2008/11/17(月) 22:00:58ID:tSUha7RY
転がってるって・・・
作者の好意で公開してるソースをそんな言い方するなよ
0133名前は開発中のものです。2008/11/17(月) 22:04:49ID:Zhr1hzWJ
ニコニコで一時話題になった、しかけが外道なスーパーマリオもどきはソース公開してたと思う
01341252008/11/17(月) 22:57:25ID:pxmPH9a8
>126
たしかにそうですね。
ただ、自分の場合は、FPSを固定すればあとはキー入力さえきちんと記録できていれば
リフレッシュレートが違えどもリプレイがずれることがないのでそうしていました。

0135名前は開発中のものです。2008/11/17(月) 23:31:08ID:OriaVhLm
移動量固定方式か、経過時間による移動量計算方式かで
やり方も違ってくるんじゃないかな。
0136名前は開発中のものです。2008/11/18(火) 13:05:35ID:FZcPiuDy
>>133
しょぼんのアクション だっけ?
やっと1−1クリアだと思ったのに愕然とした記憶がある。
0137名前は開発中のものです。2008/11/19(水) 13:43:13ID:xnzA6xl6
DirectXのバージョンを9に移行するらしいね
0138名前は開発中のものです。2008/11/19(水) 14:54:42ID:TpPgoKXn
>>133
あれはやばいです
あれはほんとうに・・やばい・・。
この道10年のベテランですらあれを見ると悶絶して悶え死ぬレベル。
あのソースを読んだあの日、私は自分の人生について考えさせられました。
0139名前は開発中のものです。2008/11/19(水) 15:08:39ID:lxkh5WN5
そんなにすばらしいのか
0140名前は開発中のものです。2008/11/19(水) 15:11:10ID:Lz0a0oQh
思わず3回DLし直す位のレベル
0141名前は開発中のものです。2008/11/19(水) 18:41:54ID:TpPgoKXn
あれは伝説のソースですよ
0142名前は開発中のものです。2008/11/20(木) 23:58:11ID:UIc9LZep
DLしてみたが・・・凄まじいソースだな
0143名前は開発中のものです。2008/11/21(金) 00:08:16ID:AZA6fSH/
俺のソースも似たようなもんだなw
0144名前は開発中のものです。2008/11/21(金) 00:14:35ID:IPu5qEL0
汚いコード書ける奴って尊敬するわ
むしろ逆に頭良いと思う
0145名前は開発中のものです。2008/11/21(金) 00:46:35ID:PFCyKir9
部屋が汚くても気にしないやつがいるのと同じ
0146名前は開発中のものです。2008/11/21(金) 05:06:26ID:0gMw7+uw
http://fatalita.sakura.ne.jp/Software/cuirpgfordq3.lzh
これもマジキチ
0147名前は開発中のものです。2008/11/21(金) 05:58:28ID:VvYw+mZM
>>146
これはアイテム4つで実装力尽きるw
配列すら使ってないとかやべぇ

でもスレチ
0148名前は開発中のものです。2008/11/21(金) 12:55:25ID:3m8CIP+t
BASIC覚えたての頃、そんな風にGOTO文メインでテキストアドベンチャーゲームを作ったなあ…。
それにしてもその作者はDXライブラリ3Dの作者なの?
なんか色々考えさせられるな…。
0149名前は開発中のものです。2008/11/21(金) 15:36:28ID:ELcxKG7H
でもスレチ
0150名前は開発中のものです。2008/11/21(金) 19:40:33ID:yD9XL+v+
自分のスパゲティソースを晒す勇者はおらんのか・・
0151名前は開発中のものです。2008/11/21(金) 21:42:08ID:FU8hvFU5
さらしてどうすんのよw
0152名前は開発中のものです。2008/11/22(土) 22:21:51ID:j0m39ynA
タイピングゲーム作ってるけど疲れてきたぜ。
ゲーム一本完成させるって難しいな。
0153名前は開発中のものです。2008/11/23(日) 02:26:12ID:YAgqgFQm
完全体になる前にリリースすればいいじゃない(マリー
0154名前は開発中のものです。2008/11/23(日) 02:27:42ID:Ef5lma7p
プログラム歴3ヶ月おれもタイピングゲーム作ってます
プログラム練習としても面白いジャンルのような気がします
がんばりましょう
0155名前は開発中のものです。2008/11/23(日) 14:21:16ID:bJorsnCE
>>153
俺知ってるよ
そういうのをあじゃいるって言うんだよね
0156名前は開発中のものです。2008/11/23(日) 17:55:00ID:pnQpCtQf
画面全体をぼかしたいのですが、どうすればいいのでしょうか?

SaveDrawScreen()で画面全体を保存した後に、
その画像を加工して表示するという方法を試しましたが、遅くてとても使えませんでした。
ちなみに手順は
保存→加工→保存→表示です。
加工と二回目の保存の処理の間がとても遅かったです。

直接DXライブラリで描画してる画像をぼかせばもっと早くなると思うのですが、
DXライブラリで直接ぼかす方法がさっぱりわからりません。
どういう方法でぼかせれるのでしょうか?
0157名前は開発中のものです。2008/11/23(日) 20:09:39ID:YAgqgFQm
ブレンドモードを上手く使えばどうにかなるんじゃなかろうか。
昔、モーションブラーもどきを自分で作ったが細かいやり方は忘れた。
0158名前は開発中のものです。2008/11/25(火) 00:31:59ID:xYyBQpV1
>156
そのまま画像を描画

αブレンドを適当に128くらいに指定してxy数ドットずらして描画×数回…

こんなのでどう?
01591572008/11/25(火) 20:03:29ID:5UMAw8SP
>>158
ああ、そうそう。
そんな感じでできると思う。たぶん。
ずらし量やブレンド率でぼけ足上手いこと調整してどうにかする。
関数化できたら楽そうだ。
0160名前は開発中のものです。2008/11/25(火) 22:23:11ID:VmASE6nW
>>157-159
いろいろとありがとうございます。
アドバイスのおかげで、それらしいのはできました。
縦には動かしていないのですが、とりあえずそれっぽい動作はします。
ソースは以下の通りです。

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:MBrRa9Zc
640 / dot ←この計算をfor文の前にやって適当な変数に代入しておく
0162名前は開発中のものです。2008/11/25(火) 23:02:53ID:EDWbdjkC
>>160
i < 640/dot

i < 160/dot
くらいにまで下げてみる


ぼかすのがゲーム上そんなに大事じゃなかったら
このくらいで妥協するのが一番
01631572008/11/26(水) 02:18:18ID:eTjv2Xnv
>>160
そんなに回数要る?
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
>>160
本当に速度が必要で、それなりのクオリティーが欲しいなら
LoadSoftImage関数とLoadSoftImageToMem関数を使うといいかもしれない。

自分は近頃、DXライブラリまったく触ってなかったから、どんなもんか
わからんが、説明を読む限りではこっちの関数で処理して
GraphHandleをつけて、表画させる方が高速みたいだし・・・・・
0165名前は開発中のものです。2008/11/27(木) 05:33:03ID:9lHdy+ss
DXライブラリとは直接関係ないのですが、

DXライブラリとかの関数を変な使い方すると、めっちゃ重くなったりして(コンパイルエラーが出るわけではない)、
上手く扱わないとたとえ数百行のプログラムでさえ上手く動かないのに
市販されてる3Dゲームとかだとそれこそ想像もつかない量のプログラム書いてると思うんですが
それを全く重くならないように作るというのはまさに神の所業としか思えないんですが・・・
やはり職人的なひとはそれほどすごいってことでしょうか?
それとも単にまだ自分が未熟なだけでしょうか?

なんか抽象的な質問ですみません。
0166名前は開発中のものです。2008/11/27(木) 07:22:55ID:UFJsiMGy
>>165
普通に使っている分には問題ないと思うけど…
コード量も関係ないし。
メインのループ(秒間30〜60回くらい回しているとこ)の外で1回やれば済む処理を
ループの中で毎回やってたりしてない?
例えばグラフィックハンドルへの画像の読み込みを毎回やっているとか。
0167名前は開発中のものです。2008/11/27(木) 12:05:54ID:tLRoJzh6
DXライブラリもよっぽど変な使い方しない限りめっちゃ重くはならんでしょ。
そりゃまぁPCの性能にもよるけど。

市販されてる3Dゲームとかは、俺はヘボプログラマだからそれこそ神の領域にしか思えないけど
同じ市販ゲームでも、すごいグラフィックなのに軽快なのとか、やったらもっさりして重いのとかあるから
そこらへんはプログラマの腕次第でしょ。

凄腕のプログラマは極限まで無駄な処理を省いてるんだと思う。
0168名前は開発中のものです。2008/11/27(木) 17:02:45ID:HwZNU9zJ
メモリの1バイトは血の一滴ですね
0169名前は開発中のものです。2008/11/27(木) 18:56:41ID:9lHdy+ss
>>166-167
なるほどサンクス・・・
確かに無駄に繰り返してるかもしれない・・・。
0170名前は開発中のものです。2008/11/27(木) 20:46:39ID:GnzSYpCC
フォントのサイズ変更とかと勝手に予想
0171名前は開発中のものです。2008/11/27(木) 22:41:46ID:LOD/UyCK
>>161-164
ありがとうございます。
回数がご指摘の通り多すぎました。
>>157のコードと併用して、思っていたぼかしができました。
コードは私の作成したコードと>>157のコードを関数化しただけなので省略させていただきます。
0172名前は開発中のものです。2008/11/27(木) 22:48:28ID:tLRoJzh6
フォントのサイズ変更はしゃれにならんほど遅いからな……。
別フォント用意すりゃいいことだが。
0173名前は開発中のものです。2008/11/28(金) 05:15:28ID:10isJ4oY
SetWaitVSyncFlag(FALSE);

にしたらドラゴンボールの世界になってワロタ
0174名前は開発中のものです。2008/11/29(土) 16:25:44ID:BtMciNRd
PlayMusic関数で再生位置の指定ってできないの?
0175名前は開発中のものです。2008/11/29(土) 22:48:46ID:kaHILOZB
>>101

いますぐ昔の再放送の刑事ドラマやドラマの
事務所シーンを見るんだ!!!


パソコンのディスプレイあるだろアレみるとわかりやすい
0176名前は開発中のものです。2008/11/30(日) 02:55:10ID:Kx1+nHAm
>>175
あれ今見るとなんでそう見えるか理解出来るな
タイヤが逆回転して見えるのとかも
0177名前は開発中のものです。2008/12/01(月) 09:18:57ID:PQmt2oZj
3Dでゼルダみたいなゲーム作りたいんだけど
DXライブラリ(3D)で完璧に作ったのと
DirectXで完璧に作ったのだったら動きのサクサクさにどれくらい差が出るのかな?
PCの性能は結構良いのでそれは関係なく
個人的にはマリオ64くらいのクオリティーは出したいと思ってるんだけど
始めての大型ゲームなんで全く想像付かない
0178名前は開発中のものです。2008/12/01(月) 09:51:01ID:Mqk5OkvC
3Dのゼルダってまんま64とGCのゼルダじゃね?
0179名前は開発中のものです。2008/12/01(月) 10:23:13ID:PQmt2oZj
はい
0180名前は開発中のものです。2008/12/01(月) 16:53:55ID:B+fc1nCX
DirectXで作るって言ったってどうせ自分でラッピングするんだから一緒だと思うぞ
0181名前は開発中のものです。2008/12/01(月) 16:57:45ID:Mqk5OkvC
>>177
そのプロセッサ専用のライブラリを熟知してれば
サクサク動くゲームになる

例えばPS2ならEEとかのベクトル計算のためのライブラリの仕様とか
windowsマシンにはそんな計算機能はデフォルトじゃついてないから
どうしてもグラボ依存になる
0182名前は開発中のものです。2008/12/02(火) 00:02:20ID:zbFv8Mtr
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpc, int nC){
  ChangeWindowMode(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
どうでもいいがProcessMessage()の場所が俺の好みじゃなかった。
本文は読んでいない。
0184名前は開発中のものです。2008/12/02(火) 08:53:50ID:l3NK/S0H
SetWaitVSyncFlagがFALSEで無い限りは
0185名前は開発中のものです。2008/12/02(火) 09:50:01ID:ptyOGcVX
リフレッシュレートに依存する。
0186名前は開発中のものです。2008/12/02(火) 21:13:42ID:xSROB0kK
x^nの計算なんか描画処理に比べたらほんの一瞬
0187名前は開発中のものです。2008/12/02(火) 22:13:19ID:g62jpxUX
そういやCを独学でやってて最初に詰まったのがべき乗計算だったなw
0188名前は開発中のものです。2008/12/03(水) 05:14:23ID:Ts8WjI0J
>>153
#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
01901892008/12/03(水) 05:45:19ID:ecRDRm37
無駄に長くて分かり難くなってしまいました。
(例えば説明文等の)同一の文字列を毎フレーム描画する処理を軽くしたいが
文字グラフィックファイルを用意する以外で良い方法があったら誰か教えて下さいです。
0191名前は開発中のものです。2008/12/03(水) 09:09:23ID:Zrkeui/r
DrawStringで十分軽いと思う
フォントハンドルを毎回読み込んだりしていない?
01921892008/12/03(水) 17:18:45ID:ecRDRm37
>>191
お返事遅くなって申し訳ありません。
当方の環境ではDrawStringでやった場合のFPSが30くらいでDrawGraphにすると60になりました。
DirectX自体、文字描画にGDIを使っているのでビデオカードで処理できるBitBltの方が高速だと思っていました。数年前の知識ですが。。
低スペックでも快適に動くように作りたいので、DrawStringは極力使いたくないです。
01931892008/12/03(水) 17:29:14ID:ecRDRm37
フォントの変更は行っていないので、フォントハンドルは使用していないです。
0194名前は開発中のものです。2008/12/03(水) 18:07:17ID:o+fnXJLe
そんなにたくさんの文字を同時に表示してるのかな?
それともPC環境が悪すぎる?

俺普通にDrawString使ってるけど別に遅くなった事ないよ?
普通に60FPS出てる。古いノートパソコンで。
最高でまぁ10行程度の表示しかしてないけど。
0195名前は開発中のものです。2008/12/03(水) 18:30:58ID:JlppSG1I
いやそれじゃ全くテストになってないから。
192の知識通り、今も文字列表示は遅いよ。
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
確かに
今与えられた情報だけではなんともいえんな
0199名前は開発中のものです。2008/12/03(水) 19:41:02ID:RJPTfL79
文字列の長さ、量がまずわからない。

「フォントの変更は行っていない」というのが、フォントの大きさやアンチエイリアス有無の変更は行っているかもしれないとも読める。
0200名前は開発中のものです。2008/12/04(木) 00:31:01ID:jlPFeEOB
>>197
文字列表示はグラフィック表示より遅いって常識知らないの?
そこは議論の余地なしだから言ったまで。
それと、テストじゃないなら>>194の報告は不適切。
まあ上記の前提を知らなかった故だからしかたないと言えばしかたないが、ややこしくなるのでなかったほうがよかったな。

情報は少ないが、前提を知っているば容易に共感できるし、解決方法を知っている人ならこの情報量でも回答できるかもしれない。
0201名前は開発中のものです。2008/12/04(木) 00:33:46ID:GF73/yq8
>>197
>文字列表示が遅いってのが前提なら、そもそもグラフィック表示だって遅いだろ。

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