DXライブラリ 総合スレッド その3at GAMEDEV
DXライブラリ 総合スレッド その3 - 暇つぶし2ch301:名前は開発中のものです。
09/06/01 08:41:57 7hVJjQOF
キーを1回押されるごとに処理したい場合の
あるごりずむ体操

(ループはじめ)
    ↓
<前回キーが押されていたか?> YES→ (ループおわり)
    ↓ NO
<キーが押されているか?>    NO → (ループおわり)
    ↓ YES
[キーが押された時の処理]
    ↓
(ループおわり)

302:名前は開発中のものです。
09/06/01 08:43:59 OkPmCHq7
iの値も0に戻してあげようね

303:名前は開発中のものです。
09/06/01 09:36:50 hCSvJ7Y8
リアルタイム処理でないのならScreenFlipのあとにでも↓を追加しときゃいいんじゃね?


while( ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0 && CheckHitKey(KEY_INPUT_RETURN) == 1 ){
Sleep(16) ;
}


304:名前は開発中のものです。
09/06/01 10:52:22 YGv3z7sb
>>301
昔、組み込みプログラムでやったな、そういう処理。


305:名前は開発中のものです。
09/06/01 16:12:49 rm5/xw9E
クラス化するとか
class Key {
private:
int keyCode, state;
public:
Key( int KeyCode ) : keyCode( KeyCode ), state( 0 ) {}
int CheckHit() { int tmp = state; state = CheckHitKey( keyCode ); return tmp ? 0 : state; }
};

//WinMain
...
Key enter( KEY_INPUT_RETURN );
if(enter.CheckHit()){
...

306:名前は開発中のものです。
09/06/01 21:33:29 lE2okL9b
無駄すぎ糞ワロタ

307:名前は開発中のものです。
09/06/01 22:14:20 MR6y8v2X
そこで無駄のないソースの登場ですね。

308:名前は開発中のものです。
09/06/01 22:52:38 aqGzCF5U
俺もクラス化してるから、簡潔な方法があるなら教えて欲しい。

309:名前は開発中のものです。
09/06/01 22:57:02 eaj8yaj9
そもそもこのプログラムはスペースを押さないと表示させないようにしてるのかな
それはともかく言われたように押してくごとにABCD表示させようと思ったら
>>300を変更するとしたら
int returnOn = 0;  // ←
while(ProcessMessage()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0){
if(CheckHitKey(KEY_INPUT_RETURN) && !returnOn){  // ←
switch(i){
case 0:
input[i] = 'A';
break;
case 1:
input[i] = 'B';
break;
case 2:
input[i] = 'C';
break;
case 3:
input[i] = 'D';
break;
}
i++;
returnOn = 1;  // ←
}
if( !CheckHitKey(KEY_INPUT_RETURN)) returnOn = 0;  // ←
        (以下略)

とかやるとか


310:名前は開発中のものです。
09/06/01 23:27:38 FdTrWJbB
static変数のフラグ使うのが一番単純だと思うなあ

311:名前は開発中のものです。
09/06/02 09:36:41 9M4SMxHr
hsp時代にも散々似たような処理書いたなぁ…

なんかゲームのメインループ()


if((Aボタン==1)&&(Aボタンバッファ==0))

   なんか押された瞬間だけ1回やりたい処理


Aボタンバッファ=Aボタン



最初からKEY_DOWN、KEY_UP的なものがライブラリに有れば楽なんだが
ゲームじゃしょっちゅう使うし

312:名前は開発中のものです。
09/06/02 09:48:11 fOpSnwq/
32ビットか64ビットの整数をバッファにしてビット演算で書き込み、取り出しが一般的だろ
そのバッファに生でアクセスすることはあまりないが、
かといってキーごとにオブジェクト化するのもありえない

313:名前は開発中のものです。
09/06/02 11:07:30 lqyt4myq
299にいきなりそんな話してもわかんないでしょ。

314:名前は開発中のものです。
09/06/02 11:08:32 fOpSnwq/
抜けてたが、
上の例の場合、バッファは二つ以上ないとあまり意味ない
キーがマッピングしきれないって人はchar配列とか使えばいい

よりこだわる人はRawInputで

315:名前は開発中のものです。
09/06/02 21:23:19 CgQN485t
>キー入力

自分が使ってるルーチンのコードを記事にまとめました
URLリンク(d.hatena.ne.jp)

316:名前は開発中のものです。
09/06/02 22:46:42 D2ufpiqQ
入力の話題が出たので

キーコンフィグの実装で悩んでるんだけど、
>>315とかだと KEY_INPUT_なんとか の部分は変えられないし
どうやってキーコンフィグ実装するんだろうか・・・
同じようなソースでenumを弄っても根本的には変わらないし

317:名前は開発中のものです。
09/06/02 23:00:27 fOpSnwq/
少しは頭使えよww

318:名前は開発中のものです。
09/06/02 23:00:38 vp7xQIPq
>>315の例で言うならkeyb_keyを動的に書き換えりゃよかんべよ
KEY_INPUT_なんとかとスクリーンに表示する文字との対応表は作らにゃならんが

319:名前は開発中のものです。
09/06/02 23:19:31 rGe8VGDA
抽出 ID:fOpSnwq/ (3回)

312 名前:名前は開発中のものです。[sage] 投稿日:2009/06/02(火) 09:48:11 ID:fOpSnwq/
32ビットか64ビットの整数をバッファにしてビット演算で書き込み、取り出しが一般的だろ
そのバッファに生でアクセスすることはあまりないが、
かといってキーごとにオブジェクト化するのもありえない

314 名前:名前は開発中のものです。[sage] 投稿日:2009/06/02(火) 11:08:32 ID:fOpSnwq/
抜けてたが、
上の例の場合、バッファは二つ以上ないとあまり意味ない
キーがマッピングしきれないって人はchar配列とか使えばいい

よりこだわる人はRawInputで

317 名前:名前は開発中のものです。[sage] 投稿日:2009/06/02(火) 23:00:27 ID:fOpSnwq/
少しは頭使えよww

320:名前は開発中のものです。
09/06/02 23:23:59 9M4SMxHr
>>316
自分の場合:
ちょっと>>315と関数の仕様が違うけど

KEY_STATE getKeyState(int pad_num, KEY_FUNC key_func);


if(getKeyState(1, shot_btn) == KEY_DOWN){
ショット処理
}

コンフィグのiniファイルかなんかを読んで
shot_btnとかjump_btnとかの数字を適当に書き換える

今パッと思いついただけでコンフィグ実装したことないけど

321:名前は開発中のものです。
09/06/03 01:33:47 BENUHFDk
>320
俺も大体そんな感じでやってる

322:名前は開発中のものです。
09/06/03 01:35:57 ZbYk0Q0K
変な質問。
ウインドゥモードにした場合、勝手にウインドゥを作成して表示ではなく、あるウインドゥを使うように
することってDXライブラリではできますか?

323:名前は開発中のものです。
09/06/03 02:49:29 jjOgvpoK
>>322
例えばIEのウィンドウに表示したりとか?
意味がよくわからんが何より意図がわからない

324:名前は開発中のものです。
09/06/03 04:00:28 bNYd6KiM
どうせならGetHitKeyStateAllの方使った方がよくね

325:名前は開発中のものです。
09/06/03 10:50:20 tN/MRQC4
MDIにしたりとかだろ。
無理じゃないか?

326:名前は開発中のものです。
09/06/03 12:26:59 jjOgvpoK
>>324
ジョイパッド無理じゃなかったっけ?
まぁ可能かどうかは別にして

それをどうラッピングして押下げや押上げの判定を楽にしようかって話なんじゃ

327:名前は開発中のものです。
09/06/03 14:28:21 /YZEGe2A
俺の場合はGetJoypadInputState と GetHitKeyStateAll を併用で一括入力管理して
押上判定は個々の部分でやってるな。


328:名前は開発中のものです。
09/06/03 17:51:51 JOR7X/qw
クラス化するとしたらこんな感じですかね?
URLリンク(www.dotup.org)
考え方は>>315と同じ

329:名前は開発中のものです。
09/06/03 18:54:40 jjOgvpoK
みんな色々なやり方で面白いな。
自分はWin32APIのイメージが強すぎたせいか
KEY_UPとかキー状態の列挙体を戻り値で返す方法前提で考えていたけど
メンバにアクセスして真偽だけ返すという手もあるのか…

330:名前は開発中のものです。
09/06/03 20:15:41 n5yqAu71
>>319
意味わからん。>>307さんですか?

331:名前は開発中のものです。
09/06/03 20:41:08 RNCUnVzX
いや307は俺。

332:名前は開発中のものです。
09/06/03 22:22:44 DNn913L5
おいおい勝手に俺を名乗るなよ

333:名前は開発中のものです。
09/06/03 23:55:15 ZbYk0Q0K
俺も307です

334:名前は開発中のものです。
09/06/04 00:44:33 4zSVCft7
じゃあオレも307

335:名前は開発中のものです。
09/06/04 00:56:02 uCnhFctq
俺がこんなにいるなんて……作業がはかどるかなぁ。

336:名前は開発中のものです。
09/06/04 03:42:53 pMlbkkXE
能力は1/5だけどな

337:名前は開発中のものです。
09/06/04 04:45:47 EMFSgqr3
天津飯かよ

338:名前は開発中のものです。
09/06/04 07:23:29 pMlbkkXE
>337
名乗ったのが4人なら、もっと天津飯ネタを取り入れていた

339:名前は開発中のものです。
09/06/04 19:12:58 EMFSgqr3
で、
>>328式がベストでおk?

340:名前は開発中のものです。
09/06/04 21:55:52 94jaKxLF
2Dに限ってなんだが
結局の所
DXライブラリで作ったゲームと
OpenGLで作ったゲームと
DirectXで作ったゲームって

どこがどうちがうの?ほぼ一緒だろ?

341:名前は開発中のものです。
09/06/04 23:58:41 NBcwy8pb
>>340
名称が違う
難易度も違う

342:名前は開発中のものです。
09/06/05 00:24:06 LjYKB7R9
>>340
DXライブラリ:楽。動作実績が大きい。
OpeGL:日本のゲーム作りに関しては情報少ない。
DirectX:DXライブラリと似たようなラッパーを書く事になる。動作検証要。

343:名前は開発中のものです。
09/06/05 00:26:20 jQ78PNQ2
DXライブラリのサポートは金とってもいいレベル

344:名前は開発中のものです。
09/06/05 00:29:54 MVmrQAbM
世界的な実績で言うなら、その3つの中で一番下のような気もするけどなーw

345:名前は開発中のものです。
09/06/05 00:39:57 fb3Bnpon
ツクールシリーズ
→日本人からプログラミングの素養を奪い取るキラーソフト
DXライブラリ
→日本人から3Dプログラミングの素養を奪い取るキラーソフト

漢ならLinux環境でC+OpenGLでvi+gdbするべし

346:名前は開発中のものです。
09/06/05 01:17:49 k3aCK9Tq
>>345
それなら薦めるべきはSDLな気がする
それだけだとせっかくCとGL使ってもキー入力まわりで移植性がなくなる
GLUTのキー処理は論外だし
SDLからGL叩けるし

メジャーなプログラミング言語のほとんどがSDL対応してるし

でもこのスレ的にどうかと思うぜこの話題

347:名前は開発中のものです。
09/06/05 01:22:53 gGshfnNu
それだけ解っててなぜDXライブラリスレにいるのかと。

348:名前は開発中のものです。
09/06/05 01:48:22 byAKAyX7


「作ったゲーム」に関していう違いなら

DXライブラリで作ったゲーム
 動作実績があるライブラリだから動作する環境が多い
 速度は各ソフトの特性に合わせて最適化できないぶん遅い
 ライブラリで実装されていてDirectX直叩きなら使える機能が使えないから表現力はDirectX直叩きした場合より劣る

OpenGLで作ったゲームとDirectXで作ったゲーム
 エンジンの動作検証は作者PCのみだからプレイヤー環境で動作しない可能性はライブラリを使った場合より高い
 作るソフトに合わせて最適化できるのでDXライブラリ作者と同レベルのプログラム力を持っていれば確実にDirectX直叩きのエンジンの方が動作速度が速い
 DirectX直叩きできるから表現力はDirectXの表現力とイコール

349:名前は開発中のものです。
09/06/05 02:19:36 byAKAyX7
追記
基本的にゲーム製作を助けるためのものだからプレーヤー側から見ればDirectX直叩きで
DXライブラリと同等かそれ以上の性能のオリジナルエンジンを使ってソフトを作ってくれた方が嬉しいのは確かだろう
(それが製作者が支払う労力に見合うかどうかはさておき)

ただ、DXライブラリの存在があったことによって世に出ることができたゲームソフトもあるだろうから
端的にプレーヤー側にとっては動作安定以外にはデメリットしかないという結論に達することはできない

345的な理論はBASIC言語についても似たようなことが言われていたね、まあ3D対応すれば多少は改善されるんじゃないか

350:名前は開発中のものです。
09/06/05 06:01:05 /qtS2mAS
俺の場合はC++を重点的に学習したいからこれ選んでる
DirectXとか使おうもんならC++の上にこれも覚える負担に駆られるためかなり厳しくなる
DXLIBだと覚えること比較的少なく済むからC++に労力割けれるしね
だからその人その人の状況次第でしょう
あとこう書くといちゃもんつけてくる奴がいるから言っとくけど
全半角に突っ込むのなしね
俺タイプ苦手だから一々直すの面倒いからそれだけは言っとく

351:名前は開発中のものです。
09/06/05 07:44:06 Jb6PFwRw
クソスレ晒し上げ

352:名前は開発中のものです。
09/06/05 08:16:16 2+rjN8tB
面倒って……MS-IMEなら無変換キーを二回押すだけだし
ATOKだってファンクションキー一回押すだけだろうに……。

ていうかタイプ苦手だから面倒なんじゃなくて
それくらいを面倒がるからいつまでたってもタイプ苦手なんじゃないか。

353:名前は開発中のものです。
09/06/05 11:48:16 KAzeFILe
DXライブラリに関する書籍はないものでしょうか?

354:名前は開発中のものです。
09/06/05 12:27:22 /qtS2mAS
俺は全角のが落ち着くの

355:名前は開発中のものです。
09/06/05 14:40:29 pZVc1EDu
苦手というか、面倒という気持ちはわかる。
プログラミングしてて全角でコメントした後半角になおしたりとか正直邪魔くさい。

356:名前は開発中のものです。
09/06/05 17:58:00 b0tlHB//
>>353
初心者用でいいなら14歳から始める~ とか

357:名前は開発中のものです。
09/06/05 21:40:13 k3aCK9Tq
>>348
>>349
一通り触ったことはなさそうなことだけ伝わってくる文だな
その割に長くてうざい

358:名前は開発中のものです。
09/06/05 21:56:05 WwCy/X5Y
>>342
OpenGLならラッパー書かずに済むの?

359:名前は開発中のものです。
09/06/05 23:07:05 1schIxWd
OpenGLはラッパーどころかゲーム作りに必要な他の部品も必要。音楽再生とかキー入力とか画像読み込みとかどっかのライブラリ持ってくるなりしないといけないから超めんどくさいそりゃ普及せんわ

360:名前は開発中のものです。
09/06/05 23:14:10 KAzeFILe
>>356

明日あたり立ち読みしに行ってみます

361:名前は開発中のものです。
09/06/05 23:49:13 LjYKB7R9
14歳は名著でもあり地雷でもあるから気をつけろ。
誤字脱字内容間違い多いからな。

362:名前は開発中のものです。
09/06/06 00:03:30 H/iQ8fyW
>>359
むしろ技術力がつく

363:名前は開発中のものです。
09/06/06 00:06:10 sFhdVHFw
んなこと言い出しゃ自分でOpenGL、DirectX相当つくったり
自分で言語やコンパイラつくったり

364:名前は開発中のものです。
09/06/06 00:44:32 yKGSZjfM
>>322
俺もこれやりたい
ウィンドウ周りは.NET Frameworkにまかせて、あるPictureBoxコントロールの中で描画とか

365:名前は開発中のものです。
09/06/06 00:57:21 sFhdVHFw
LunaかなんかのサンプルにMDIのウィンドウで動いているのなかったっけ?

366:名前は開発中のものです。
09/06/06 02:23:33 0RWuIZ8X
ある程度プログラムさえ分かってりゃある程度の誤字脱字には気付くんじゃまいか
と言うよりあれはそんな初心者向きじゃないような気モス
ある程度基本はできていた方がいいかも
俺は大分参考になったし俺のやり方はそれがベースになってる

367:名前は開発中のものです。
09/06/06 14:28:01 9zaJ0Qz/
マップスクロールってどうやるんだ?

プレイヤーがx座標400ぐらいまで行ったら、背景画像をスクロールさせる感じで組んでみたら
動いてるようには見えるけど自身の座標は当然変わらず、後ろのハリボテが動いてるだけになったw

どんな感じでマップスクロールって作ってる?

368:名前は開発中のものです。
09/06/06 14:45:01 mp6p4QK3
>>367

基本的のその考え方で間違ってない。
気に入らないならもっと考え方を進めていけばいいだけ。

369:名前は開発中のものです。
09/06/06 15:02:08 triYp4O5
アクションゲームなら、マップの座標は固定にしてカメラを動かすという考え方のほうがいいかもしれない。

370:名前は開発中のものです。
09/06/06 16:34:01 4wIgR8zN
よく2Dクォータービュー型の箱庭ゲームで画面の拡大・縮小というのがあるけど、
あれは裏バッファ2に描いておいて、裏バッファに縮小転送、フリップというやり方
なのでしょうか?
それとも拡大・縮小の段階毎に元絵を用意しておいて、現在の段階に応じた元絵
を裏バッファに描画、フリップというやり方なのでしょうか?

371:名前は開発中のものです。
09/06/06 17:22:10 mp6p4QK3
やった事ないけど、俺がもしやるなら
普通にそれぞれの画像を描画する際に縮小描画するだろうな。
当然、表示座標も縮小計算して。

372:名前は開発中のものです。
09/06/06 17:26:21 Fiwfc+rD
俺は普通に描画時に拡大縮小してる
>>370だと後者になんのかな

373:名前は開発中のものです。
09/06/06 17:40:50 mp6p4QK3
ひょっとして、拡大縮小描画の命令を知らんとか?

374:名前は開発中のものです。
09/06/06 18:10:53 94tz/m1F
>373
拡縮機能使ってる? それとも予め画像用意しとく?
って聞きたいだけじゃないかな。

375:名前は開発中のものです。
09/06/06 18:59:26 9zaJ0Qz/
当たり判定って三角関数使って作ったほうがいい?
それともXY座標だけのでもいい?

376:名前は開発中のものです。
09/06/06 19:42:33 94tz/m1F
ちょっと質問。

 >int SetWaitVSyncFlag( int Flag ) ;
 >ScreenFlip関数 実行時にCRTの垂直同期信号待ちをするかのフラグセット

ってあるんだけど、
これって液晶モニタだと関係ない(常にtrue扱いになる?)んだろうか。

手元に液晶しか無いんで、プログラムが間違ってるのか仕様なのか判断できないんだ。


>375
なんの当たり判定だよと。
x,yだけで処理できるなら三角関数使わなくてもいいんじゃないの?


377:名前は開発中のものです。
09/06/06 21:33:11 gMk4d0ex
よくは判らんが、垂直同期信号って別にモニタが返してきてるわけじゃないんじゃない?
とりあえずうちの液晶モニタじゃ普通に動いてるし。

グラボ(RADEON)で垂直同期信号のON/OFF設定ができてるから
問題となるのはグラボの設定って気がする。

378:名前は開発中のものです。
09/06/06 21:49:45 94tz/m1F
ビデオカードか、言われてみればそりゃそうだよな。
なんかすまん。

色々と試してみた結果、
グラボの設定を変更&フルスクリーンでFPSが60Hzの上限を突破することが出来た。

まあ、実際に使うことはないだろうけれど。

379:名前は開発中のものです。
09/06/06 21:52:06 9zaJ0Qz/
>>376
横スクロールの当たり判定

380:名前は開発中のものです。
09/06/06 22:08:08 gMk4d0ex
>>379

君はもう少し自分の考えてる事を他人にわかって貰う努力をしろw

スクロールと当たり判定と三角関数がどう関わってくるのか、の説明とか
どうして「三角関数が必要かも」と思ったか、とか。

381:名前は開発中のものです。
09/06/06 22:46:25 sFhdVHFw
円形か四角か

382:名前は開発中のものです。
09/06/06 23:14:29 vskJtjA7
>>380
おまえ、偉そうジャン?

383:名前は開発中のものです。
09/06/06 23:46:26 +AmloxXp
ジャン()笑

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分送る前に垂直同期期間に突入する事はないから・・・

571:名前は開発中のものです。
09/06/21 23:45:26 nqKSgOSf
2点修正

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

>0lineを転送→水平同期期間→1lineを転送→水平同期期間→
>nlineを転送→垂直同期期間→0lineを転送→水平同期期間
0lineを転送→水平同期期間→1lineを転送→水平同期期間→
(n-1)lineを転送→垂直同期期間→0lineを転送→水平同期期間
の誤り

572:名前は開発中のものです。
09/06/22 00:07:43 kame7wv0
>>569
おまえ顔真っ赤だぞ?

573:名前は開発中のものです。
09/06/22 00:08:14 1Ugl+7iQ


574:名前は開発中のものです。
09/06/22 00:09:59 ErP4dB7R
>>570-571
そういうことだったんですね。
詳しい説明どうもありがとうございます。

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

ビデオカード側がモニタに送るタイミングを主導しているんだと思ってましたけど、そこが間違っていたようです。

575:名前は開発中のものです。
09/06/22 00:14:49 kAGY284T
>>568
>だから、画面更新に合わせずに好き勝手にflipしたら、
>ある1枚が長く見えてるかもしれないしある1枚が欠損しているかもしれない。
>だからちらつくように見えると思うんだけど、

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

実際にプログラム動かしてみてみれば一目瞭然だと思うんだが……。

576:名前は開発中のものです。
09/06/22 00:17:48 VZ3co5HH
>>552
14歳のやつ
計算式思い切り間違えているぞ。
実際にリフレッシュレートの違うモニタで確かめたから間違いない。

577:名前は開発中のものです。
09/06/22 00:28:31 XZV3fJ2J
あれ分母と分子逆になってるのかなあ

578:名前は開発中のものです。
09/06/22 09:11:17 4PYRYd3U
>>576
何がどう違うのか具体的に例をつけて書け
改良案も書け


579:名前は開発中のものです。
09/06/22 14:34:23 N6BYq6eh
>>578
ママにでも頼め。

580:名前は開発中のものです。
09/06/22 15:54:58 VZ3co5HH
>>578
自分で考える癖をつけよう。

適当な数字を入れて検証してみ。
明らかにおかしいのがわかるから。
どうおかしいのかわかれば治し方は自明だと思う。

581:名前は開発中のものです。
09/06/22 17:39:07 oZ+8nNkj
>>575
学生さんなのかな?
デジタル写真に法的な証拠能力は無いわけだが

582:名前は開発中のものです。
09/06/22 17:40:41 pV5yAQzs
なんの話だw

583:名前は開発中のものです。
09/06/22 18:16:54 VZ3co5HH
どこの誤爆だw

584:名前は開発中のものです。
09/06/22 20:45:11 C5JJD30U
これが若さか。

585:名前は開発中のものです。
09/06/22 20:51:20 CIAC500Z
いいや幼さだ

586:名前は開発中のものです。
09/06/22 20:51:55 kame7wv0
中年オヤジは黙っとけよクズ
いい年こいて2chやってんじゃねえよカス

587:名前は開発中のものです。
09/06/22 21:05:11 CIAC500Z
こんなヤツもDXライブラリ使ってるのか……

588:名前は開発中のものです。
09/06/22 21:10:13 kame7wv0
悪いの?使うのに制限あるなら教えてくれませんかね?

589:名前は開発中のものです。
09/06/22 21:11:51 CIAC500Z
初心者向けライブラリのスレなんだし、カリカリしないでまったり行こうぜ?

590:名前は開発中のものです。
09/06/22 21:32:05 6Vl6l2Pm
クソスレ晒しアゲ

591:名前は開発中のものです。
09/06/22 21:58:40 kame7wv0
まったく・・
オッサンにもなってゲームでも作ってんスかね?w

592:名前は開発中のものです。
09/06/22 22:52:27 wZqXAX7r
世界のゲームプログラマーの殆どがオッサンですよ

593:名前は開発中のものです。
09/06/22 23:27:33 PR8N99oV
そもそもおっさんって何歳以上?

594:名前は開発中のものです。
09/06/22 23:37:18 6Vl6l2Pm
スレリンク(lovesaloon板)

595:名前は開発中のものです。
09/06/23 00:57:26 JW/qeXlf
DXライブラリはDixq氏のゲームプログラミングの館の影響で東方厨が流れ込んできてるからこんなのはゴマンと居るよ

596:名前は開発中のものです。
09/06/23 01:04:40 /wkYhisO
いちいち煽らない。

597:名前は開発中のものです。
09/06/23 09:24:14 eUvBMQ0G
おっさんでもガキでも宇宙人でも何でもいいから、
DXライブラリでおもしろいゲーム創っていこう。

598:名前は開発中のものです。
09/06/23 09:52:25 dhA25QDv
>>580
こういう奴は駄目だな……
デバッグ報告になってない
再現例も書けない奴は現場に出てこないでほしいと思う

そもそも「適当な数字を入れたら」ってのは、「適当な数字が必ず入る」という前提なのか?
プログラムの動作の中で「適当な数字」が入らざるを得ないような状況を説明できるのか?
例えばOSやモニタやリフレッシュレートを変えたらおかしい、と言うなら説明になるが
チート使ったらゲームがバグった、レベルの議論は論外だ
こういう人に限って動的な数値に固定値を代入したりしてるんだから


599:名前は開発中のものです。
09/06/23 09:57:56 NMdhocxd
自分で調べようともしないで、他人に訊けば答えが返ってきて当然と思う人間の方が
現場では嫌がられると思うぞ。

600:名前は開発中のものです。
09/06/23 09:58:29 NvkMU1Q4
>>598
わからないなら、わかりません教えてくださいって素直に言えばいいんだよ。

601:名前は開発中のものです。
09/06/23 10:49:50 4P883XyE
嘘なら嘘でしたといったほうがいい

602:名前は開発中のものです。
09/06/23 12:18:26 A0fh8Dl0
作ってて楽しいからゲーム製作してるんだろ?
なんでこんなカリカリしてんのさ

603:名前は開発中のものです。
09/06/23 12:28:04 btxPW8HG
分をわきまえず背伸びしてるから疲れてるんだろ

604:名前は開発中のものです。
09/06/23 15:57:39 +DVKp8CT
>>598
わからないなら素直にそういえばいいじゃない。

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

疑うならリフレッシュレート変えて実際に試してみ。

605:名前は開発中のものです。
09/06/23 17:46:43 ifo/8btq
ソース見せてくれたら第三者にも判断つくんだけどね。

606:名前は開発中のものです。
09/06/23 22:32:28 BZp72+wO
ここ現場じゃねーし
掲示板だし
そもそも教えない奴にこそ性格に問題抱えてる事がほとんど

607:名前は開発中のものです。
09/06/23 22:34:58 BZp72+wO
わからない、とそいつが言ったら言ったで責めんの目に見えてるし
ググレとかそれ以前のことでしょとか嫌味吐くのおまえらじゃん

608:名前は開発中のものです。
09/06/23 23:13:33 joZZV7Mo
フレーム単位で処理してモニタのリフレッシュレートに合わせて移動量を変えればリフレッシュレートによらず処理できることは分かるけど、
例えば、タイトル画面でスタートボタン押してから次の画面が表示されるまでの待ちの処理ってのはどうやってフレーム単位で処理すればいいんだろう。

609:名前は開発中のものです。
09/06/23 23:19:45 +iWMMldZ
>>607
これだけ色々答えてくれる場でなんでそういう考えに至るのか。
あまりにガキ過ぎる。

610:名前は開発中のものです。
09/06/23 23:21:51 UNSoodNB
そんなもん無視しろ

611:名前は開発中のものです。
09/06/23 23:24:00 ifo/8btq
>>608

どういう意味?

待ちの時間って、本当に何もしないって事?
それともデータロードとかしてる時の事?

612:名前は開発中のものです。
09/06/23 23:53:01 95CP5Nno
ゆとり乙
ガキは教えて貰うのが当たり前だと勘違いしてるから始末が悪い。

613:名前は開発中のものです。
09/06/24 00:21:16 9O2FRRtx
移動量だけでなく待ちのフレーム数も可変にしないといけないとなるとちょっと面倒だな

614:名前は開発中のものです。
09/06/24 00:45:52 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の値が小さくなればどうなるか式に入れて考えてみってこと
試すまでもなくこの式がおかしい事が判る筈

615:名前は開発中のものです。
09/06/24 01:14:19 OqjteeH5
FPS計測するとき同じミスよくやったなぁ

616:名前は開発中のものです。
09/06/24 01:20:49 zu36k+NF
俺もそこおかしいと思ってずっと悩まされてた
答え言っちゃいけないのかな
あそことあそこ入れ替えるでおk?

617:名前は開発中のものです。
09/06/24 01:31:30 km6ob3xz
>>616
うん。
それでおk。

ちなみに初版で気付いてラトルズに付属の葉書で出したが
C++本でも後の版でも訂正されなかった。
サポートページに訂正箇所のpdfがあるが読んだら全然違う箇所のことだった。

618:名前は開発中のものです。
09/06/24 02:15:36 6DfYO0Sm
14歳から~って読んでる人結構いるんだな

619:名前は開発中のものです。
09/06/24 10:34:44 QnhT+AWI
知らぬは、著者ただ一人だけ

620:名前は開発中のものです。
09/06/24 15:00:37 iWb66gX0
「14歳~」って読んだこと無いのだけれど、
これ買ったらDXライブラリの作者さんに何らかのお金が行くんだろうか?
行くなら買ってもいいかなあ。

621:名前は開発中のものです。
09/06/24 19:31:31 iPuVSgwO
>>616
何で答えを言っちゃいけないとかいう言葉が出るの?お前は?
バカなの間抜けなの?なにがそんなに秘密にしたがんの?死ねば?

622:名前は開発中のものです。
09/06/24 20:29:05 2pcTgAck
釣りだとわかってるけど笑ってしまったw

623:名前は開発中のものです。
09/06/24 20:33:55 cCHdRy2i
ティアリングに拘るよりやることがあるだろw
釣りであってくれw

624:名前は開発中のものです。
09/06/24 20:53:30 km6ob3xz
ネタじゃなかったら日本が滅ぶw

625:名前は開発中のものです。
09/06/25 00:07:29 lGFh6/SQ
ティアリングサーガだな

626:名前は開発中のものです。
09/06/25 00:30:15 z4Ht8mWs
こだわるのはプログラマの性だしなあ


627:名前は開発中のものです。
09/06/28 16:38:04 Mn3+4Pod
例えば
class Enemy{};

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

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


今現在、練習を兼ねてミニゲームのようなものを作ってて行き詰っちゃって。
よかったら教えてください。

628:名前は開発中のものです。
09/06/28 18:36:01 zlbWct1+
俺は面倒だからpublic でやってるけど
まあ普通は getx(){return x;} という public なメンバ関数から座標を取得するのかな

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

まあ俺みたいなへぼいのから聞くより出来る奴から聞いたほうがいいと思うが

629:名前は開発中のものです。
09/06/28 18:52:38 L4rlBUkj
Enemy中でplayer->touch_p(this->x,this->y)とかどうかな

630:名前は開発中のものです。
09/06/28 19:48:47 Mn3+4Pod
>>628-629
返答ありがとうございます。
さあ当たり判定を作ろう。と思ったときに上記のことでつまづいて書き込ませもらったんだけど
返答があるまでちょこっとなにか加えようかなと思っていじってたら、上から降ってきたものが
地面についたとたん固まるという想定外の現象に見舞われて、コードの半分ほどを書き直す
羽目になってしまって。

いまだ復旧作業の途中なので、せっかく返答してくれたけどその知識を使うのはもう少しあとになりそうです。


とりあえず、HitEnemy()というメンバ関数を作って、Playerのポインタを渡す感じでいこうかと思ってます。
…出来ないかもしれないけど。返答ありがとうございました。

631:名前は開発中のものです。
09/06/28 20:07:12 FGL1jWKo
ポインタを渡しても直接値を参照することはできないから
privateならget使うことになるんじゃないかな。
めんどいなら一時的にfriendしてやるとか。

632:名前は開発中のものです。
09/06/28 21:45:36 J3SLmnCX
>privateになってる場合
って書いてあるけどprivateにする意味があるからprivateなんじゃないのかな。
参照したいならprivateにする意味がないって事なので、
publicにするかアクセサメソッド作ればいいのでは。
まあ後者がいいと思う。

633:名前は開発中のものです。
09/06/29 00:05:45 ExNjCSjV
仕様がワカランからアレだけど、Enemy同士の当たり判定は必要ないのかな。
後、これも仕様がワカランからあれだけど Direction(方向)の情報とか必要ないのかな。

634:名前は開発中のものです。
09/06/29 00:08:39 0NdYoqqQ
シューティングだとそれらのことあまりやらないんじゃないか
無駄にそういうの増やすと負荷増やすだけだし
ゲームによってはそういうこともやるだろうが

635:名前は開発中のものです。
09/06/29 23:41:07 0tScVOcn
Enemy同士もPlayerと同じ方法で判定すればよくないか?

636:名前は開発中のものです。
09/06/29 23:46:20 4d+M4K38
playerとenemyなら1対多だけど、enemyとenemyだと多対多になって
判定回数が飛躍的に増えるって事でしょう。

637:名前は開発中のものです。
09/06/30 00:59:39 2TdNpUsa
そもそも何でprivateなのか分かってんのかと
理屈がわかんなきゃ全部publicにしてもstaticにしてもいいじゃないかって話になる
クラスの意味をまず勉強した方がいい


638:名前は開発中のものです。
09/06/30 12:36:26 YPE4/kWn
GraphLock

GraphUnLock
って以前はリファレンスに載ってたと思うんだが、見つからない。

サンプルが見たかったんだけど、以前のリファレンスってもう見れないのか。
インターネットアーカイブはダメだった。

639:名前は開発中のものです。
09/06/30 12:48:34 EGHH7lwt
>>639
過去スレにそれっぽいものが
URLリンク(www.2chsearch.jp)

640:名前は開発中のものです。
09/06/30 13:51:06 A8eMVGin
タヒチで日本の即席めん大人気

 リゾート地として知られる南太平洋のタヒチ(仏領ポリネシア)で、たつの市の食品メーカー「イトメン」が製造するインスタントラーメンが売り上げを伸ばしている。
ここ10年で輸出量が倍増しているほか、現地商社の依頼で2年前からカップめんの販売も始めるなどファンを増やしている。
 イトメンによると、タヒチへの輸出量は1998年が155万食だったが、2008年には356万食に倍増。
神戸税関によると、神戸港の即席めんの輸出量は07、08年と連続で全国一。
うちタヒチへの輸出は08年が303トンで、同税関は「タヒチ向けはほとんどがイトメンの製品」という。
 イトメンの即席めんがタヒチへ渡るようになったのは40年ほど前で、神戸の貿易会社がタヒチに住む中国人向けに輸出したのが始まりという。
タヒチには118の島に23万人が住む。今はシェア6割ほどを占め、イトメンが直接輸出している。
 即席めんは、国ごとの味覚に合わせるケースが多く、現地生産が主流。
同社は日本で販売している「チャンポンめん」と味は同じで、パッケージを変え「ALL-IN-ONE」の商品名で販売しているが、現地でも受け入れられている。
 人気が高い理由について、同社の伊藤充弘社長(53)は「香港製などライバルの製品が少ないためでは」と分析。
タヒチで日本の旅行会社現地法人で10年間働く日野到さん(36)は「日本のラーメンは最も品質が良くて人気。よく売り切れている。
長年、安定して輸入が続いているイトメンの商品が定着している」という。
 伊藤社長は「最近は原料の高騰で利益はほとんどないが、親しまれている味を届け続けたい」としている。

URLリンク(www.kobe-np.co.jp)

【グルメ】タヒチで日本の即席めん「イトメン」が人気
スレリンク(newsplus板)
【イトメン】 イトメンのチャンポン麺 【総合スレ】 Part2
スレリンク(nissin板)

641:名前は開発中のものです。
09/06/30 14:07:23 6Cj5H8P6
貴重な小麦粉をインスタントラーメンなんかに使うな馬鹿たれ。

642:名前は開発中のものです。
09/06/30 14:12:28 IiroK7Eg
ここはニュー速じゃないぞ

643:名前は開発中のものです。
09/06/30 21:08:32 O5h6+0gK
私がニュー速だ。ここをあけろ!

644:名前は開発中のものです。
09/07/01 00:09:56 g4kBRgyq
DXLibを使う場合、全体を

int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpc, int nC){

  while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
    ~

  }
}

こう言う風に作れって本に書いてあったんですが
この構造と本格的なwinプログラムの場合のウインドウズプロシージャとかとの関係がイマイチわからないのですが
どういう風になってるんでしょうか?


645:名前は開発中のものです。
09/07/01 00:15:05 UhT4qFyx
>644
関係ないと思っておk

646:名前は開発中のものです。
09/07/01 00:21:01 tzxPZ+Bo
初めてDXライブラリ使った時、小難しいwinプログラムがなんでこんなツクールみたいになるのかと愕然としたよ

647:名前は開発中のものです。
09/07/01 00:31:13 9VzVKeVm
俺も最初WinMainではウインドウ作成とメッセージループしかしちゃいけないと思ってた
知人がタイマーイベント仕掛けてWM_TIMERがきたときにループ処理してたからそういうもんだと思って疑わなかった

648:名前は開発中のものです。
09/07/01 05:08:47 aia3X3LP
BorlandC++BuilderやDelphiのソースを読むともっとビックリするよん。

649:名前は開発中のものです。
09/07/01 09:35:30 LrL8gFoC
落ち目会社だしどうでもいい

650:名前は開発中のものです。
09/07/01 19:59:44 eeCacGXj
>>646
きちんと関数化、ライブラリ化すれば難しいゲームでも綺麗に書けるってこと
DXlibの機能には制限があるし、余計な機能もついているので、
最終的に自分で最適なライブラリを書くようになれるのがいいよ


651:名前は開発中のものです。
09/07/03 20:54:33 BsjXjKQw
SetMainWindowTextが未定義関数扱いされるんだがどういうことなの・・・
他の関数は普通に使える

652:名前は開発中のものです。
09/07/04 18:08:40 p2ue3IYD
>>651
うちでは正常に動くが。ヘッダから消してしまったとか。


653:名前は開発中のものです。
09/07/06 22:42:09 AVbDbUwf
ステータスバーってどうやって付けれるのよ?
おせーて

654:名前は開発中のものです。
09/07/08 01:56:14 OgMSMAZ5
ファイルから再生する音楽のループ位置を設定することはできますか?

655:名前は開発中のものです。
09/07/08 02:25:32 94Ripojr
>>654
SetLoopPosSoundMemではだめなの?


656:名前は開発中のものです。
09/07/08 02:58:22 OgMSMAZ5
>>655
ありがとうございます。すみません、説明不足でした。
PlayMusicでストリーム再生し、ループ位置を設定したいのです。

657:名前は開発中のものです。
09/07/08 11:53:36 Qn1Es1Py
>>655
SetLoopPosSoundMemとSetCreateSoundDataTypeを使って解決しました。
ありがとうございました。

658:名前は開発中のものです。
09/07/08 22:05:37 qTICtjjx
CPU Core 2 Duo 2.66GHz
RAM 4GB

GPU GeForce 9600M GT
VRAM 2GB

OS Windows Vista 64Bit

DxLibで作られたソフトをこいつで動かすと、始めは60fpsでなめらかにも関わらず、
しばらくすると30fpsになるのはなぜなんだ?
ガクガクするならまだしも、ぴったり30fpsなんだ。
またしばらくすると治ったりもするし、なにかひとつの関数が原因になってたりするのかな?

659:名前は開発中のものです。
09/07/08 22:17:02 i+ja7A8H
ScreenFlip()を2回呼んでいるとか

660:名前は開発中のものです。
09/07/08 22:40:16 uhEtjIe1
Vistaのいたずらじゃないかな?
うちも24か30で安定、フルスクリーンだと60fpsありがとうございます状態。

661:名前は開発中のものです。
09/07/08 23:16:39 tUPC3dXe
なんか最近どっかで見たような質問だな……。

662:名前は開発中のものです。
09/07/08 23:26:07 Sk8AIN2R
ビデオカードとそのドライバと設定だな
60、30、24ってよく見る数字だし

663:名前は開発中のものです。
09/07/09 01:06:35 h1wYunUV
60hzに同期して描画したとする
(1) 1フレームの処理が1/60秒未満なら1秒間に60回描画できる
(2) 1/60秒以上2/60秒未満なら30回描画できる

つまり瞬間的には30か60のどちらかになる
1のケースと2のケースが混ざったとすると長期的には平均することで30と60の間の値になりうる
しかし大抵の場合は1フレームの処理が1/60秒で収まるか、あるいは超えるかで30と60に分かれる

と予想

664:名前は開発中のものです。
09/07/09 02:46:07 IPUdantx
ていうか垂直同期信号待ちをしてるのかしてないのかを先に明記してくれないと。

665:名前は開発中のものです。
09/07/09 22:24:55 9TUAw73M
GPUの垂直同期をオフにしてもオンにしても結果が変わらず。
というか、GPUの設定をどう変えてもまったく同じ・・・

666:名前は開発中のものです。
09/07/09 23:12:54 PnCCkvgD
もともとDXライブラリ側でOFFにしてるんじゃないの?

667:名前は開発中のものです。
09/07/10 06:17:28 On7fn4n8
画像を半透明で描写する方法ってDXライブラリにありますか?

668:名前は開発中のものです。
09/07/10 06:55:03 aqVpLVfM
リファレンスも読めんのか…

669:名前は開発中のものです。
09/07/10 09:02:40 G7FiBYYu
あるよ。リファレンスにある。
全部読んでそれでもわからなかったらまたおいで。

670:名前は開発中のものです。
09/07/10 12:51:04 xhZ5jDJO
座標ってxyで行うから構造体でセットにして扱うのってなんか不都合ある?

671:名前は開発中のものです。
09/07/10 13:23:29 Pbfo1cNY
無いよ。
bullet[i].locate.x = 320; とか多重に扱うと見た目が重く感じるぐらい。

672:名前は開発中のものです。
09/07/10 13:23:43 GMEf2Yqs
全然ないから、POINT を使うと良いよ。

673:名前は開発中のものです。
09/07/10 15:09:18 xhZ5jDJO
>>671-672
thx

多重に気をつけて、メンバ変数は極力そのクラス内で処理するようにしますわ

674:名前は開発中のものです。
09/07/10 23:17:50 kvfVpi7w
EnemyManager.Small.Flying.Bullet[i].Location.x = GameCanvas.TopLayer.ViewObject.Set(320);
とかなら、ちょっとは考えろよwwとか思うけど。
普通に組んでる限りじゃ、そんな気にする必要はないかと。

どうしても気になるなら、POINTなりをpublicで継承すりゃ、
bullet[i].x=320にできるし、どうせゲームだからこれで問題無いでしょ。

675:名前は開発中のものです。
09/07/11 01:55:20 UeAE0WWV
アクセス権が気になるなら参照を返すアクセサ作ればいいしな
bullet[i].x()=320;
これくらいなら見た目もタイプ量も許容範囲だろ

676:名前は開発中のものです。
09/07/11 01:56:20 UeAE0WWV
あ、もちろんインライン展開される書き方前提でな

677:名前は開発中のものです。
09/07/11 07:49:08 wBBMdddU
そういったセットになり易いものって他にどんなのがあるかな?

678:名前は開発中のものです。
09/07/11 18:21:58 SvZlB+M+
セットって?

679:名前は開発中のものです。
09/07/14 04:20:59 wRlAP6qv
たまにタスクが応答なしになるという原因不明のバグに悩まされ
再起動してみると普通に実行されるのは何だろう

680:名前は開発中のものです。
09/07/14 04:40:19 mFQZCpWd
>>679
何を言いたいのか分らんが・・・
(エスパー希望の相談なのか、只の雑談なのか、愚痴なのか?)

とりあえず、タスク がタスクマネージャーとかのタスク(application)の事なら、
単純にどっかが無限ループに嵌ったか、画面書き換えの部分を通らなくなったか(orキー入力の部分を・・・)
だろう。

とりあえず、printfを色んな所に仕込んでおいて、デバックを掛けるとかするのが基本。
怪しい所がどうみてもライブラリ側だったら、公式に書き込めばいいし、
そうでないなら、再現性を高めて、その変な挙動をここででも、公式ででも聞いてみればいい。


大概は、配列でindexが超えて・・・・とか、switchでbreak;が抜けてて・・・とか
if文の後に変なモノがあって、ifでの抜けだしが効かなくなってたりとか、
{}の対応が微妙にずれてて・・・とか、初期化してないのを使っていて、タイミング次第で・・・とか
(後は、WindowsUpdateしてなさ過ぎて、リターンが遅れてるのを応答なしに解釈されてるとかもあるか、)


681:名前は開発中のものです。
09/07/14 04:49:20 wRlAP6qv
>とりあえず、タスク がタスクマネージャーとかのタスク(application)の事なら、
その通り

>単純にどっかが無限ループに嵌ったか、画面書き換えの部分を通らなくなったか(orキー入力の部分を・・・)
>だろう。
そういった部分は見当たらなかった

何せOSを再起動させてそのプログラムを再び実行させたら何の問題もなく動いたのですからプログラムに原因があるとは思えないのですが

682:名前は開発中のものです。
09/07/14 05:07:49 pOq3rm7P
そういう現象が出てるのが君だけなんだから君のプログラムに問題があるか、
あるいは君だけが体験できるくらいレアな現象って事になるだろう?

調べる事ができるのは君だけなんだから
素直に>>680の忠告に従って、きちんと調べていけばいい。

「これで合ってるはず」なんて余計な「思い込み」はデバッグ作業の邪魔にしかならないぞ。

683:名前は開発中のものです。
09/07/14 05:36:27 mFQZCpWd
>>681
それだけの事で、プログラムに問題があるとは思えないって・・・・

とりあえず、
初期化なしでつかってる場合にはOS再起動とかで簡単に変わるし、
時間取得なんかをちゃんと処理してないと、
日にち跨ぎや時間跨ぎで、発生したりしなかったりする。

>>682も言うとおり、思い込みよりも手を動かしてデバックしなぁ。
プログラムは書いた通りに動いても、思った通りには動くとは限らないんだからさぁ。

684:名前は開発中のものです。
09/07/14 06:46:29 wRlAP6qv
だってデバッグしたけど分んないんだもん
まあ動くようになった訳だからそのまま何事もなかったかのように過ぎていくのだろう

685:名前は開発中のものです。
09/07/14 07:14:55 MgrfsfEm
forやwhileで使ってる変数の初期化忘れあたりが怪しいけどどうなんだろうな

686:名前は開発中のものです。
09/07/14 07:53:46 wRlAP6qv
それはないと思うがなあ
その可能性のあるコードって、(実行時に処理を通ってるコードの中で)
while( (!ProcessMessage()) && (!keybuf[KEY_INPUT_ESCAPE]) )
しかなかったんだが(変な書き方でスマソ)
確かに keybuf はグローバル変数にしてしまってるし
char keybuf[256] = {0};
で初期化したつもりになってるけどどうなんか分らん
まあ動くようになったし確認しようにももうできないからな、動くから
まあ良しとして続けるしかないな

687:名前は開発中のものです。
09/07/14 08:07:50 1FTDe9TM
こうしてバグが量産され、ついにはうんともすんとも動かなくなりねあげる姿が


688:名前は開発中のものです。
09/07/14 09:43:25 MgrfsfEm
裏画面の内容をテクスチャにコピーする関数ってあったっけ?

689:名前は開発中のものです。
09/07/14 20:58:42 2Fk/wASW
「無いと思う」とかじゃなくて確かめないと。
プログラムに思い込みは絶対あかん。

690:名前は開発中のものです。
09/07/14 23:37:46 wRlAP6qv
だって動くようになったから確かめようがないじゃん
この先動かなくなる可能性ないわけではないが
そうなったところでこれ以上バグは見つからんだろうな、俺の力では

691:名前は開発中のものです。
09/07/15 00:00:28 MHxGaYOY
だからprintfとかで一つ一つ処理の中身を吐き出して見るんじゃん。
外見上動いてても、バグがあれば意図してないデータが含まれてる。

692:名前は開発中のものです。
09/07/15 01:08:24 ouOmT7td
うーん、やっぱりバグがあるとはどうしても思えないし
多分printfとかで一つ一つ処理の中身を吐き出して見てもどの道今の俺の能力では
バグを発見できるとは思えないから忠告はありがたいがこのままいくことにするわ
以前も同じようなこと何回かあったしそんときもちゃんと完成まで漕ぎ付けているし

693:名前は開発中のものです。
09/07/15 01:17:22 Pli3pE87
ID:wRlAP6qv
ID:ouOmT7td
お前さ、そんなスタンスなら、なんでわざわざここに書き込んだわけ?はじめから書き込むなよ。
なに、構って欲しかった?わざわざお前の書き込みに一生懸命考えてレスしてくれた
人達に失礼だと思わないの?

694:名前は開発中のものです。
09/07/15 01:49:11 9zT2ADv7
実際問題、再現性のないバグを修正するのは難しいよ。
プログラムを書いた本人に見当がつかないなら、他人の経験に頼るのも良いと思うよ。
自分がそんなバグにぶち当たったとしても根気だけで調べようとは思わないな。
時間が余ってるなら別だけど。

で、他人の立場から言うと、あれだけの情報で問題のありそうな点を指摘するのは無理だ。
アドバイスとしてはバグ発見を諦めるのではなく自分用バグリストを作ってそこに追加しろ。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch