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

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

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

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

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

過去スレ:DXライブラリ 総合スレッド
      http://pc11.2ch.net/test/read.cgi/gamedev/1197468399/
     DXライブラリ 総合スレッド 2008
      http://pc11.2ch.net/test/read.cgi/gamedev/1224923873/
0530名前は開発中のものです。2009/06/20(土) 01:08:17ID:ppcvkMn4
>>529
なん…だと?
0531名前は開発中のものです。2009/06/20(土) 01:49:27ID:FZJG9pXN
俺のクリムゾンは下からくる設定で作るわ
0532名前は開発中のものです。2009/06/20(土) 02:34:40ID:gQS8hglY
せっかくだから俺はこの赤い扉を選ぶぜ!!
0533名前は開発中のものです。2009/06/21(日) 02:15:20ID: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に何を入れていいのかが??状態。
リファレンス読んでもメモリ領域のサイズて書いてあるけど・・・

日本語おかしくてスマン
0534名前は開発中のものです。2009/06/21(日) 02:35:09ID:ffHKmVPn
numはメモリ領域のサイズってリファレンスに書いてあるじゃん。

てか、a.csvの内容はどんな感じになってんの?
0535名前は開発中のものです。2009/06/21(日) 02:48:44ID: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 ) ){エラー処理}
0536名前は開発中のものです。2009/06/21(日) 02:49:49ID: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

ごめん、メモリ領域のサイズってどうやって調べるの?
0537名前は開発中のものです。2009/06/21(日) 04:17:54ID:jkwbtsZu
コーディングしたのはおまいさんだろ?
0538名前は開発中のものです。2009/06/21(日) 08:29:25ID:vb/GsENJ
FileRead_gets(mapdata,sizeof(mapdata),filehandle);
0539名前は開発中のものです。2009/06/21(日) 09:37:49ID:SurdRKYg
>>507
遅れたけど正確にはダブルバッファリングしてるからティアリングはおきないよ。
データの構築中に画面に表示される事は無い。
あと垂直同期を待ちつつタイマーで調整する事も可能。
具体的にはタイマーでfpsを調整すれば、ゲームが基準にするのはタイマーじゃなく、
一定間隔が保障されてるフレームを基準にすればおk
0540名前は開発中のものです。2009/06/21(日) 13:35:35ID:QJhUeuVR
マップの縦横が固定長なら
ifstream+For2重ループで読み込んでしまえば良い
都合のいいことに半角スペース無視ってくれるからね

c++知らなければスルーしてよし
0541名前は開発中のものです。2009/06/21(日) 13:59:11ID:E25maqZD
垂直同期を待つってことは動作速度がリフレッシュレート固定になるってことじゃないの?
最期の2行の意味をくわしく。
0542名前は開発中のものです。2009/06/21(日) 14:24:01ID:ZO5ct3aw
可変レートの場合、
60の時は、前回の1/60秒後の世界を描くし50の時は1/50秒後の世界を描くんだろう。
0543名前は開発中のものです。2009/06/21(日) 14:40:01ID:/SjwP+Lm
ググってると公式サイトのリファレンスに載ってない関数が時々出てくるんですけど、
そういうのが載ってる詳細なリファレンスは無いんですか?
0544名前は開発中のものです。2009/06/21(日) 15:01:10ID:E25maqZD
擬似コードでいいからプログラムで説明してくんない?
下記に追記する形で。

while(1){
  main_loop();
  flip();
}
0545名前は開発中のものです。2009/06/21(日) 15:55:05ID:gvSWV/Tl
1秒間に100ドット移動させたい時。

  :
ScreelFlip()
時間計測A(ミリ秒)
  :
ScreenFlip()
時間計測B(ミリ秒)
  :
移動距離算出 100 * ( B-A ) / 1000
  :
ScreenFlip()
時間計測〜

って感じ?
0546名前は開発中のものです。2009/06/21(日) 17:22:04ID: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してる時間が無駄だから…
0547名前は開発中のものです。2009/06/21(日) 17:24:40ID: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;
}

それとも描画と計算は別スレッドにするか…
0548名前は開発中のものです。2009/06/21(日) 20:10:23ID: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ならそのままでいいが、ゲームスピードだけは死守するのならフレームスキップ(コマ落ち)が必要になる。
この方法も色々あるので今回は割愛。
0549名前は開発中のものです。2009/06/21(日) 20:20:31ID:E25maqZD
結局ティアリング発生するじゃん
0550名前は開発中のものです。2009/06/21(日) 20:27:19ID:SurdRKYg
せっかく説明したのになにその全然読んでないようなレスは。
ティアリングの話がしたいの?
>垂直同期を待つってことは動作速度がリフレッシュレート固定になるってことじゃないの?
これを解決したいの?
どっちなの?
てか548を読んで解決出来なかったの?
質問しといてなんなの。
0551名前は開発中のものです。2009/06/21(日) 20:38:53ID:E25maqZD
ティアリングを発生させずにどんなリフレッシュレートのモニタでも同じ処理速度で動作させる方法があるかを聞いてる。
0552名前は開発中のものです。2009/06/21(日) 20:52:15ID:dtFx8GuN
14歳からのゲームプログラミング読めよ
書いてあるよ
0553名前は開発中のものです。2009/06/21(日) 20:52:45ID:n8mlBebR
>>551

>>539に書いてあんじゃん
SurdRKYgがかわいそすぎる、援護するぜ

んでぐぐったらすぐにわかりやすいのでてきたぞ
ちょっとは自分で調べろ
ttp://spitfire.client.jp/program/fps.html
0554名前は開発中のものです。2009/06/21(日) 20:55:52ID:dtFx8GuN
馬の耳に念仏だろうがな
0555名前は開発中のものです。2009/06/21(日) 21:15:08ID:E25maqZD
なるほど。
リフレッシュレートをAPIで固定する、か
リフレッシュレートを何らかの方法で取得して、1フレームの移動量をリフレッシュレートに合わせて変更する
しかないわけか。
0556名前は開発中のものです。2009/06/21(日) 21:26:14ID:nqKSgOSf
>>555
何が「なるほど」なんだか・・・
548をどう読めば
「リフレッシュレートを何らかの方法で取得して、1フレームの移動量をリフレッシュレートに合わせて変更する 」
の説明になるんだよ
読む気がないなら質問なんてするな
0557名前は開発中のものです。2009/06/21(日) 21:33:30ID:E25maqZD
>>548は垂直同期を待たない事で解決出来るとか言ってるから話にならないじゃん
ダブルバッファリングしてるからティアリングはおきないとか言ってるし。
0558名前は開発中のものです。2009/06/21(日) 21:41:05ID:OYxJ3LRg
ダブルバッファリングとティアリングは関係ないよな。

垂直同期信号待ちしないと、裏画面と表画面切り替える瞬間にモニタ画面更新される事もあるから結局ティアリングは発生する。
0559名前は開発中のものです。2009/06/21(日) 21:59:20ID:SurdRKYg
>>557
垂直同期を待たない事で解決出来るのは60fpsにならない場合の話だから下5行は読まなくていいよ。
しかもコマ落ちさせれば同期待ちでも解決出来るって書いてあるのに…。

120Hzのモニタで同期待ちするけど60fpsに制限すればゲーム速度も一定になるでしょ?
1フレームの移動量を変更するんじゃなく、移動量をフレームに合わせれば常に一定でしょ?

>>558
flipする時はコピーするんじゃなくてVRAMの参照先を変えるだけだから、VRAM上のデータを書き換え途中って事は無いと思うけど。
だからどの瞬間においても描画途中で画面更新される事は無いと思うんだけど違うのかな?
もちろんこれはティアリングの厳密な意味でのことなので、広義の意味の 画面のちらつき=ティアリング として使われる事についてはそれでいいけど。
0560名前は開発中のものです。2009/06/21(日) 22:03:54ID:nqKSgOSf
>>559
残念だけど垂直同期を待たない場合はビデオカードがモニタに映像を送信している間でも
参照先のVRAMアドレスを変えてしまうからティアリングは発生する
0561名前は開発中のものです。2009/06/21(日) 22:08:13ID:OYxJ3LRg
>>559

DXライブラリで裏画面への描きこみ、ScreenFlipってほとんどデフォだよね?
これが君のいうダブルバッファリングでしょ?

ScreenFlipの垂直同期信号待ちをOFFにして、
タイマーだけでスピード固定するようにして、フルスクリーンで動かしてごらん。
ティアリング一目瞭然だから。
0562名前は開発中のものです。2009/06/21(日) 22:11:13ID:SurdRKYg
>>560
そうなんだ。どうもありがとう。
同期しない事によるちらつきは画面更新部分と非更新部分の時間がばらばらな事による現象かと思ってた。
モニタのVsync信号の方が偉くて、そのタイミングでflipした時は次のVRAMの更新先を強制的に参照するみたいな認識でいいのかな。
0563名前は開発中のものです。2009/06/21(日) 22:16:46ID:SurdRKYg
>>561
ややや、ちらつくのは一目瞭然だけど、ティアリング(=上半分表画面で下半分裏画面のような状態)かどうかっていのは人間の目では判別不可能でしょ。
そのちらつきの原因は、更新部分と更新して無い部分の時間差によるものだと思ってた。
例えば背景が流れる画面の場合、1場面を■、次の場面を□とした場合、
■□■□■□■□■□
と見えればちらつかないが、
■■□■□□□■■□
のように見えるとちらついてみえると思うんだ。

でも>>560のレスで、ティアリング自体も起きているとのことなので一応解決出来た。
これはもうちょっと自力で調べてみようと思う。
0564名前は開発中のものです。2009/06/21(日) 22:23:40ID:OYxJ3LRg
「垂直同期信号待ち」ってのは要するに画面が全部描き終わるまで待つって事だから。
描き終わって、次の画面が描き始められるまでの一瞬の間にVRAMのアドレスを切り替える、って事だね。

そうする事で初めてティアリングを防げる。

>>563

ちらつくというより画面が波打つ、と言った方がよかったかな。

>ティアリング(=上半分表画面で下半分裏画面のような状態)かどうかっていのは人間の目では判別不可能でしょ。

ぴったりには合わないとは言え、だいたい60FPSで固定しようとしてスピード調整してるわけだから
ズレが生じるのも大体画面更新の同じタイミングになるわけ。
当然、人間の目にもはっきり判るよ。
0565名前は開発中のものです。2009/06/21(日) 22:40:54ID:Fv4f33jD
>>563
固定フレームレートの2Dゲーははっきりとわかる
キャラだけならともかく背景のスクロールもよくつかわれるからくっきりと

3Dとかで可変フレームレートだとわかりにくくなるかな

でも2Dメインでしょ、DXライブラリ
0566名前は開発中のものです。2009/06/21(日) 22:52:23ID:i9HN6tkr
問)
 垂直同期を待たずにティアリングを抑制する方法を答えよ
答)
 垂直同期信号の発生周期をフリップのタイミングの合わせればよい
0567名前は開発中のものです。2009/06/21(日) 23:06:19ID:FjFdKqe+
誤字があるから△だな
0568名前は開発中のものです。2009/06/21(日) 23:09:10ID:SurdRKYg
>>564
CRTの場合は走査線があるので画面の上半分と下半分で違う場合もあると思うんだけど、
液晶の場合は1画面をいっぺんに更新するわけだけど、それでも上半分と下半分で違うようなものになるってことなのですか?

VRAMから送られるデータは画面の左上から右下のデータが順次送られてるのかな?
そしてその送られてる時間がネックになっていてその間にflipしたらバックバッファの途中のアドレスから参照されるってこと!?
それってそもそもおかしくないですか?
バックバッファが出来上がっていない可能性もあるし、どうせ同期待ちしていないんだからとりあえずフロントバッファのデータを送りきってからバックバッファ分を送ればいいわけだし。
じゃあ将来例えば物凄くリフレッシュレートが高くなった場合、VRAMからモニタにデータを送る時間よりもモニタの更新速度の方が速かったりしたら
"同期待ちしてるのにティアリングが起きてる"っていう最悪な状態になっちゃいそうですが。
なのでやっぱり液晶の場合はティアリングは起きていないと思いますがどうでしょう?

>>565
えと、だから、画面更新に合わせずに好き勝手にflipしたら、
ある1枚が長く見えてるかもしれないしある1枚が欠損しているかもしれない。
だからちらつくように見えると思うんだけど、
肉眼でただちらつくように見えるからってそれはティアリングが起きてる証明にはなってないよ。
0569名前は開発中のものです。2009/06/21(日) 23:33:13ID:E25maqZD
とりあえず3行以内に要約する癖をつけてくれ
0570名前は開発中のものです。2009/06/21(日) 23:41:01ID:nqKSgOSf
>>568
>VRAMから送られるデータは画面の左上から右下のデータが順次送られてるのかな?
Yes

>そしてその送られてる時間がネックになっていてその間にflipしたらバックバッファの途中のアドレスから参照されるってこと!?
Yes

>バックバッファが出来上がっていない可能性もあるし、どうせ同期待ちしていないんだからとりあえずフロントバッファのデータを送りきってからバックバッファ分を送ればいいわけだし。

何を言いたいのか良くわからないけど
VRAMのデータをモニタに送るタイミングはPC側からは操作できない
リフレッシュレートに依存する

>じゃあ将来例えば物凄くリフレッシュレートが高くなった場合、VRAMからモニタにデータを送る時間よりもモニタの更新速度の方が速かったりしたら
>"同期待ちしてるのにティアリングが起きてる"っていう最悪な状態になっちゃいそうですが。

縦解像度nの画面データをモニタに送る流れ

0lineを転送→水平同期期間→1lineを転送→水平同期期間→
nlineを転送→垂直同期期間→0lineを転送→水平同期期間

つまり、垂直同期間は1画面分のデータを転送した後にくるので、
「VRAMからモニタにデータを送る時間よりもモニタの更新速度の方が速い」
というのはそもそもありえないよ、nline分送る前に垂直同期期間に突入する事はないから・・・
0571名前は開発中のものです。2009/06/21(日) 23:45:26ID:nqKSgOSf
2点修正

>リフレッシュレートに依存する
厳密には設定した解像度とリフレッシュレートに応じて発生する
水平同期信号と垂直同期信号に依存する

>0lineを転送→水平同期期間→1lineを転送→水平同期期間→
>nlineを転送→垂直同期期間→0lineを転送→水平同期期間
0lineを転送→水平同期期間→1lineを転送→水平同期期間→
(n-1)lineを転送→垂直同期期間→0lineを転送→水平同期期間
の誤り
0572名前は開発中のものです。2009/06/22(月) 00:07:43ID:kame7wv0
>>569
おまえ顔真っ赤だぞ?
0573名前は開発中のものです。2009/06/22(月) 00:08:14ID:1Ugl+7iQ
0574名前は開発中のものです。2009/06/22(月) 00:09:59ID:ErP4dB7R
>>570-571
そういうことだったんですね。
詳しい説明どうもありがとうございます。

>VRAMのデータをモニタに送るタイミングはPC側からは操作できない
>厳密には設定した解像度とリフレッシュレートに応じて発生する
>水平同期信号と垂直同期信号に依存する

ビデオカード側がモニタに送るタイミングを主導しているんだと思ってましたけど、そこが間違っていたようです。
0575名前は開発中のものです。2009/06/22(月) 00:14:49ID:kAGY284T
>>568
>だから、画面更新に合わせずに好き勝手にflipしたら、
>ある1枚が長く見えてるかもしれないしある1枚が欠損しているかもしれない。
>だからちらつくように見えると思うんだけど、

ちらつくっていうよりも、それはがたつくというか、コマ落ちとかそういう心配でしょ?
ティアリングってのは君が言ってるように上と下の画像にズレが生じる現象だから、
横に対して線が入って(実際にはドット単位でずれてる)波打ってるようにみえる。
コマ落ちだったらこうは見えないはずでしょ?

実際にプログラム動かしてみてみれば一目瞭然だと思うんだが……。
0576名前は開発中のものです。2009/06/22(月) 00:17:48ID:VZ3co5HH
>>552
14歳のやつ
計算式思い切り間違えているぞ。
実際にリフレッシュレートの違うモニタで確かめたから間違いない。
0577名前は開発中のものです。2009/06/22(月) 00:28:31ID:XZV3fJ2J
あれ分母と分子逆になってるのかなあ
0578名前は開発中のものです。2009/06/22(月) 09:11:17ID:4PYRYd3U
>>576
何がどう違うのか具体的に例をつけて書け
改良案も書け
0579名前は開発中のものです。2009/06/22(月) 14:34:23ID:N6BYq6eh
>>578
ママにでも頼め。
0580名前は開発中のものです。2009/06/22(月) 15:54:58ID:VZ3co5HH
>>578
自分で考える癖をつけよう。

適当な数字を入れて検証してみ。
明らかにおかしいのがわかるから。
どうおかしいのかわかれば治し方は自明だと思う。
0581名前は開発中のものです。2009/06/22(月) 17:39:07ID:oZ+8nNkj
>>575
学生さんなのかな?
デジタル写真に法的な証拠能力は無いわけだが
0582名前は開発中のものです。2009/06/22(月) 17:40:41ID:pV5yAQzs
なんの話だw
0583名前は開発中のものです。2009/06/22(月) 18:16:54ID:VZ3co5HH
どこの誤爆だw
0584名前は開発中のものです。2009/06/22(月) 20:45:11ID:C5JJD30U
これが若さか。
0585名前は開発中のものです。2009/06/22(月) 20:51:20ID:CIAC500Z
いいや幼さだ
0586名前は開発中のものです。2009/06/22(月) 20:51:55ID:kame7wv0
中年オヤジは黙っとけよクズ
いい年こいて2chやってんじゃねえよカス
0587名前は開発中のものです。2009/06/22(月) 21:05:11ID:CIAC500Z
こんなヤツもDXライブラリ使ってるのか……
0588名前は開発中のものです。2009/06/22(月) 21:10:13ID:kame7wv0
悪いの?使うのに制限あるなら教えてくれませんかね?
0589名前は開発中のものです。2009/06/22(月) 21:11:51ID:CIAC500Z
初心者向けライブラリのスレなんだし、カリカリしないでまったり行こうぜ?
0590名前は開発中のものです。2009/06/22(月) 21:32:05ID:6Vl6l2Pm
クソスレ晒しアゲ
0591名前は開発中のものです。2009/06/22(月) 21:58:40ID:kame7wv0
まったく・・
オッサンにもなってゲームでも作ってんスかね?w
0592名前は開発中のものです。2009/06/22(月) 22:52:27ID:wZqXAX7r
世界のゲームプログラマーの殆どがオッサンですよ
0593名前は開発中のものです。2009/06/22(月) 23:27:33ID:PR8N99oV
そもそもおっさんって何歳以上?
0594名前は開発中のものです。2009/06/22(月) 23:37:18ID:6Vl6l2Pm
http://hideyoshi.2ch.net/test/read.cgi/lovesaloon/1235930554
0595名前は開発中のものです。2009/06/23(火) 00:57:26ID:JW/qeXlf
DXライブラリはDixq氏のゲームプログラミングの館の影響で東方厨が流れ込んできてるからこんなのはゴマンと居るよ
0596名前は開発中のものです。2009/06/23(火) 01:04:40ID:/wkYhisO
いちいち煽らない。
0597名前は開発中のものです。2009/06/23(火) 09:24:14ID:eUvBMQ0G
おっさんでもガキでも宇宙人でも何でもいいから、
DXライブラリでおもしろいゲーム創っていこう。
0598名前は開発中のものです。2009/06/23(火) 09:52:25ID:dhA25QDv
>>580
こういう奴は駄目だな……
デバッグ報告になってない
再現例も書けない奴は現場に出てこないでほしいと思う

そもそも「適当な数字を入れたら」ってのは、「適当な数字が必ず入る」という前提なのか?
プログラムの動作の中で「適当な数字」が入らざるを得ないような状況を説明できるのか?
例えばOSやモニタやリフレッシュレートを変えたらおかしい、と言うなら説明になるが
チート使ったらゲームがバグった、レベルの議論は論外だ
こういう人に限って動的な数値に固定値を代入したりしてるんだから
0599名前は開発中のものです。2009/06/23(火) 09:57:56ID:NMdhocxd
自分で調べようともしないで、他人に訊けば答えが返ってきて当然と思う人間の方が
現場では嫌がられると思うぞ。
0600名前は開発中のものです。2009/06/23(火) 09:58:29ID:NvkMU1Q4
>>598
わからないなら、わかりません教えてくださいって素直に言えばいいんだよ。
0601名前は開発中のものです。2009/06/23(火) 10:49:50ID:4P883XyE
嘘なら嘘でしたといったほうがいい
0602名前は開発中のものです。2009/06/23(火) 12:18:26ID:A0fh8Dl0
作ってて楽しいからゲーム製作してるんだろ?
なんでこんなカリカリしてんのさ
0603名前は開発中のものです。2009/06/23(火) 12:28:04ID:btxPW8HG
分をわきまえず背伸びしてるから疲れてるんだろ
0604名前は開発中のものです。2009/06/23(火) 15:57:39ID:+DVKp8CT
>>598
わからないなら素直にそういえばいいじゃない。

>例えばOSやモニタやリフレッシュレートを変えたらおかしい、と言うなら説明になるが
>>576

疑うならリフレッシュレート変えて実際に試してみ。
0605名前は開発中のものです。2009/06/23(火) 17:46:43ID:ifo/8btq
ソース見せてくれたら第三者にも判断つくんだけどね。
0606名前は開発中のものです。2009/06/23(火) 22:32:28ID:BZp72+wO
ここ現場じゃねーし
掲示板だし
そもそも教えない奴にこそ性格に問題抱えてる事がほとんど
0607名前は開発中のものです。2009/06/23(火) 22:34:58ID:BZp72+wO
わからない、とそいつが言ったら言ったで責めんの目に見えてるし
ググレとかそれ以前のことでしょとか嫌味吐くのおまえらじゃん
0608名前は開発中のものです。2009/06/23(火) 23:13:33ID:joZZV7Mo
フレーム単位で処理してモニタのリフレッシュレートに合わせて移動量を変えればリフレッシュレートによらず処理できることは分かるけど、
例えば、タイトル画面でスタートボタン押してから次の画面が表示されるまでの待ちの処理ってのはどうやってフレーム単位で処理すればいいんだろう。
0609名前は開発中のものです。2009/06/23(火) 23:19:45ID:+iWMMldZ
>>607
これだけ色々答えてくれる場でなんでそういう考えに至るのか。
あまりにガキ過ぎる。
0610名前は開発中のものです。2009/06/23(火) 23:21:51ID:UNSoodNB
そんなもん無視しろ
0611名前は開発中のものです。2009/06/23(火) 23:24:00ID:ifo/8btq
>>608

どういう意味?

待ちの時間って、本当に何もしないって事?
それともデータロードとかしてる時の事?
0612名前は開発中のものです。2009/06/23(火) 23:53:01ID:95CP5Nno
ゆとり乙
ガキは教えて貰うのが当たり前だと勘違いしてるから始末が悪い。
0613名前は開発中のものです。2009/06/24(水) 00:21:16ID:9O2FRRtx
移動量だけでなく待ちのフレーム数も可変にしないといけないとなるとちょっと面倒だな
0614名前は開発中のものです。2009/06/24(水) 00:45:52ID:km6ob3xz
>>607
//14歳本より
//リフレッシュレートの高い環境ほど1フレームあたりの移動量を小さくしfloatの配列にセットする
void SetFrameRate()
{
  float frametime = 0;
  unsigned int s = GetNowCount();//計算開始時刻をsに代入
  for(int i=0; i<30; i++)
  {
    ScreenFlip();
    unsigned int e = GetNowCount();//計測終了時間をeに代入
    frametime += e - s ;
    s = e;
  }
  frametime = frametime/30;//30回採取した経過時間の平均を取る
  for(int i=1; i<20; i++)
  {
    idouryou[i] = i / frametime * 16.67;//←ここの式が間違い!自力で治そう!
  }
}

解説文は間違っていないから単純ミスだろう
適当な数字を入れてみって言ったのは
frametimeの値が小さくなればどうなるか式に入れて考えてみってこと
試すまでもなくこの式がおかしい事が判る筈
0615名前は開発中のものです。2009/06/24(水) 01:14:19ID:OqjteeH5
FPS計測するとき同じミスよくやったなぁ
0616名前は開発中のものです。2009/06/24(水) 01:20:49ID:zu36k+NF
俺もそこおかしいと思ってずっと悩まされてた
答え言っちゃいけないのかな
あそことあそこ入れ替えるでおk?
0617名前は開発中のものです。2009/06/24(水) 01:31:30ID:km6ob3xz
>>616
うん。
それでおk。

ちなみに初版で気付いてラトルズに付属の葉書で出したが
C++本でも後の版でも訂正されなかった。
サポートページに訂正箇所のpdfがあるが読んだら全然違う箇所のことだった。
0618名前は開発中のものです。2009/06/24(水) 02:15:36ID:6DfYO0Sm
14歳から〜って読んでる人結構いるんだな
0619名前は開発中のものです。2009/06/24(水) 10:34:44ID:QnhT+AWI
知らぬは、著者ただ一人だけ
0620名前は開発中のものです。2009/06/24(水) 15:00:37ID:iWb66gX0
「14歳〜」って読んだこと無いのだけれど、
これ買ったらDXライブラリの作者さんに何らかのお金が行くんだろうか?
行くなら買ってもいいかなあ。
0621名前は開発中のものです。2009/06/24(水) 19:31:31ID:iPuVSgwO
>>616
何で答えを言っちゃいけないとかいう言葉が出るの?お前は?
バカなの間抜けなの?なにがそんなに秘密にしたがんの?死ねば?
0622名前は開発中のものです。2009/06/24(水) 20:29:05ID:2pcTgAck
釣りだとわかってるけど笑ってしまったw
0623名前は開発中のものです。2009/06/24(水) 20:33:55ID:cCHdRy2i
ティアリングに拘るよりやることがあるだろw
釣りであってくれw
0624名前は開発中のものです。2009/06/24(水) 20:53:30ID:km6ob3xz
ネタじゃなかったら日本が滅ぶw
0625名前は開発中のものです。2009/06/25(木) 00:07:29ID:lGFh6/SQ
ティアリングサーガだな
0626名前は開発中のものです。2009/06/25(木) 00:30:15ID:z4Ht8mWs
こだわるのはプログラマの性だしなあ
0627名前は開発中のものです。2009/06/28(日) 16:38:04ID:Mn3+4Pod
例えば
class Enemy{};

class Player{};
ってのがあったとして、両方とも座標用変数がpribate:になってる場合、両者の当たり判定はどうやって組んだらいいかな?

あと、Enemyをたくさん出したい場合って、class Enemy型の配列をつくっていいの?
それとも他になにか良い方法があるのかな?


今現在、練習を兼ねてミニゲームのようなものを作ってて行き詰っちゃって。
よかったら教えてください。
0628名前は開発中のものです。2009/06/28(日) 18:36:01ID:zlbWct1+
俺は面倒だからpublic でやってるけど
まあ普通は getx(){return x;} という public なメンバ関数から座標を取得するのかな

もう一方の方は俺はEnemy型のlist でやってるけど
配列でも別にいいんじゃないかな

まあ俺みたいなへぼいのから聞くより出来る奴から聞いたほうがいいと思うが
0629名前は開発中のものです。2009/06/28(日) 18:52:38ID:L4rlBUkj
Enemy中でplayer->touch_p(this->x,this->y)とかどうかな
■ このスレッドは過去ログ倉庫に格納されています