DXライブラリ 総合ス ..
384:名前は開発中のものです。
09/06/07 00:27:15 jsaQKHFo
>>380
努力しろとか、おまえ、何様ジャン?
385:名前は開発中のものです。
09/06/07 00:43:22 7g+XVYWN
MessageBox(NULL,"なんとか","かんとか",MB_YESNO)
これのメッセージの中身って、%dで変数表示したりできるんですか?
できるならどうやってやるんでしょうか、教えてください。
386:名前は開発中のものです。
09/06/07 00:47:04 jsaQKHFo
>>385
リファレンス読む努力しろ
こんな簡単な事ができなきゃやめちまえ
387:名前は開発中のものです。
09/06/07 00:57:18 WlXcjgXY
>>371-374
返答ありがとうございます。
どうも、うまく伝わってなかったみたいですね。
そうか、1つの建物なり乗り物を描画する時に縮小描画してるというわけですね。
それが普通ということですね。
>>386
あんたも努力しろって言ってるジャン
388:名前は開発中のものです。
09/06/07 00:57:54 fLd/zS9/
>>384
俺も379読んで380と同じ意見だ
384は379だけでわかるのか?
>>385
できない、sprintfを調べてみるといい
389:名前は開発中のものです。
09/06/07 02:35:15 3sx78L/g
当たり判定に三角関数が必要か?三平方の定理のことじゃないか
まあ俺は2次元しか知らんから分からんが
390:名前は開発中のものです。
09/06/07 10:52:33 OFYyutYg
いつからウミガメのスープスレにw
391:名前は開発中のものです。
09/06/07 11:57:27 caHBoLjZ
ウミガメノスープスレって何のことかと思って調べちまったじゃないかw
ある問題について出題者が回答者の質問にYes/No形式でヒントを与えつつ
解答を推理していくゲームか。
なるほど確かに、質問者がちゃんと状況を説明できず、情報も小出しにしかできないで
質問に答えようとする人間が、なんとか回答するに足るだけの情報を
引き出そうと四苦八苦するところが似ているな。
392:名前は開発中のものです。
09/06/07 12:07:51 OFYyutYg
>>391
ゲーム化したぜ(原作がスレって意味じゃないが)
スローンとマクヘールの体験版をプレイする作業に戻るんだ
393:名前は開発中のものです。
09/06/08 08:25:05 LOgaJ0S5
2Dスクロールゲームでさ
敵を出すときって、マップ座標の一定値までプレイヤーが来たら敵を出現させるって感じでいいのかな?
今敵の出現関数の引数にマップ座標渡してやってるんだけど、それだと思った所に出すのがめんどくさい。
もっといい方法ない?
394:名前は開発中のものです。
09/06/08 08:29:40 sCESisPc
なんかDXライブラリと直接関係ない質問が連発されるなぁ。
他にもっと適切なスレがあると思うんだが。
>>393
それで特に間違いはないと思うが、
マップデータに敵の存在情報を埋め込むという手もあると思うな。
自由スクロールかどうか等で、いろいろ工夫がいるようになるだろうけど。
395:名前は開発中のものです。
09/06/08 09:03:31 5KFTi9VQ
だったら誘導してやれば
2Dスクロールゲームと言ってもいろいろあるからそれにもよる
396:名前は開発中のものです。
09/06/08 10:40:15 tSfMBcni
というかどのスレか誘導して欲しい。
確かにDXライブラリ以外の話題はスレ的によくないと思うし。
397:名前は開発中のものです。
09/06/08 11:12:30 WLx6NXXx
2Dスクロールで敵が出ると言ってもシューティングや他のアクションゲームもあるし
それらで別れるからなあ。
398:名前は開発中のものです。
09/06/08 11:33:19 cazy22G6
DXライブラリに関係ないゲームアルゴリズム系総合なら、ここでいいんじゃね?
【初心者】スレを立てる前にココで質問を【Part19】
スレリンク(gamedev板)
399:名前は開発中のものです。
09/06/08 13:24:46 5KFTi9VQ
でもまあアルゴリズムと言ってもDXライブラリ的なアプローチもあるやも知れん
400:名前は開発中のものです。
09/06/08 13:44:11 1Ns/D0F7
DXライブラリ的なアプローチって何やねん
401:名前は開発中のものです。
09/06/08 17:09:17 Q/bmJU+V
DXライブラリを使ったアルゴリズムなら?
402:名前は開発中のものです。
09/06/08 20:15:15 fnZML6Vn
前に教えてもらった14歳からはじめるシリーズを立ち読みして
その中で、わくわくゲームプログラミングを買ってきました
ゆくゆくはRPG作れたらいいなぁ、なんて
しかし最近の14歳は凄いな、ざっと見たけどこの本理解できんだろうか・・
403:名前は開発中のものです。
09/06/08 20:22:53 kVsTXpwy
スレチだが、サルでもわかるXXの本があるのだから、人間はサル以下と
404:名前は開発中のものです。
09/06/08 21:19:56 ScR8iayc
PC-6001版ゼビウス(タイニーゼビウス)を作ったのは小学六年生だと聞いて愕然とした。
405:名前は開発中のものです。
09/06/08 23:13:08 4xXNhiJa
小学生なめんな
年齢で知識の量は違っても論理力はたいして変わらないと思う
406:名前は開発中のものです。
09/06/08 23:22:34 gmTgYuK1
>>402
昔は小中でハンドアセンブルとかふつうだったし
テキストエディタ無かったし
アセンブラやコンパイラ無かったし
それでもゲーム作ってたからね
資料がネット無い時代だけど毎月大量の雑誌があったおかげで
今の10倍は情報量があると思う
14歳からはじめる〜の内容が毎月5冊くらい雑誌としてあったと思いねぇ
407:名前は開発中のものです。
09/06/08 23:31:36 VwdPN9TR
テキストエディタがないってどうやってコーディングしてたんですか
408:名前は開発中のものです。
09/06/08 23:35:38 1Ns/D0F7
>>406
モノがあふれてない方がかえって集中できてよいことの典型的な例ですな
409:名前は開発中のものです。
09/06/08 23:38:00 rJGFypi7
当時でも、機械語でゲーム製作できる小学生は相当凄い。
情報も今のほうが圧倒的に多いし楽に手に入る。
逆に、情報や手段が多いせいで入りにくくなってる。
410:名前は開発中のものです。
09/06/08 23:58:56 gmTgYuK1
>>407
方眼用紙もってドット絵かいたりハンドアセンブルばっかりしてた
変換表の半分くらいは暗記してたけど今じゃもう何も覚えて無い
c9がretだっけとかそんな感じ
ミスすれば暴走>リセットだったから実行するにも緊張した
結果机上デバッグにみんな慣れてソースやバイナリ見るだけですぐわかるようになってくる
バイナリ見たときのビッグエンディアンのわかりやすさはあこがれた
なんせ俺の暴走原因の90%は上位と下位のスワップし忘れがほとんどだったから
あと当時はPCの楽しさは俺達しかしらないんだぜ的なものもあったかな
というか全然普及して無いから虐げられてた
マイコン触れる=ネクラの変人で運動も何も出来ないんだろ的な
だからDXライブラリのように敷居を下げるライブラリにはがんばってもらいたい
今のほうが情報が入手しやすいというのはどうだろうね
CPUそのものとかOSとかデザパタとかそういうオカタイ情報は入手しやすいけど
ゲームを作りたい場合の情報の敷居の高さは半端じゃないよね?
徳間のM-FANみたいなのが必要かなと
411:名前は開発中のものです。
09/06/09 00:57:34 S/a6iR+n
ゲームプログラミングが初めてだという人、特にゲームを作りながら言語も覚えようという人は
最初は出来る限りシンプルなゲームから作った方がいい…と、僕は思うんだ。
80年代前半より前の生まれなら、ゲーム&ウォッチが通じるんだが
最近の子(20歳以下)だと、どのへんが分かりやすい例え何だろうか。
412:名前は開発中のものです。
09/06/09 01:10:43 oifuXaCW
>>407
>>410
俺も方眼紙にドット絵描いたり、
ノートにニーモニックでプログラム書いてから、ニーモニック→マシン語変換表見ながらマシン語に書き換えて、
それをバイナリエディタで入力とかやってたなぁw
ところで当時バイナリエディタって読んでたっけ? なんか別の呼び方だったような気がするが……。
413:名前は開発中のものです。
09/06/09 01:17:12 gC7kpoXP
モニタ
414:名前は開発中のものです。
09/06/09 01:46:37 PMo4RsPh
ここにいる人は40歳前後が多そうだな
415:名前は開発中のものです。
09/06/09 02:52:08 3VeuGuyA
そんな知識のある父がほしかった
416:名前は開発中のものです。
09/06/09 03:20:38 C8Rc41AV
今思い出すと俺も16,7の時もツクールで
なんであんなに創作意欲があったんだろうと思う
年取るとアイデアうかばない症候群になった
ただの鬱なのかもしれんが
417:名前は開発中のものです。
09/06/09 04:40:20 ur7it59g
>>411
VCもあることだしファミコンでいいんじゃね?
418:名前は開発中のものです。
09/06/09 05:12:36 6uG82dMD
高校でパソコン部を作りたいと申請したら
教師に「そんなおもちゃが一体何の役に立つんだ」と
即却下されたのもなつかしい
419:名前は開発中のものです。
09/06/09 09:36:31 S/a6iR+n
>>417
ファミコンだと、スーパーマリオ3やドラクエ3も含まれるんだぜ?
ケータイアプリとかなら行けるのかな? やったことないから分からんのだが。
420:名前は開発中のものです。
09/06/09 09:50:17 ur7it59g
どんなタイトルでもいいだろ
421:名前は開発中のものです。
09/06/09 11:52:23 S/a6iR+n
そうか、別にそう思うならそれでいいんだが。
422:名前は開発中のものです。
09/06/09 13:07:47 IuPr0Cmy
>>416
俺もツクールに数百時間費やしたくちだが、今思うと凄いな。
アイデアは今でも思い浮かぶんだが、頭の中だけで終わってそれを表に出そうっていう気にならない。
誰かが作ってくれるならアイデアとかは言うんだけど自分でやるってなるとめんどくさくて。
ちなみにその数百時間かけたのはセーブデータぶっ飛んで電子の藻屑に\(^o^)/
数百時間かけてすら、まだ1/5程度な完成度だったけど・・・
423:名前は開発中のものです。
09/06/09 14:14:05 +TNFSrzk
DXに関係ない話題がどうとかってかいてあったくせに、早速関係ない話題にあふれてる件
424:名前は開発中のものです。
09/06/09 14:29:51 /uwI++Tj
2chなんてそんなもんさ
425:名前は開発中のものです。
09/06/09 14:45:39 /EtnpSFu
どうとか言った人間と話題に出してる人間が別人だからこそだろ。
426:名前は開発中のものです。
09/06/09 23:50:55 ggNV6tYD
DXライブラリで、選択肢並び替え問題を作っているんですが、ちょっと行き詰ってしまったので、質問させてもらいます。
プログラムとしては、選択肢を選んだ順番に配列に格納して、正しい解答と比較することで正誤判定をしています。
一応、選択肢を選んで決定するところまではできたのですが、正誤判定の部分?がうまくいかないんです。
正しい順に選択肢を選んでも、間違っているということになっているみたいです。
なぜでしょうか?
あと4回目に選択肢を選ぶと、変な文字が表示されるのはなぜでしょうか?
自分の作ったプログラムです。
ヘッダファイルとメイン部分、会話(選択肢並び替え)部分に分かれています。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
C言語をはじめて1年、DXライブラリをはじめて2か月くらいなので、やさしく教えてください。
お願いします。
427:名前は開発中のものです。
09/06/10 01:02:39 EOc9oIq+
>>426
char input[5][1];
をグローバルにすればとりあえず動くと思う
ところで、要素数1だったら配列の意味なくね?
アドバイスとして、
↓の関数あたりを使えばもう少しスマートに書けると思う
sprintf、strcmp (C言語)
DrawFormatString (DXライブラリ)
428:名前は開発中のものです。
09/06/10 15:37:12 UXlA/6A3
>>427
inputをグローバル変数にしたら、うまくいきました。
アドバイスしていただいたことも参考にして、もう少しスマートなプログラムが書けるように努力します。
本当にありがとうございました。
429:名前は開発中のものです。
09/06/10 22:45:00 kJPqJciV
はじめてだから優しくしてねって言うと
かえって乱暴に扱われるってばっちゃが言ってた
430:名前は開発中のものです。
09/06/10 23:47:48 yn44iXp9
こんなとこでじっちゃの性癖を暴露せんでもよかろう。
431:名前は開発中のものです。
09/06/11 23:55:55 GA3GCHk+
int keiken;
if(keiken==0)printf("童貞乙");
432:名前は開発中のものです。
09/06/12 00:00:02 ADvlYAyg
>431
初期化しとけ
433:名前は開発中のものです。
09/06/12 00:04:48 M4d3vxIH
>>432
こうですか?分かりません><
#define KEIKEN 0
if(KEIKEN==0)printf("童貞乙");
434:名前は開発中のものです。
09/06/12 04:04:32 Yy7W6LDG
こうでしょ
int keiken=0;
if(keiken==0)printf("童貞乙");
435:名前は開発中のものです。
09/06/12 07:22:27 9cqRM4P7
const int keiken=0;
if(keiken==0)printf("童貞乙");
436:名前は開発中のものです。
09/06/12 08:37:17 yeEoVlcI
これだからプログラミングはやめられないw
437:名前は開発中のものです。
09/06/12 11:39:23 jHstWpts
int keiken = 0;
keiken ++ ;
keiken ++ ;
keiken ++ ;
keiken ++ ;
if ( 1 ) printf ( "童貞乙" ) ;
これで。
438:名前は開発中のものです。
09/06/12 12:18:42 xPu8mGZk
雑談するにしても、せめてDrawFormatStringを使うぐらいには気を回してくれよ。
439:名前は開発中のものです。
09/06/12 12:22:38 Upl7Se9G
動くわけねーと思ったら動いた。
インクリメントってスペースがあってもいいの?
440:名前は開発中のものです。
09/06/12 12:33:12 5rESS90A
半角スペースは無視されるだろ
441:名前は開発中のものです。
09/06/12 12:48:39 l4TbPUJW
if(keiken)
とか
if(!keiken)
ってみんなあんま使わない?
視認性重視で「==1」「==0」なのかな?
某神録のサイトでも今見たらそんな表記だった。
442:名前は開発中のものです。
09/06/12 13:02:13 jHstWpts
>441
よく使うと思うが、今回は単に>431に合わせただけじゃない?
あとは掲示板で見やすい書き方というのはあるかもしれんね。
443:名前は開発中のものです。
09/06/12 13:08:28 AJoYy9jz
あんま面白くなかったけど、今回のは0回かどうかが重要だから
あえて==0使ったんでしょ。
実際のコードでもそういうことはやる。
444:名前は開発中のものです。
09/06/12 13:48:30 6cWATceQ
>>441
0であることを強調するため。
あと文化圏の違いもある。
0が偽じゃない言語も多数存在するから、そういう言語出身の人は
if(keiken)というコードは気持ち悪く感じる。
逆に生粋のC/C++の人はif(keiken==0)というのは冗長に感じる。
俺は簡潔性よりもわかりやすさを重要と考えてるから、==で比較する。
使う言語がC++だけじゃないってのもあるけど。
445:名前は開発中のものです。
09/06/12 13:57:03 +pEtBUBP
URLリンク(www.youtube.com)
こういうのDXライブラリで作ってるのかな
446:名前は開発中のものです。
09/06/12 13:58:09 +pEtBUBP
>>441
while(!CheckHitKey(KEY_INPUT_ESCAPE)){
}
おおこういう表記もできるのか
447:名前は開発中のものです。
09/06/12 14:39:12 Nk+ds+Ow
変数自体の評価なら「==」で結ぶけど、
関数の戻り値なら>>446みたいな感じで書くかな。
448:名前は開発中のものです。
09/06/12 15:36:56 CIdl30UY
2値もしくはそれに準じるものなら>>446
3値以上なら(不)等号あるいはswitchを使うかな
if (!strcmp(str, "hoge")) // 一致したら
とかは気持ち悪い
449:名前は開発中のものです。
09/06/12 16:05:58 wLR5hiQv
スタイルは人それぞれ。自分に合ったやり方で書けば良いよ。
450:名前は開発中のものです。
09/06/12 18:56:18 g9ISpJC5
if (0==keiken)
やっぱこれは見づらいのかな
451:441
09/06/12 19:00:21 l4TbPUJW
>>450
俺自身はそれ。
会社でfalse==keikenって書いたら!に修正されていたけど
452:名前は開発中のものです。
09/06/13 10:14:12 yreqn12m
具体的な数値や列挙が書いてあるだけマシ
世の中には条件式を省略しようとする輩がいるから
453:名前は開発中のものです。
09/06/13 10:24:26 yreqn12m
だいたい
if(hoge()){
…
}
じゃ返値をひとつだけ判定することができないじゃないの
あとでhoge()の返値を増やしたら予期せぬ動作をする可能性が高い
hoge()の返値を絶対に増やさない!なんて自信満々に言える奴は少ないでしょ
==で結べば必ず1つの返値で動作するから安全
454:名前は開発中のものです。
09/06/13 13:01:19 khmiiTOM
>>453
C++は多値返せないよ
戻り値のとり得る値が増減する、とエスパーすると、
関数の戻り値っていうのは、関数本来の意味を参照すると、
関数の作用そのもの、すなわち関数が実装する機能そのもの。
(わからないならSchemeやHaskellとか関数型プログラミング言語を一度触ってくれ)
これが変更されるということは、すなわち関数の機能が変わったか、設計の錬度が全く足りてない
(どんな機能を実装するかすらあやふやだった)かどちらか。
どちらにせよその変更は、その関数を使用するコード全体に波及する。
だから
>あとでhoge()の返値を増やしたら予期せぬ動作をする可能性が高い
この指摘はずれてる。
繰り返しになるけど、戻り値の変更はそれを使用するコード全体に波及するから、
予期せぬ動作をする可能性が高い、じゃなくて、予期せぬ動作をしないようにコード
を変更しないといけない。
455:名前は開発中のものです。
09/06/13 15:58:30 MRDz7JnU
>>453
実装の修正は何度もやるとして
インターフェースや振る舞いはなかなか変えないもんだ
というか、戻り値の意味が2通りを超える時は
関数名も変えざるを得ない気がするが
456:名前は開発中のものです。
09/06/15 23:58:33 FuxW1Dfe
Windows 7 のペイントでpng保存しても
透明色指定しても透明にならない
bmp2pngが必要
457:名前は開発中のものです。
09/06/16 01:46:16 H4jkoMGr
文字列を画面の中央に表示したいけど
何かいい方法あるかな?
x座標を調整するの面倒だ
458:名前は開発中のものです。
09/06/16 02:10:16 1CAlzcIC
>457
自分は使ったことないんで分からないけど、
GetDrawStringWidth
GetDrawFormatStringWidth
というのはどう?
で、長さを調べてxを調整して、文字列を出力するところまでを1つの関数にしちゃうの。
459:名前は開発中のものです。
09/06/16 02:19:38 qN6akUYZ
ドラクエみたいに停止してるキャラに足踏みさせるいい方法ないかな?
countを0と1でオンオフしてSleep(300)とかで歩行と同じように調整はできたんだけど、
歩き出しが時々ぎこちないので悩んでます。sleepじゃなくていい方法が思いつかない
460:名前は開発中のものです。
09/06/16 02:28:14 H4jkoMGr
>>458
フォントを変えないならいける
CreateFontToHandleで作ったフォントデータだと駄目っぽい
>>459
countを範囲でオンオフ切り替えてみては
if(count%40<20)//ドロー
else //ドロー2
count++;
461:名前は開発中のものです。
09/06/16 02:34:01 wxVXqeT5
>>460
GetDrawStringWidthToHandleがあるじゃん
462:名前は開発中のものです。
09/06/16 02:36:09 H4jkoMGr
>>461
うわ・・・恥ずかしい・・ごめんなさい
ありがとねん
463:名前は開発中のものです。
09/06/16 03:45:39 1CAlzcIC
>459
そもそもSleep使ったら何も出来なくなるんじゃ?
464:名前は開発中のものです。
09/06/16 08:51:37 mvp6g5dM
歩行絵+右足踏み出し絵と左踏み出し絵を描けばいいだけじゃね?
465:名前は開発中のものです。
09/06/16 09:09:09 q6YxOHAd
while(ProcessMessage()!=-1){
ClearDrawScreen();
if(count<20) 右足が前に出てるキャラ表示
if(count>=20&&count<40)左足が前に出てるキャラ表示
ScreenFlip();
WaitTimer(10);
count++;
if(count==40)count=0;
}
うーんよくわからん
466:名前は開発中のものです。
09/06/16 09:54:16 1CAlzcIC
>465
基本的な考え方はそれでいいと思うよ。
あとせっかく答えてくれた>460の答えも読んどいた方がいいんじゃね?
467:名前は開発中のものです。
09/06/16 10:06:16 yTy6SiIo
>>465
基準FPS値決めて、フレーム数と秒が変換できるようにしてみるといい
あとWaitTimer(10)とかいうのはジョークだよね?w
468:466
09/06/16 10:16:47 1CAlzcIC
とりあえず>466の日本語がおかしいってのはスルーしてくれると嬉しい。
>>467
おや、見逃してたw
もしかして>463(俺)の発言を勘違いしちゃったのかな……? だとしたらちょっと責任感が。
469:名前は開発中のものです。
09/06/16 12:57:31 zt3Tshey
>>467
たぶんWaitTimer等の関数を使わないと高速足踏みに見えると感じて、
こういう手段で自然に見えるようにしたんじゃないかな。
一秒でひとつの動作をループさせる必要はないからこれはあまり良くないと思うけど。
470:名前は開発中のものです。
09/06/16 13:19:46 1CAlzcIC
>469
count値20ごとに表示を変えてるみたいだし、それは大丈夫なんじゃないかしら?
471:名前は開発中のものです。
09/06/16 14:04:12 KbLsp5Ay
ScreenFlipで垂直同期信号待ちが行われているかどうかで変わってくるような。
472:名前は開発中のものです。
09/06/16 14:17:30 MjcTUWQv
WaitTimer使う位なら count<20 の値を増やした方がよくね
473:名前は開発中のものです。
09/06/16 16:03:45 rewLOGjy
時分割で状態変移したいのなら、コルーチン使ってみては?
と上級者ぶってみるわ
474:459
09/06/16 18:26:00 qN6akUYZ
いろいろ意見ありがとう。
WaitやSleepは使わずにFPSとかFrameやらを使って試行錯誤してみます。
countを0と1でオンオフにしてたけど>>465のようにフレームカウントにしてやってみます。
475:名前は開発中のものです。
09/06/16 18:35:39 1CAlzcIC
別人だったんか!
476:名前は開発中のものです。
09/06/16 23:35:34 8GILQKQT
リフレッシュレートの概念がわからないと変なの書いちゃうぞ
レートは60ヘルツかも100ヘルツかもしれないし
65とか75とか微妙な数値になることもある
DXライブラリの教本にあるように書かないと、動作環境が変わった時に同じように動く保証がない
俺が以前に見た酷い例
FPSが60切ると点数がどんどん減る意味不明なゲーム
しかもどんなアルゴリズムか知らんが、FPS60でも点数が減りっぱなし
ああいう「自分の環境しか見ない」人間は駄目だな
477:名前は開発中のものです。
09/06/16 23:40:46 fYBFrBfu
ゲーム機のゲームってその辺固定だからなにも考えなくていいんだよなー。
478:名前は開発中のものです。
09/06/16 23:56:34 1CAlzcIC
>>476
と言っても、個人レベルの開発でどこまで他の環境を考えられるやら。
定番のアルゴリズムとかは書けるかもしれないけど、それだけじゃ意味ないし。
結局のところ「知らね」って言いきるしかできない。
479:名前は開発中のものです。
09/06/16 23:59:57 +nd9Tj3k
俺今作ってるゲームはリフレッシュレート無視しちゃってる。
ティアリングが気になるんだよなぁ。
他人が作ったゲームは60FPS超えるやつとかあるけど
ティアリングあまり気にならないんだよな。どうやってんだろ。
480:名前は開発中のものです。
09/06/17 00:27:22 gsrBiXQc
>>469
WaitTimer(10); 入れるとCPU使用率が下がる ただそれだけw
481:名前は開発中のものです。
09/06/17 00:32:32 s0zhQi6M
>>479
君みたいな人が駄目らしいよ
自分の環境しか見ない人間は駄目なんだってさ
ていうかさ、FPSが60切ると点数がどんどん下がるゲームかどうか
ソースもアルゴリズムも考えずにどうやって判別したのかねwプッw
偉いなぁこの人wプレイしただけでバグの原因分かっちゃうって>>476は神だねwプッw
482:名前は開発中のものです。
09/06/17 03:56:59 moXGEW/H
環境を合わせる方法としては
1,Sleepを使ってFPSを30ほどに落としてやる。
2,時間と同期をとる。
くらいしか思いつかない。
483:名前は開発中のものです。
09/06/17 07:52:50 zFwmddUq
関係ないけど、テクスチャに描画する場合ってZバッファ効かないんだね
484:名前は開発中のものです。
09/06/17 08:55:08 Sg+3JQO3
リフレッシュレートをAPIを使ってある固定値に設定する
485:名前は開発中のものです。
09/06/17 15:01:39 v4ECr6VG
セガの新人教育の本の人いわく、
作りやすいのは固定フレーム、性能を活かしやすいのは可変フレーム。
自分は面倒なので、60固定前提でやってるんだが
(1)タイマ(ミリ秒)を取得して1フレームの規定時間(16msec)が過ぎるまで待つ
(2)モニタのVSYNCを待つ
(3)モニタのリフレッシュレートを変更する
の3パターン用意して、あとはユーザに適当に選んでもらおうかなと。
まずいかな?
486:名前は開発中のものです。
09/06/17 18:17:49 V4BAg+VP
ScreenFlip使えばFPS保たれるんじゃないの
487:名前は開発中のものです。
09/06/17 18:47:03 A2Hqv0+b
>ScreenFlip使えばFPS保たれるんじゃないの
・環境(グラボの設定)によっては垂直同期信号待ちがOFFになってる場合があるのでFPSは保たれない。
・垂直同期信号待ちがONだとして、FPS保てる状態でも、
モニタのリフレッシュレートを60にしてたり70にしてたりってのはユーザーの好き好きなので、
作り手の望んだとおりのFPSになってくれるとは限らない。
488:名前は開発中のものです。
09/06/17 20:28:42 00woQzQy
めんどくさいからゲーム機のゲーム作ろうぜ
489:名前は開発中のものです。
09/06/17 20:53:25 00woQzQy
URLリンク(www.gbadev.org)
URLリンク(www.pqrs.org)
URLリンク(omoshiro-joho.com)
URLリンク(nocash.emubase.de)
URLリンク(belogic.com)
490:名前は開発中のものです。
09/06/18 01:52:47 lg5GVuaj
>>481は得点表示も見れないようです
491:名前は開発中のものです。
09/06/18 04:16:26 eqFlz8O1
勝手にリフレッシュレート60に切り替える命令とかあればいいのに
492:名前は開発中のものです。
09/06/18 04:54:12 U/ILN7Qk
>>491
一応あるっしょ。
493:名前は開発中のものです。
09/06/18 05:03:47 4gTcdCic
別に少々速度違ってもいいじゃない
494:名前は開発中のものです。
09/06/18 05:07:59 U/ILN7Qk
>493
アクションゲームのゲーム速度2割アップとか結構きついですぜ
495:名前は開発中のものです。
09/06/18 07:25:22 8Inai5Jq
DXライブラリ3Dってどうなったの?
開発中止?
496:名前は開発中のものです。
09/06/18 09:48:52 obCaTvEe
60FPSのゲームを70FPSとか、とんでもないぜw
497:名前は開発中のものです。
09/06/18 16:23:14 FAWLSPyh
たまに弾幕シューティングが75FPSになったりするけど、
気づくのはいつもしばらくプレイしてからだった
498:名前は開発中のものです。
09/06/18 16:53:46 U/ILN7Qk
>497
気付かぬうちに難易度が上がってたり、タイミングが変わってミスを誘発させたりするって
ちょっと怖いよな。
499:名前は開発中のものです。
09/06/18 17:10:57 4gTcdCic
一般的に表示上のFPSが上がるとゲーム速度も上がるものなの?
ってことは2次元アクションでいえば1フレーム毎の移動量が固定なのか。
自分自身も楽だからそういう作り方をしているけど…
例えばあるゲームで
60FPSだと重いのでコンフィグで30FPSに変更って場合は
ゲーム速度そのものは変わらないものだと思っていた。
500:名前は開発中のものです。
09/06/18 17:35:08 u8KJWVMz
>>499
時間で処理、描画だけFPSで更新なら変わらないよ。
全体をFPS60処理だと60より上に上がらないようにしてるのが一般的かなぁ。
ツールで簡単に上げれたり、処理間に合わないとFPS下がって全体の速度も低下する。
501:名前は開発中のものです。
09/06/18 17:56:28 U/ILN7Qk
>499
フレームではなく時間単位で処理してるなら
ゲーム速度云々の話題にすらならんと思うよ。
502:名前は開発中のものです。
09/06/18 21:48:15 3XyNBKLr
しかし時間単位で処理すると確実にティアリングが発生するので画質面で劣るという
503:名前は開発中のものです。
09/06/18 21:57:55 y4gPpvjp
そんなの関係なくバッドノウハウ使わない限り起きるだろw
504:名前は開発中のものです。
09/06/18 22:12:42 4gTcdCic
発想を逆転させるんだ
ユーザーをゲームに合わしちまえばいいんだ
505:名前は開発中のものです。
09/06/18 23:01:35 7QIAxIr+
まともにゲーム作ったことある人手あげて〜?
506:名前は開発中のものです。
09/06/18 23:19:36 cOrVzTjy
>>502
違うんじゃない?
モニタのリフレッシュレートが60だろうが70だろうが時間単位で処理するからこそ
スピード一定でティアリングも発生しないようにできるんでしょ。
垂直同期信号が切ってあるなら、そもそもティアリングは発生してあたりまえだろうし。
507:名前は開発中のものです。
09/06/18 23:47:20 3XyNBKLr
モニタの画面更新のタイミングを無視してメモリ上の画面データを書き換えると言うことだから
1画面分のデータの構築途中でそのメモリイメージが画面に表示されて画面上部と下部でフレームがずれるということだから
ティアリングが発生するということじゃないの
508:名前は開発中のものです。
09/06/18 23:58:10 cOrVzTjy
「モニタの画面更新のタイミングを無視する」なら、時間単位で処理する意味ないでしょ?
なぜ時間単位で処理する必要があるかって言ったら、
垂直同期信号待ちをして、ティアリングを起こさないようにしたいけど、
ユーザーのモニタのリフレシュレートが60なのか70なのかが判らない、からでしょ?
509:名前は開発中のものです。
09/06/19 00:03:49 Wkij18nv
間違えた。逆だった。
実際の画面の更新途中でメモリ上の画面データが更新された場合に、描画済み画素と未描画画素でフレームがずれるためティアリングが発生する、だった。
要するにAPIでリフレッシュレートを60に設定して60前提で作ればよい。60に対応してないモニタを使ってるやつのことは知らない。
510:名前は開発中のものです。
09/06/19 00:08:11 AlkmRsbh
なんか「時間単位で処理」と「フレーム単位で処理」の認識が逆になってる気がするw
511:名前は開発中のものです。
09/06/19 00:12:38 s7w0uGNM
>509
FPS指定APIは過信してはいけない
上のほうにあるようにドライバ側の設定が優先される
512:名前は開発中のものです。
09/06/19 00:22:34 Wkij18nv
じゃあPC環境は糞
513:名前は開発中のものです。
09/06/19 00:47:10 pN8o6lEn
>509
「60以外は知らん」と言いきっちゃうのも、それはそれでアリな気がする
514:名前は開発中のものです。
09/06/19 02:05:59 7uKPrG8o
最近は液晶が殆どだしそれもありだな
515:名前は開発中のものです。
09/06/19 03:38:42 AlkmRsbh
液晶がどう関係するのか。
516:名前は開発中のものです。
09/06/19 08:04:02 huFKHnzQ
一般的な普及価格帯のやつは選択肢が60Hzや59Hzしかない
517:名前は開発中のものです。
09/06/19 09:00:27 Dq7L9OoN
>>516
20世紀へお帰り下さい
518:名前は開発中のものです。
09/06/19 09:40:02 4AnMu6gm
自己中心的なハード理論を押し付けるもんじゃない
動作環境をテキストに書いたら、それを満たすあらゆる環境で同じように動いてもらわないと困る
デフォルトで不具合が出る可能性があるなら、設定で変えられるようにしなきゃ駄目
なるべくたくさんの環境でテストするのも大事
519:名前は開発中のものです。
09/06/19 12:28:29 8D0wDPEb
難しいことしなくても、垂直同期かウェイトかはオプションで選べようにすれば問題ないだろ
520:名前は開発中のものです。
09/06/19 12:57:07 ciGq9GNb
全くその通りだと思うんだが、
そういう選択式になってるゲームってほとんどみないよな?
普通はどうやってんだろ、ってのが話題の焦点じゃないかな。
521:名前は開発中のものです。
09/06/19 15:25:14 pN8o6lEn
>>517
実際、60Hz固定のモニタも多いんじゃね?
522:名前は開発中のものです。
09/06/19 16:07:46 L4Ogxl+D
他に話題ねーのかよ
飽きた
523:名前は開発中のものです。
09/06/19 16:47:37 8D0wDPEb
何か話したい話題があるなら自分から振れと
524:名前は開発中のものです。
09/06/19 23:33:13 Dq7L9OoN
>>521
だから帰れってww
525:名前は開発中のものです。
09/06/19 23:50:46 L4Ogxl+D
んー
じゃぁDxLibの今後
俺はもう少し発展してくれてもいいと思う、3Dを強化して欲しいね
526:名前は開発中のものです。
09/06/20 00:41:17 ynTX3CaL
無理じゃね
3D強化するなら作り直しレベルだろ
527:名前は開発中のものです。
09/06/20 00:42:51 FZJG9pXN
デスクリムゾンレベルなら作れるw
528:名前は開発中のものです。
09/06/20 00:53:36 gQS8hglY
上からくるぞっ!気をつけろ!
529:名前は開発中のものです。
09/06/20 01:03:05 X3CDDO5o
>>526
いま3D機能作ってるって公式掲示板で言ってたけど・・・
意外とみんなチェックしてないんだな
530:名前は開発中のものです。
09/06/20 01:08:17 ppcvkMn4
>>529
なん…だと?
531:名前は開発中のものです。
09/06/20 01:49:27 FZJG9pXN
俺のクリムゾンは下からくる設定で作るわ
532:名前は開発中のものです。
09/06/20 02:34:40 gQS8hglY
せっかくだから俺はこの赤い扉を選ぶぜ!!
533:名前は開発中のものです。
09/06/21 02:15:20 dtFx8GuN
Platinumっていうマップエディタで、15*20マスのマップを作って
csv形式で出力して、読み込んで描画したいんだけど上手くいきません
#include "DxLib.h"
int WINAPI...
{
if( DxLib_Init() == -1 ) return -1 ;
int mapchip[256];
char mapdata[15][20];
int filehandle;
LoadDivGraph("a.bmp",256,16,16,16,16,mapchip);
f = FileRead_open("a.csv");
FileRead_gets(mapdata,num,filehandle);
このあとfor文でFileRead_getsで読み込んだ1行を15回くりかえして
mapchipに入れていきたいんだけど・・・
FileRead_getsのnumに何を入れていいのかが??状態。
リファレンス読んでもメモリ領域のサイズて書いてあるけど・・・
日本語おかしくてスマン
534:名前は開発中のものです。
09/06/21 02:35:09 ffHKmVPn
numはメモリ領域のサイズってリファレンスに書いてあるじゃん。
てか、a.csvの内容はどんな感じになってんの?
535:名前は開発中のものです。
09/06/21 02:48:44 aQAsxkjf
>>533
int mapdata[15][20],mapwidth= 0, mapheight= 0, mapchipwidth, mapchipheight, bitcount;
int filehandle;
char buf[1024];
filehandle = FileRead_open("a.csv");
if (filehandle==0){エラー処理}
int gyoucount = 0,retucount = 0, iVal,layercount;
while((FileRead_eof(filehandle) == 0)&&( gyoucount < mapheight+1 ))
{
FileRead_gets(buf, 1023, filehandle);
if (gyoucount == 0){
sscanf_s(buf, "%d,%d,%d,%d,%d,%d", &mapwidth, &mapheight, &mapchipwidth, &mapchipheight, &layercount, &bitcount);
}else{
while(retucount<mapwidth){
char *next_token;
if (retucount==0){
iVal=atoi(strtok_s(buf, ",",&next_token));
}else{
iVal=atoi(strtok_s(NULL, ",",&next_token));
}
mapdata[gyoucount-1][retucount] = iVal;
retucount++;
}}
gyoucount++;
retucount = 0;
}
FileRead_close(filehandle);
if( ( gyoucount != mapheight+1 ) || ( retucount != 0 ) ){エラー処理}
536:名前は開発中のものです。
09/06/21 02:49:49 dtFx8GuN
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1
1 1 1 1 1 0 0 0 0 0 0 0 1 1 3 3 0 0 0 0
1 1 1 1 1 1 0 0 0 0 0 0 0 0 3 3 0 0 0 0
1 1 1 1 1 1 1 0 0 0 0 0 3 3 3 0 0 0 0 0
1 1 1 1 1 1 1 0 0 0 3 3 3 3 3 3 0 0 0 0
0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 0 2 2 0 0
0 0 2 2 2 2 2 2 0 0 0 0 3 3 0 2 2 0 0 0
0 0 0 0 0 2 2 2 0 0 0 0 2 2 2 2 0 0 0 0
0 0 0 0 0 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0が草原で1が川で2が森で3が山です
1行ずつ読み込んでchar chip[ ][ ]に入れて
その番号をint型の数字に変換してmapchip[ ]で描画させたいんですが・・orz
ごめん、メモリ領域のサイズってどうやって調べるの?
537:名前は開発中のものです。
09/06/21 04:17:54 jkwbtsZu
コーディングしたのはおまいさんだろ?
538:名前は開発中のものです。
09/06/21 08:29:25 vb/GsENJ
FileRead_gets(mapdata,sizeof(mapdata),filehandle);
539:名前は開発中のものです。
09/06/21 09:37:49 SurdRKYg
>>507
遅れたけど正確にはダブルバッファリングしてるからティアリングはおきないよ。
データの構築中に画面に表示される事は無い。
あと垂直同期を待ちつつタイマーで調整する事も可能。
具体的にはタイマーでfpsを調整すれば、ゲームが基準にするのはタイマーじゃなく、
一定間隔が保障されてるフレームを基準にすればおk
540:名前は開発中のものです。
09/06/21 13:35:35 QJhUeuVR
マップの縦横が固定長なら
ifstream+For2重ループで読み込んでしまえば良い
都合のいいことに半角スペース無視ってくれるからね
c++知らなければスルーしてよし
541:名前は開発中のものです。
09/06/21 13:59:11 E25maqZD
垂直同期を待つってことは動作速度がリフレッシュレート固定になるってことじゃないの?
最期の2行の意味をくわしく。
542:名前は開発中のものです。
09/06/21 14:24:01 ZO5ct3aw
可変レートの場合、
60の時は、前回の1/60秒後の世界を描くし50の時は1/50秒後の世界を描くんだろう。
543:名前は開発中のものです。
09/06/21 14:40:01 /SjwP+Lm
ググってると公式サイトのリファレンスに載ってない関数が時々出てくるんですけど、
そういうのが載ってる詳細なリファレンスは無いんですか?
544:名前は開発中のものです。
09/06/21 15:01:10 E25maqZD
擬似コードでいいからプログラムで説明してくんない?
下記に追記する形で。
while(1){
main_loop();
flip();
}
545:名前は開発中のものです。
09/06/21 15:55:05 gvSWV/Tl
1秒間に100ドット移動させたい時。
:
ScreelFlip()
時間計測A(ミリ秒)
:
ScreenFlip()
時間計測B(ミリ秒)
:
移動距離算出 100 * ( B-A ) / 1000
:
ScreenFlip()
時間計測〜
って感じ?
546:名前は開発中のものです。
09/06/21 17:22:04 nC5CYBlY
ぼくのイメージではこんなだけど合ってる?
垂直同期が取れるなら
while(1){
main_loop();
sleep until 垂直同期60hz;
flip();
}
取れないなら
A = GetTickCount();
while(1){
main_loop();
B = GetTickCount();
sleep(17 - ((B - A) % 17)); //1tick = 0.001秒, 17tick = 1/60秒と仮定
flip();
A = B;
}
ただ、こうするとsleepしてる時間が無駄だから…
547:名前は開発中のものです。
09/06/21 17:24:40 nC5CYBlY
無駄を減らすために
main_loop()の処理時間が十分に短いなら
A = GetTickCount();
while(1){
do {
main_loop();
B = GetTickCount();
} while (B-A < 17);
flip();
A = B;
}
あるいはタイマーを使うか…
A = GetTickCount();
while(1){
main_loop();
B = GetTickCount();
SetTimer(17 - ((B - A) % 17), flip());
A = B;
}
それとも描画と計算は別スレッドにするか…
548:名前は開発中のものです。
09/06/21 20:10:23 SurdRKYg
>>541
そうとは限らないよ。
まずfps制限と描画を完全にわけて考える。
fps制限は60に設定したとする。
int nowtime = GetNowCount();
static int oldtime = 0;
static int frametime = 1000 / 60;
int diftime = nowtime - oldtime;
while(1)
{
if(diftime >= frametime)
{
oldtime = nowtime;
break;
}
else
{
Sleep(1);
nowtime = GetNowCount();
diftime = nowtime - oldtime;
}
}
これで垂直同期しようがしまいが60で固定された。
1ループで1フレーム1/60秒が保障されたので、1秒で100ドットキャラを進ませたいのなら、60フレームで100ドット進ませればおk
5秒後に何かをしたいときも、5秒をタイマーで計測するんじゃなくて300フレーム後に行えばおk
だから>>539で「ゲームが基準にするのはタイマーじゃなく、一定間隔が保障されてるフレームを基準にすればおk」と書いた。
ただ、これだとスペック不足によって60fpsが出ない場合や、リフレッシュレートが60以外でかつ垂直同期を待った場合中途半端な同期によって60fpsが出ない場合(これは垂直同期を待たない事で解決出来る)、
フレームがゲームスピードの基準になっているのでゲームスピードが遅くなってしまう。(処理落ち)
これはこれでおkならそのままでいいが、ゲームスピードだけは死守するのならフレームスキップ(コマ落ち)が必要になる。
この方法も色々あるので今回は割愛。
549:名前は開発中のものです。
09/06/21 20:20:31 E25maqZD
結局ティアリング発生するじゃん
550:名前は開発中のものです。
09/06/21 20:27:19 SurdRKYg
せっかく説明したのになにその全然読んでないようなレスは。
ティアリングの話がしたいの?
>垂直同期を待つってことは動作速度がリフレッシュレート固定になるってことじゃないの?
これを解決したいの?
どっちなの?
てか548を読んで解決出来なかったの?
質問しといてなんなの。
551:名前は開発中のものです。
09/06/21 20:38:53 E25maqZD
ティアリングを発生させずにどんなリフレッシュレートのモニタでも同じ処理速度で動作させる方法があるかを聞いてる。
552:名前は開発中のものです。
09/06/21 20:52:15 dtFx8GuN
14歳からのゲームプログラミング読めよ
書いてあるよ
553:名前は開発中のものです。
09/06/21 20:52:45 n8mlBebR
>>551
>>539に書いてあんじゃん
SurdRKYgがかわいそすぎる、援護するぜ
んでぐぐったらすぐにわかりやすいのでてきたぞ
ちょっとは自分で調べろ
URLリンク(spitfire.client.jp)
554:名前は開発中のものです。
09/06/21 20:55:52 dtFx8GuN
馬の耳に念仏だろうがな
555:名前は開発中のものです。
09/06/21 21:15:08 E25maqZD
なるほど。
リフレッシュレートをAPIで固定する、か
リフレッシュレートを何らかの方法で取得して、1フレームの移動量をリフレッシュレートに合わせて変更する
しかないわけか。
556:名前は開発中のものです。
09/06/21 21:26:14 nqKSgOSf
>>555
何が「なるほど」なんだか・・・
548をどう読めば
「リフレッシュレートを何らかの方法で取得して、1フレームの移動量をリフレッシュレートに合わせて変更する 」
の説明になるんだよ
読む気がないなら質問なんてするな
557:名前は開発中のものです。
09/06/21 21:33:30 E25maqZD
>>548は垂直同期を待たない事で解決出来るとか言ってるから話にならないじゃん
ダブルバッファリングしてるからティアリングはおきないとか言ってるし。
558:名前は開発中のものです。
09/06/21 21:41:05 OYxJ3LRg
ダブルバッファリングとティアリングは関係ないよな。
垂直同期信号待ちしないと、裏画面と表画面切り替える瞬間にモニタ画面更新される事もあるから結局ティアリングは発生する。
559:名前は開発中のものです。
09/06/21 21:59:20 SurdRKYg
>>557
垂直同期を待たない事で解決出来るのは60fpsにならない場合の話だから下5行は読まなくていいよ。
しかもコマ落ちさせれば同期待ちでも解決出来るって書いてあるのに…。
120Hzのモニタで同期待ちするけど60fpsに制限すればゲーム速度も一定になるでしょ?
1フレームの移動量を変更するんじゃなく、移動量をフレームに合わせれば常に一定でしょ?
>>558
flipする時はコピーするんじゃなくてVRAMの参照先を変えるだけだから、VRAM上のデータを書き換え途中って事は無いと思うけど。
だからどの瞬間においても描画途中で画面更新される事は無いと思うんだけど違うのかな?
もちろんこれはティアリングの厳密な意味でのことなので、広義の意味の 画面のちらつき=ティアリング として使われる事についてはそれでいいけど。
560:名前は開発中のものです。
09/06/21 22:03:54 nqKSgOSf
>>559
残念だけど垂直同期を待たない場合はビデオカードがモニタに映像を送信している間でも
参照先のVRAMアドレスを変えてしまうからティアリングは発生する
561:名前は開発中のものです。
09/06/21 22:08:13 OYxJ3LRg
>>559
DXライブラリで裏画面への描きこみ、ScreenFlipってほとんどデフォだよね?
これが君のいうダブルバッファリングでしょ?
ScreenFlipの垂直同期信号待ちをOFFにして、
タイマーだけでスピード固定するようにして、フルスクリーンで動かしてごらん。
ティアリング一目瞭然だから。
562:名前は開発中のものです。
09/06/21 22:11:13 SurdRKYg
>>560
そうなんだ。どうもありがとう。
同期しない事によるちらつきは画面更新部分と非更新部分の時間がばらばらな事による現象かと思ってた。
モニタのVsync信号の方が偉くて、そのタイミングでflipした時は次のVRAMの更新先を強制的に参照するみたいな認識でいいのかな。
563:名前は開発中のものです。
09/06/21 22:16:46 SurdRKYg
>>561
ややや、ちらつくのは一目瞭然だけど、ティアリング(=上半分表画面で下半分裏画面のような状態)かどうかっていのは人間の目では判別不可能でしょ。
そのちらつきの原因は、更新部分と更新して無い部分の時間差によるものだと思ってた。
例えば背景が流れる画面の場合、1場面を■、次の場面を□とした場合、
■□■□■□■□■□
と見えればちらつかないが、
■■□■□□□■■□
のように見えるとちらついてみえると思うんだ。
でも>>560のレスで、ティアリング自体も起きているとのことなので一応解決出来た。
これはもうちょっと自力で調べてみようと思う。
564:名前は開発中のものです。
09/06/21 22:23:40 OYxJ3LRg
「垂直同期信号待ち」ってのは要するに画面が全部描き終わるまで待つって事だから。
描き終わって、次の画面が描き始められるまでの一瞬の間にVRAMのアドレスを切り替える、って事だね。
そうする事で初めてティアリングを防げる。
>>563
ちらつくというより画面が波打つ、と言った方がよかったかな。
>ティアリング(=上半分表画面で下半分裏画面のような状態)かどうかっていのは人間の目では判別不可能でしょ。
ぴったりには合わないとは言え、だいたい60FPSで固定しようとしてスピード調整してるわけだから
ズレが生じるのも大体画面更新の同じタイミングになるわけ。
当然、人間の目にもはっきり判るよ。
565:名前は開発中のものです。
09/06/21 22:40:54 Fv4f33jD
>>563
固定フレームレートの2Dゲーははっきりとわかる
キャラだけならともかく背景のスクロールもよくつかわれるからくっきりと
3Dとかで可変フレームレートだとわかりにくくなるかな
でも2Dメインでしょ、DXライブラリ
566:名前は開発中のものです。
09/06/21 22:52:23 i9HN6tkr
問)
垂直同期を待たずにティアリングを抑制する方法を答えよ
答)
垂直同期信号の発生周期をフリップのタイミングの合わせればよい
567:名前は開発中のものです。
09/06/21 23:06:19 FjFdKqe+
誤字があるから△だな
568:名前は開発中のものです。
09/06/21 23:09:10 SurdRKYg
>>564
CRTの場合は走査線があるので画面の上半分と下半分で違う場合もあると思うんだけど、
液晶の場合は1画面をいっぺんに更新するわけだけど、それでも上半分と下半分で違うようなものになるってことなのですか?
VRAMから送られるデータは画面の左上から右下のデータが順次送られてるのかな?
そしてその送られてる時間がネックになっていてその間にflipしたらバックバッファの途中のアドレスから参照されるってこと!?
それってそもそもおかしくないですか?
バックバッファが出来上がっていない可能性もあるし、どうせ同期待ちしていないんだからとりあえずフロントバッファのデータを送りきってからバックバッファ分を送ればいいわけだし。
じゃあ将来例えば物凄くリフレッシュレートが高くなった場合、VRAMからモニタにデータを送る時間よりもモニタの更新速度の方が速かったりしたら
"同期待ちしてるのにティアリングが起きてる"っていう最悪な状態になっちゃいそうですが。
なのでやっぱり液晶の場合はティアリングは起きていないと思いますがどうでしょう?
>>565
えと、だから、画面更新に合わせずに好き勝手にflipしたら、
ある1枚が長く見えてるかもしれないしある1枚が欠損しているかもしれない。
だからちらつくように見えると思うんだけど、
肉眼でただちらつくように見えるからってそれはティアリングが起きてる証明にはなってないよ。
569:名前は開発中のものです。
09/06/21 23:33:13 E25maqZD
とりあえず3行以内に要約する癖をつけてくれ
570:名前は開発中のものです。
09/06/21 23:41:01 nqKSgOSf
>>568
>VRAMから送られるデータは画面の左上から右下のデータが順次送られてるのかな?
Yes
>そしてその送られてる時間がネックになっていてその間にflipしたらバックバッファの途中のアドレスから参照されるってこと!?
Yes
>バックバッファが出来上がっていない可能性もあるし、どうせ同期待ちしていないんだからとりあえずフロントバッファのデータを送りきってからバックバッファ分を送ればいいわけだし。
?
何を言いたいのか良くわからないけど
VRAMのデータをモニタに送るタイミングはPC側からは操作できない
リフレッシュレートに依存する
>じゃあ将来例えば物凄くリフレッシュレートが高くなった場合、VRAMからモニタにデータを送る時間よりもモニタの更新速度の方が速かったりしたら
>"同期待ちしてるのにティアリングが起きてる"っていう最悪な状態になっちゃいそうですが。
縦解像度nの画面データをモニタに送る流れ
0lineを転送→水平同期期間→1lineを転送→水平同期期間→
nlineを転送→垂直同期期間→0lineを転送→水平同期期間
つまり、垂直同期間は1画面分のデータを転送した後にくるので、
「VRAMからモニタにデータを送る時間よりもモニタの更新速度の方が速い」
というのはそもそもありえないよ、nline分送る前に垂直同期期間に突入する事はないから・・・
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4314日前に更新/234 KB
担当:undef