トップページgamedev
981コメント424KB

ゲームプログラミング相談室【Part6】

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。04/03/06 01:25ID:d2e/eEyg
ゲームプログラミング全般の質問スレッド。
扱う話題のダイナミックレンジはやや広め。包容力高め。
他の初心者質問スレとの棲み分けを探りつつ
これからもマターリと活用しておくれ。
 
■過去スレ
【Part2】http://pc.2ch.net/tech/kako/985/985540361.html
【Part3】http://pc.2ch.net/tech/kako/1002/10028/1002894129.html
【Part4】http://game.2ch.net/gamedev/kako/1005/10050/1005040025.html
【Part5】http://pc2.2ch.net/test/read.cgi/gamedev/1036410116/
■関連スレなど
>>2-5
0002名前は開発中のものです。04/03/06 01:26ID:d2e/eEyg
■関連スレ
【初心者歓迎】スレを立てる前にココで質問を【Part5】
http://pc2.2ch.net/test/read.cgi/gamedev/1078502309/
鬱だ氏のう DirectX (Part 12)
http://pc2.2ch.net/test/read.cgi/tech/1076651336/
初心者のためのゲームプログラミング
http://pc2.2ch.net/test/read.cgi/gamedev/1023119134/
ズブの初心者がゲーム作れるまで勉強するスレ
http://pc2.2ch.net/test/read.cgi/gamedev/1005132370/
0003名前は開発中のものです。04/03/06 14:28ID:dSl4ykZE
       。 ◇◎。o.:O☆οo.
       。:゜ ◎::O☆∧_∧☆。∂:o゜
       /。○。 ∂(*゚ー゚ )O◇。☆
     /  ◎| ̄ ̄∪ ̄∪ ̄ ̄ ̄|:◎:
    /    ☆。|..  新スレおめ  .|☆
  ▼       。○..io.。◇.☆____| 。.:
∠▲―――――☆ :∂io☆ ゜◎∂:.
0004名前は開発中のものです。04/03/06 16:00ID:IZnhr4O3
windowsでアクションRPGを作ろうとしています。
2Dで作りたいのですが、その場合の最適な方法を教えて
下さい。
DirectXのスプライトやテクスチャを使うよりひょっとして
GDIを使った方が早いとか・・その辺どうなのでしょうか?
プログラミングに関してわりと初心者なので、ご助言よろしく
お願します。
0005名前は開発中のものです。04/03/06 16:08ID:XiMT98gx
>>4
DirectXとC/C++で作る。
描画まわりを自分で組むのは面倒だし、
よくわからないので誰かのライブラリを使わせてもらう。
誰のライブラリを使うかは自分で探す。

これでとりあえずゲームを作れる環境は整う。
0006名前は開発中のものです。04/03/06 16:32ID:qxY/Wlgs
GDI使え
0007名前は開発中のものです。04/03/06 17:05ID:KI9N5j4B
>>4
2Dなら、GDI(DIBSection)の方が開発はやりやすい。
描画性能に関しては、少なくとも「画面への描画速度」は問題ない
場合が多い(内部への描画処理については、単純にメモリを読み書き
るDIBectionの方が有利な可能性もある)。また、スプライトは32
ビットフルカラーなどピクセル単位の処理を容易にできるシステム
でやる分には、ピクセルをすべて自力で処理しても大丈夫だろうね。

ただし「滑らかな画面更新」を重視するのなら、DirectXで全画面
占有タイプにした方が有利なことは有利かもしれない(開発の労力
は一気に増すがw)。
0008名前は開発中のものです。04/03/06 17:36ID:hsXyG1/u
web上でゲームを公開しようと思っているのですが、
javaかflashだと重さを考えたらflashのほうがいいですか?
0009名前は開発中のものです。04/03/06 20:59ID:IZnhr4O3
>>5-7
ご助言ありがとうございます。
とりあえずDirectGraphicsのテクスチャと
ヤネ氏のライブラリで速度を比べてみようかと
思います。(DirectX9.0には大分慣れたのですが、
Win32は、不慣れなので・・。)
0010名前は開発中のものです。04/03/10 19:48ID:jIa556UV
DirectXのスプライトとテクスチャってどう違うの?
描画速度に違いはあるのかしら?
0011名前は開発中のものです。04/03/10 23:17ID:7vMs+89m
スプライトは概念、テクスチャは実装。
0012名前は開発中のものです。04/03/10 23:32ID:V51Y5dwK
スプライトってのがD3DXSpriteのことを指してるなら、
それはテクスチャを含むDirect3Dのラッパーだよ。
で、ラッパーは常に元より遅い。
実際にどれくらい遅いかは知らん。

機能の違いは、2Dと3Dの違いだ。3Dは2Dを包含する。
0013名前は開発中のものです。04/03/11 12:01ID:jsiJP8hl
ただまぁ、Summer 2003でスプライトの速度は改善されたそうです。
↓にもちょっとした話が。
http://www.plustarnet.com/aspil/Programming/2d06.htm
0014名前は開発中のものです。04/03/13 03:10ID:hBBXuD4r
みなさん、浮動小数点数の型はどうやって決めていますか?
とりあえずは、思いつくのを列挙してみます。
ついでに、それぞれに個人的な意見を添えてみました。

1) 全部 double
+ルールとして単純。
+ゲームプログラム以外では、ほぼ常識?
-メモリ使用量が倍
-「浮動少数点」という言葉と直接繋がらないのが嫌。

2) 全部 float
+ルールとして単純。
+見た目が美しい。
+メモリにやさしい。
+ゲームプログラムではほぼ常識?
-精度が少なめ。
-環境によっては速度も double を下回る?

3) 目的別に typedef (float32,float64,fast_float,precise_float,...)
+移植性が高い。
+目的がコードに直接現れる。
+後で変更できる。
-どれだけ、どんな名前で定義したらいいのか?
-既存のインターフェースとやりとりするときに問題が?

とりあえず、3が正解っぽいなぁ、と思っています。
これら以外の選択肢があれば教えてほしいです。
また、意見のところの、「?」が付いてるもの(特に3のもの)について、
より確かな情報をいただけるとありがたいです。
0015名前は開発中のものです。04/03/13 03:16ID:5BV6NOnP
>>14
DirectXだからfloat
0016名前は開発中のものです。04/03/13 03:29ID:8/IMYlHX
DirectX9はfloat中心の方が速度的にイイ?
0017名前は開発中のものです。04/03/13 04:48ID:uJUWjvsQ
>>14
Cだけど整数型でやっている。3を3000としたりして。
0018名前は開発中のものです。04/03/13 05:30ID:gHL8rm2k
>>17
割り算よりシフトの方がいいらしよ
0019名前は開発中のものです。04/03/13 11:35ID:rbv/waoI
PS2なんかは単精度しかないんだっけか。

そのうちdoubleが標準になるんかねえ。
floatだと広大なフィールドをリニアに扱えんし。
0020名前は開発中のものです。04/03/13 18:14ID:PUoUaF4y
ファイヤーエムブレムとかタクティクスオウガみたいなシミュレーションRPGを作ってるんだけど
敵の思考を考えるのが難しい

プレイヤー側ユニットとの距離を調べる

一番近いユニットに近づく

攻撃できる距離だったら攻撃する

みたいな感じで組んでるんだけど

・障害物
・攻撃スキルの特性(2マス離れてても攻撃可、とか回復スキルとか)
・移動した後攻撃するか、攻撃したあと移動するか  etc...
そういう色々な要素が入ってくるとわけわからなくなる
素人は手を出さないほうがいいジャンルなんだろうか…

なにかコツとかあったら教えて下さい
0021名前は開発中のものです。04/03/13 18:26ID:2y9JGEPF
障害物とか地形の異動量とかがある場合の最短距離の求め方は、
A*サーチアルゴリズムとかを参考にすべし。
たとえば↓。探せばいっぱいあるはず。
http://gamdev.org/w/?%5B%5BAStarAlgorithmTutorial%5D%5D

どの行動を取れば一番いいかについては、可能な行動を全て列挙し、
それぞれに点数をつけ、一番点数の高かった行動を取らせるという方法が一般的。
この点数をつける評価関数を返ることによって、敵の強弱、特徴を出すことが出来る。

どうやって評価関数を作るかは、ゲーム内容による。一般的にこうすればよいとかいった
マニュアルは無い。行動の選択肢が非常に多くある場合、どう刈り取るかも問題となる。

というか、AIの日本語で書かれた入門資料ってあるのかな?

参考リンク:
http://ai-depot.com/
http://www.gameai.com/
http://www.aiwisdom.com/index.html
http://www.ai-junkie.com/ai-junkie.html
http://www-cs-students.stanford.edu/~amitp/gameprog.html#ai
0022名前は開発中のものです。04/03/13 18:35ID:PUoUaF4y
>>21
サンクスです

やはり難しそう・・・
やれるだけやってみます
いざとなったら要素削ってシンプルにするかな・・・
0023名前は開発中のものです。04/03/14 00:40ID:tW50q/qz
>>20
自分はFE風のを作った事があったが、その場合。

1:すべての移動できる位置、使用できるアイテムから、使用対象がいるか調べる。
 攻撃系なら敵、回復系なら味方。複数あるなら効果が一番高いものを選ぶ。
 攻撃系なら相手のHPを大きく減らせて(量ではなく%)、命中率がよく、
 逆に相手からはそれが低くなるもの、回復系の場合は回復%、命中が高いもの。
 同じアイテム、同じ対象に対して使用できる位置が複数あるなら、
 地形効果が高い場所から行動する。地形効果が同じなら歩数が一番少ない所から。
2:1の対象がいない、または攻撃すると逆に自分に及ぶ被害のほうが大きそうな時、
 移動のみを行い、強い味方によっていく、又は弱い敵によって行く。
 地形効果はもちろん高い所へ。

1はカウンタで全部調べればよいので簡単だったけど、
2は抽象的なので思うように動いてくれなくて難しかった。

作る順序としてはまずは1を作ってみるといいと思う。
全部調べるから速度的に大丈夫かと思うかもしれないけど
使用可能アイテム4つ、移動力10以上でも、遅くても2、3秒以内だったと思う。
0024名無しさん、君に決めた!04/03/14 03:50ID:izwc8dBb
>>17
それは浮動少数でなく固定少数ですな

普通は1024(=2^10)とか4096(=2^12)を1とするのが速度的にいいよ。
0025名前は開発中のものです。04/03/14 14:32ID:qzv+RJRF
2D時代は、2^8でずっとやってきたな。
ハードの制約だけど、その頃はこれが一番。
0026名前は開発中のものです。04/03/14 15:14ID:lOSTaqTt
今もスケーリングを普通にやってるなー
↓みたいな感じで

dest[0] = dest[0] + ((dest[0] - src[0]) * alpha / 256);
...
0027名前は開発中のものです。04/03/14 15:18ID:lOSTaqTt
src[0] - dest[0]の間違いか・・・

MMX命令よりもSSE命令で今は行うのが一般的なのかな?
0028名前は開発中のものです。04/03/15 10:22ID:xvHM+bhp
固定小数点をマクロにしとくと(・∀・)イイ

/* 固定小数点型 */
typedef signed long fix;


/* 整数⇔固定小数点 */
#define FIX_TO_INT( a ) (( a ) >> 16)
#define INT_TO_FIX( a ) (( a ) << 16)

/* 浮動小数点⇔固定小数点 */
#define FLOAT_TO_FIX( a ) (fix)(( a ) * 0xffff)
#define FIX_TO_FLOAT( a ) ((float)( a ) / (float)(0xffff))
0029名前は開発中のものです。04/03/15 12:11ID:TcRXwi1n
いっそクラスにする手もあり。
コンパイラを信じられる漢におすすめ。
0030名前は開発中のものです。04/03/15 13:23ID:p3AFlJa9
Windowsのメッセージループで質問なのだけど、GetMessage()を使うのと、
PeekMessage()を使うのはどちらが主流なのかな?
GetMessage()+SetTimer()はFPSが微妙に安定しないし、PeekMessage()だと
CPUを100%使いかねない。
個人的にはCPUを100%使ってしかもムダ使いというのはマルチタスクOSでの
プログラミングとしては礼儀違反と思うし、例えば落ちゲーとかブロック崩し
なんかでCPU100%てのは納得もいかない。
SetTimer()での安定の悪さを考えて、1msecでWM_TIMERを発生させたあとに
timeGetTime()で実際の時間を取得、ずれを調整するようにしてみた。
WM_TIMER自体が1〜20msecで発生しているようで、とても60fpsなゲームなんて
作れないなあと思った。
常識的な方法があるなら知りたい。
0031名前は開発中のものです。04/03/15 13:26ID:p3AFlJa9
あともう一つ。
よくベンチマークで、400fpsとかいう数値があったりするけれど、
あれって何? 画面自体はせいぜい120fpsでるかどうかでしょ。
オレのモニタは液晶だから60だけど、CRTでも80とかじゃない?
400って表示しているFPSじゃなくて、演算可能な理論値ってことなのかな?
0032名前は開発中のものです。04/03/15 13:33ID:BH49Bw7k
>CPUを100%使いかねない。
Sleep入れればいいじゃん。

>よくベンチマークで、400fpsとかいう数値があったりするけれど、
>あれって何? 画面自体はせいぜい120fpsでるかどうかでしょ。
blitやポリゴン描画なんかの処理とモニタに出力する処理はほぼ平行に行われるから
そういう「描画処理」自体はモニタの同期信号の周波数とは関係ない。
普通HBLANKを待つから最大fps=リフレッシュレートなことが多い、というだけ。
0033名前は開発中のものです。04/03/15 14:54ID:nFKOW0T2
>>30
GetMessageで。WindowsなどVブランクをシステムが管理している場合は
ゲームスピードをFPS基準にすべきではない。75Hzの人もいれば60Hzの
人もいるのでVブランクではなく時間を基準にすべし。WM_TIMERは200ms
程度の精度(実際は変動あり)しかないのでMultiMediaTimerを使うしかない
と思われる。

Vブランクに関係なく処理が終わったら画面更新という設計にしておいて、
アニメーションは時間単位で制御する方針で。

>>31
Vブランクを待たずに画面更新をした場合の1秒間のフレーム更新回数。
コンシューマゲームと違ってVSyncはシステムが管理しているので、描画
ラスターがどこにいるかは意識する必要がない。
0034名前は開発中のものです。04/03/15 15:05ID:BH49Bw7k
あと、タイマーの精度については↓こんな文書があるので参考にしましょう!

GetTickCount, timeGetTime等の精度について
http://www.emit.jp/prog/prog_t1.html
0035名前は開発中のものです。04/03/15 16:34ID:4yykzdEK
FF風のRPGのゲームを作るプログラムは何が最適かな?
2Dで作りたいんですが。
0036名前は開発中のものです。04/03/15 16:58ID:7lXda+Uw
FFのどれだよ
0037名前は開発中のものです。04/03/15 17:43ID:p3AFlJa9
>>32>>33
おー。レスありがと。30&31です。
そか、fps表示は理論値ってことだね。納得。

IDirectDraw7::WaitForVerticalBlankでVSYNC待ちをするよう
作っていた。そのあとでバックサーフェースからフロントサーフェースに
IDirectDrawSurface7::Bltで画面転送していたけれど、試しにVSYNC待ちを
削ってみても問題なく動作した。そういうものだったのか。
Blt後にGetScanLineでVライン位置を取ってみると1027〜1031くらいの
数値が出る(縦1024のモニタ)から、自動的にVSYNC待ちをしてたんだね。
無駄なことをしてたワ。

なるほど、Sleep()はtimeBeginPeriod()と使うと誤差が減るのか。
PeekMessage()+Sleep()を試してみるよ。サンクス!
0038名前は開発中のものです。04/03/15 18:25ID:L+ne9Ht6
VC.NET2003にて
デバッグモードだと普通に動いてるのに
リリースモードにするとエラります(;´д⊂)
このような状況に陥る可能性にはどんな物があるでしょうか
0039名前は開発中のものです。04/03/15 18:33ID:p3AFlJa9
>>38
メモリリーク。
あるいはライブラリとのデバッグ/リリースモードの不整合。
0040名前は開発中のものです。04/03/15 18:50ID:BH49Bw7k
加えて
・変数、配列の初期化ミス
・配列や確保したメモリの境界を越えたアクセスにより他の変数が壊れた
とかも。
いずれもデバッガじゃ追いにくいやつやね。
がんがれ。
0041名前は開発中のものです。04/03/15 19:08ID:JehxVOt7
半透明ポリゴンのZソートを高速に行う方法を教えてください。
検索をかけたのですが、アルゴリズムを見つけられませんでした。

今やってるやり方は、
3角形の重心を透視変換して計算したZ値 0.0〜1.0を
もとにクイックソートをつかって並び替えています。

この方法が一般的でしょうか?
0042名前は開発中のものです。04/03/15 19:49ID:cPa+rKUo
いいんじゃない
0043名前は開発中のものです。04/03/15 23:18ID:TVsWtjPx
俺がこの前作ったゲームは、面倒だったのでstable_sort一発にしてしまった。
仮のつもりだったのに何の問題もないから不思議だ。富豪的プログラミングマンセー
0044名前は開発中のものです。04/03/16 16:37ID:/Nn0fi6h
>>41
0.0〜1.0の値を、たとえば0-255とか0-1023の値にマッピングする。
あとは256個なり1024個なりのインデックステーブルを用意して、
マップした値のテーブルにポリゴンを登録する。

全部の登録が終わったら、テーブル順に描画すればいい。
0045名前は開発中のものです。04/03/16 20:05ID:JP2lEbCQ
バケツソートですな。
0046名前は開発中のものです。04/03/16 23:07ID:wJFvxNHa
>>41
「Bitonic sort」これって関係あり?
当方、画像プログラムをやった事の無いヘタレなんで、
もし勘違いだったらスマソ。
t-potさんところが詳しいです。
0047名前は開発中のものです。04/03/16 23:40ID:ktbTl6+f
これは一種の未来技術かと。
00484104/03/17 01:12ID:Bz6qtYMx
>>44
ありがとうございます。

Z値をある程度の配列に割り振って、
精度的に問題があれば配列の数を増やしていくということですね。

ただちょっと疑問があるのですが、
インデックステーブルが 100 などの値でなく
256、1024 のように2の乗数なのはなにか理由があるのでしょうか?

Z値1.0から1024個のインデックスを求めるときには
int index = (int)(z * 1024.0f);
といった具合に計算するのでしょうか?
0049名前は開発中のものです。04/03/17 15:40ID:7fGZz4Ir
>>48
単純にシフトで計算しやすい値というだけの話。別に10個でも100個でも1000個でも
好きな数を割り当てればいい。
それから、ある1つのテーブル要素に対して複数のポリゴンが割り当てられる可能性を
考慮して組むこと。具体的にはインデックステーブルをポインタテーブルにして、リンク
各要素からリンクリストがぶらさがるようなイメージかな。
0050名前は開発中のものです。04/03/18 09:07ID:8j8lQKul
OTってやつ?
0051名前は開発中のものです。04/03/18 09:47ID:B+MnpSym
OTZではない。
0052名前は開発中のものです。04/03/19 23:21ID:xSnIz48S
on
0053名前は開発中のものです。04/03/24 09:40ID:HbaECddB
QVGA(320×240) の解像度ってどんなグラフィックカードでもサポートしてる?
0054名前は開発中のものです。04/03/24 10:02ID:6y/xMBfw
してないと思った方がいい
320*240で処理して640*480へ拡大bltがいいだろう
0055名前は開発中のものです。04/03/29 09:22ID:htU9rKwG
>>41
ちょっと複雑になるけど、BSP(2分空間分割)木を使ってもできると思う。
それぞれの半透明ポリゴンを一つのノードとして半透明ポリゴンモデルの
BSPデータベースを作っておいて、
ランタイムで、
・BSP空間へ視点を変換。
・視点の裏面になるノードを選び続けて、葉(末節)に達したらそのノードの
半透明ポリゴンをバーテックスバッファにコピー。
・以降、木を表面に遡っていけば、結果バーテックスバッファにポリゴンが
ソートされている。
ノード毎に視線ベクトルと面の内積を計算しなきゃいけないのが難か?
素直にソートした方が早そうだ。
0056名前は開発中のものです。04/03/29 09:26ID:htU9rKwG
>>48
>int index = (int)(z * 1024.0f);

z=0.0のとき index=0,
z=1.0のとき index=1023
にしたいんだから、
int index = (int)(z * 1023.0f);
0057名前は開発中のものです。04/03/29 12:02ID:iNk+Kk8E
いつでも60fpsを目指した結果以下のようなコードになったのですが
なんかもう頭が混乱して自分でやってることが良くわからなくなってしまいました。
一応思ったとおりに動作するのですが、どうも不安です。
改善点などのアドバイスをお願いします。

DWORD fps60wait[] = {17,17,17,16};

ima_time = timeGetTime();
dtime = ima_time - sakki_time;
if ( dtime < 11 )
{
 lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, 0);
}
counter = (counter % 4) + 1;
wait = fps60wait[counter - 1];

do {
 ima_time = timeGetTime();
 dtime = ima_time - sakki_time;
 Sleep(0);
} while(dtime < wait);

sakki_time = ima_time;

<描画>
<処理>
0058名前は開発中のものです。04/03/29 13:33ID:1rpdsxXj
>>57
Windows環境のプログラムでしょ。なぜ60FPSにこだわる必要があるんだろう。
>>33参照。
00595704/03/29 23:22ID:iNk+Kk8E
>>58
60FPSは実はどーでもいいんですが
既に60固定で作っちゃったんで>>57に問題がないか知りたいんです。
>>33はとにかくVSYNCは無視しろってことですよね。
0060名前は開発中のものです。04/04/03 11:39ID:RYYtnws6
ゲームを作るうえでいきなりシュミレーションゲームを作る
のはやはり無謀でしょうか?
もっと簡単なのから作るのが普通でしょうか?
0061名前は開発中のものです。04/04/03 12:04ID:4VZfUvkc
>>60
シミュレーションってウォーシミュレーション?
ならここ↓の問題設定で手も足も出ないと感じたら
http://pc5.2ch.net/test/read.cgi/gamedev/1079745509/
ブロック崩しとかから五目並べみたいなのからやってみた方がいいと思う。
サンプルも探しやすいしね。
00626204/04/03 14:32ID:c0YQngLd
動く絵を表示させるプログラムで、綺麗にプログラムを書きたいと思っているのですが自分ではどうにも・・・。
とりあえず自分がいま使ってるやり方を書きます。

if(a>1&&a<10){
a++;
1枚目の絵を表示させる}
if(a>11&&a<20){
a++;
2枚目の絵を表示させる}
if(a>21&&a<30){
a++;
3枚目の絵を表示させる}
if(a==30)
a==1;

こんな感じで動く絵を表示させているのですが、どうも見た目が汚いと思います。
うまい方々はこうゆうプログラムをどう書くのでしょうか?
0063名前は開発中のものです。04/04/03 14:40ID:J+xYk8BN
aってナニ
絵ってナニ
いつ実行してるの
00646204/04/03 15:06ID:c0YQngLd
aは整数の変数を表しています。
絵というのは絵1・絵2・絵3でパラパラ漫画の用になっています。

つまり、これは段々と絵が1・2・3へと変わっていくプログラムです。
自分がしたい事はメインのループを10回ループすると絵が1枚づつ変わっていくようなものです。

わかりましたでしょうか?
0065名前は開発中のものです。04/04/03 15:39ID:EgtzjyXv
Picture *lPicture[3];
int indexPic = 0;

lPicture[0] = &picture1;
lPicture[1] = &picture2;
lPicture[2] = &picture3;

for(int i=0; ; i++)
{
  if (i%10 == 0)
  {
    indexPic ++;
    if (indexPic > 3)
    {
      indexPic = 0;
      i = 0;
    }
  }
  DrawPicture(lPicture[indexPic]);
}
0066名前は開発中のものです。04/04/03 15:52ID:sI/6/JHP
>>62

こんな感じで、タイマー使ってやんないと、まともにタイミング取れないと思う。
タイマーは独立したスレッドで、タイマー満了コールバックとかでやる方法もある。

const int numPictures = 20; //フレーム数20枚
const float secPerFrame = 0.1f; // 1フレーム0.1秒=毎秒10枚
int idx = 0;
float sumDt = 0;
long prevTime = timeGetTime();
while( true )//永久に
{
 float dt;
 long currentTime = timeGetTime();
 dt = float(currentTime - prevTime)/1000.0f;
 prevTime = currentTime;
 sumDt += dt;
 if( sumDt >= secPerFrame )
 {
  //idx番目の絵を表示
  idx++;
  if( idx == numPictures )
   idx = 0;
  sumDt = 0;
 }
}
0067名前は開発中のものです。04/04/03 21:02ID:3azEgRom
>>62 正直やりすぎた
template<unsigned int Max, typename Son = EmptyCounter>
class LoopCounter
{
protected:
  Son       m_Son;
  unsigned int  m_Count;
public:
  LoopCounter() : m_Count(0) {}
  bool Inc()
  {
    if (m_Son.Inc())
    {
      if (++m_Count == Max)
      {
        m_Count = 0;
        return true;
      }
    }
    return false;
  }
  unsigned int Get() const { return m_Count; }
};
struct EmptyCounter
{ bool Inc() { return true; } };
//作成
  LoopCounter<3, LoopCounter<10> > AnmCounter;
//ループ
  Draw(AnmCounter.Get());
  AnmCounter.Inc();
00686204/04/03 22:16ID:c0YQngLd
返答ありがとうございます。
とりあえず、すべて試してみようと思います。
0069名前は開発中のものです。04/04/03 23:32ID:UsdbLZaC
そもそも、アニメを制御するのに切り替えをプログラムで直接書こうという
考えから改めるべきだな。
データを読み取って、指定された時間に指定された絵を書くプログラムを書け。
0070名前は開発中のものです。04/04/05 09:52ID:VdLSCHpK
教えて君で申し訳ないけど、
ネットリソースではなかなか見つからなかったので質問させてください。

2Dアクションゲームでモーション中に別モーションを呼ぶ場合、
(例:ダッシュ中にパンチ、パンチキャンセルでキック等など)
モーション要求はスタックに積むのが常道でしょうか?

ダッシュとジャンプはそれぞれ加速度と重力変数で判別できるのですが、
キャンセル系について、たとえばガードキャンセル+パンチキャンセル+キックといった
コマンド技に似たもので、自分がどんなことをしてきたかの遷移がわからないのです。

一応コーディングしてみると、直前モーションを保存するとif文の数が40個ぐらいになってしまいました。
STLって何?っていう厨房なので、スタック以外にも方法があればご教授おねがいします m(--)m


0071名前は開発中のものです。04/04/05 17:41ID:Wxg2TEwm
>>70
スタックに積む=1モーション完了して次モーション
だと、いわゆるスト2の「キャンセル」っぽい動きにはならない。
ちなみにスト2のキャンセルは行きと戻りのモーションがあって、
行きモーション中にコマンドが成功したら戻りを「キャンセル」して
次モーションにつながることから。おそらく行きモーションと戻り
モーションが別コントロールになってるんだろうね。
どういう動きをさせたいのか頭の中を整理してみるほうがいい。
0072名前は開発中のものです。04/04/05 17:44ID:rH0o4MFm
3Dゲーつくってます。
主人公キャラの位置をRAYにして、地形と障害物とのあたり判定をしようと思っています。
とりあえず、移動方向に1フレームの移動分だけレイを飛ばして速度ベクトルをその真下にしました。
地形に沿って移動はできるのですが、この方法では主人公とおなじ高さで垂直に立ってる壁とか、こっちに向かって傾斜しているポリゴンがあると困ります。
はじめにレイを進行方向に飛ばすときもあたり判定を計算すると2倍の計算量になってしまいますが、仕方ないのでしょうか。
0073名前は開発中のものです。04/04/05 20:32ID:WG5Tm/kb
>>72
何を言いたいのかさっぱりわかりません。

もっとわかりやすく書いて、
改行も入れてください。
0074名前は開発中のものです。04/04/08 01:27ID:VoayxJMR
計算量を減らすようにすればいいんじゃねぇか?
どんなやり方してるかしらないけど。
アタリを分割すれば計算量は抑えられる。
AABBツリーを調べてみて。

0075名前は開発中のものです。04/04/13 02:27ID:00yuZNJk
スーパーマリオブラザーズみたいなのを作ろうと思ってます。
今のところスクロールまで作ったのですが、画面のちらつきが気になってしかたありません。
一応バックバッファに描いてから転送するようにしています。
http://gamdev.org/up/img/475.zip

よければ解決策を教えてください。
0076名前は開発中のものです。04/04/13 11:44ID:tK3wV3VD
特にちらついてないように見える
もしかしてティアリングのこといってるの?
0077名前は開発中のものです。04/04/13 12:33ID:xi3HdIxL
>>75
「リフレッシュレートに関する論争」スレでも検索してみるといいことがあるかも。
解決しようとするとちょっとした闇に踏み込むことになるので、覚悟するように。
00787504/04/14 00:41ID:s1vwKqYY
まさにそのティアリングってやつですね、たぶん。
スレを読んだりして見ましたけど、なんかめんどいんでこのまま進めることにします。
余力があったら考えてみたいと思います。
ありがとうございました。
0079名前は開発中のものです。04/04/14 01:24ID:fCb1f0Lh
フルスクリーンモードにしてフリップ使えば大概ティアリングは解消できる

が、垂直同期周波数が環境によって違うことも多いために
垂直同期とってもゲーム内の描画とのずれでカクカクしてくることもある

その辺がばっちり解決してもWinがリアルタイムOSでない時点で完璧には無理

どの辺で妥協するかが重要と思われ
タイマとフリップ併用が一番いいと思うけどね
0080名前は開発中のものです。04/04/14 02:16ID:bV4eSf3V
リフレッシュのタイミングとゲームのタイミングが完全にシンクロしない限り
RTOSでも無理だから。
0081名前は開発中のものです。04/04/16 17:56ID:6nIx9Yzb
はじめまして
とあるPDAで擬似的な3DのGAMEを作りたいと思っています。
2Dではいくつか作って公開していますが、PDAの3Dの場合
自力で書くしかないでしょう。
今、市販されている3DプログラミングものはDirextXを利用した3Dエンジンを使用したものが
多いですね
そうではなく自力で(ある程度はしょったモノになると思います。PDAだから)3Dを書きたい人におすすめな
書籍(もちろんWindows95前後の頃のものだと思うのですが)のタイトルと簡単などういう感じか
教えてもらえないでしょうか?

※こういった質問はここでよろしかったでしょうか? よろしくお願いします。
言語はCもしくはC++です。
上げさせていただいてもいいでしょうか?
0082名前は開発中のものです。04/04/16 18:03ID:ApfI3JPr
>>81
D3Dのマニュアル
■ このスレッドは過去ログ倉庫に格納されています