ゲームプログラミング相談室【Part6】
レス数が950を超えています。1000を超えると書き込みができなくなります。
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◇。☆
/ ◎| ̄ ̄∪ ̄∪ ̄ ̄ ̄|:◎:
/ ☆。|.. 新スレおめ .|☆
▼ 。○..io.。◇.☆____| 。.:
∠▲―――――☆ :∂io☆ ゜◎∂:.
0004名前は開発中のものです。
04/03/06 16:00ID:IZnhr4O32Dで作りたいのですが、その場合の最適な方法を教えて
下さい。
DirectXのスプライトやテクスチャを使うよりひょっとして
GDIを使った方が早いとか・・その辺どうなのでしょうか?
プログラミングに関してわりと初心者なので、ご助言よろしく
お願します。
0005名前は開発中のものです。
04/03/06 16:08ID:XiMT98gxDirectXとC/C++で作る。
描画まわりを自分で組むのは面倒だし、
よくわからないので誰かのライブラリを使わせてもらう。
誰のライブラリを使うかは自分で探す。
これでとりあえずゲームを作れる環境は整う。
0006名前は開発中のものです。
04/03/06 16:32ID:qxY/Wlgs0007名前は開発中のものです。
04/03/06 17:05ID:KI9N5j4B2Dなら、GDI(DIBSection)の方が開発はやりやすい。
描画性能に関しては、少なくとも「画面への描画速度」は問題ない
場合が多い(内部への描画処理については、単純にメモリを読み書き
るDIBectionの方が有利な可能性もある)。また、スプライトは32
ビットフルカラーなどピクセル単位の処理を容易にできるシステム
でやる分には、ピクセルをすべて自力で処理しても大丈夫だろうね。
ただし「滑らかな画面更新」を重視するのなら、DirectXで全画面
占有タイプにした方が有利なことは有利かもしれない(開発の労力
は一気に増すがw)。
0008名前は開発中のものです。
04/03/06 17:36ID:hsXyG1/ujavaかflashだと重さを考えたらflashのほうがいいですか?
0009名前は開発中のものです。
04/03/06 20:59ID:IZnhr4O3ご助言ありがとうございます。
とりあえずDirectGraphicsのテクスチャと
ヤネ氏のライブラリで速度を比べてみようかと
思います。(DirectX9.0には大分慣れたのですが、
Win32は、不慣れなので・・。)
0010名前は開発中のものです。
04/03/10 19:48ID:jIa556UV描画速度に違いはあるのかしら?
0011名前は開発中のものです。
04/03/10 23:17ID:7vMs+89m0012名前は開発中のものです。
04/03/10 23:32ID:V51Y5dwKそれはテクスチャを含むDirect3Dのラッパーだよ。
で、ラッパーは常に元より遅い。
実際にどれくらい遅いかは知らん。
機能の違いは、2Dと3Dの違いだ。3Dは2Dを包含する。
0013名前は開発中のものです。
04/03/11 12:01ID:jsiJP8hl↓にもちょっとした話が。
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:5BV6NOnPDirectXだからfloat
0016名前は開発中のものです。
04/03/13 03:29ID:8/IMYlHX0017名前は開発中のものです。
04/03/13 04:48ID:uJUWjvsQCだけど整数型でやっている。3を3000としたりして。
0018名前は開発中のものです。
04/03/13 05:30ID:gHL8rm2k割り算よりシフトの方がいいらしよ
0019名前は開発中のものです。
04/03/13 11:35ID:rbv/waoIそのうちdoubleが標準になるんかねえ。
floatだと広大なフィールドをリニアに扱えんし。
0020名前は開発中のものです。
04/03/13 18:14ID:PUoUaF4y敵の思考を考えるのが難しい
プレイヤー側ユニットとの距離を調べる
↓
一番近いユニットに近づく
↓
攻撃できる距離だったら攻撃する
みたいな感じで組んでるんだけど
・障害物
・攻撃スキルの特性(2マス離れてても攻撃可、とか回復スキルとか)
・移動した後攻撃するか、攻撃したあと移動するか etc...
そういう色々な要素が入ってくるとわけわからなくなる
素人は手を出さないほうがいいジャンルなんだろうか…
なにかコツとかあったら教えて下さい
0021名前は開発中のものです。
04/03/13 18:26ID:2y9JGEPFA*サーチアルゴリズムとかを参考にすべし。
たとえば↓。探せばいっぱいあるはず。
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サンクスです
やはり難しそう・・・
やれるだけやってみます
いざとなったら要素削ってシンプルにするかな・・・
0023名前は開発中のものです。
04/03/14 00:40ID:tW50q/qz自分はFE風のを作った事があったが、その場合。
1:すべての移動できる位置、使用できるアイテムから、使用対象がいるか調べる。
攻撃系なら敵、回復系なら味方。複数あるなら効果が一番高いものを選ぶ。
攻撃系なら相手のHPを大きく減らせて(量ではなく%)、命中率がよく、
逆に相手からはそれが低くなるもの、回復系の場合は回復%、命中が高いもの。
同じアイテム、同じ対象に対して使用できる位置が複数あるなら、
地形効果が高い場所から行動する。地形効果が同じなら歩数が一番少ない所から。
2:1の対象がいない、または攻撃すると逆に自分に及ぶ被害のほうが大きそうな時、
移動のみを行い、強い味方によっていく、又は弱い敵によって行く。
地形効果はもちろん高い所へ。
1はカウンタで全部調べればよいので簡単だったけど、
2は抽象的なので思うように動いてくれなくて難しかった。
作る順序としてはまずは1を作ってみるといいと思う。
全部調べるから速度的に大丈夫かと思うかもしれないけど
使用可能アイテム4つ、移動力10以上でも、遅くても2、3秒以内だったと思う。
0024名無しさん、君に決めた!
04/03/14 03:50ID:izwc8dBbそれは浮動少数でなく固定少数ですな
普通は1024(=2^10)とか4096(=2^12)を1とするのが速度的にいいよ。
0025名前は開発中のものです。
04/03/14 14:32ID:qzv+RJRFハードの制約だけど、その頃はこれが一番。
0026名前は開発中のものです。
04/03/14 15:14ID:lOSTaqTt↓みたいな感じで
dest[0] = dest[0] + ((dest[0] - src[0]) * alpha / 256);
...
0027名前は開発中のものです。
04/03/14 15:18ID:lOSTaqTtMMX命令よりも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:p3AFlJa9PeekMessage()を使うのはどちらが主流なのかな?
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:BH49Bw7kSleep入れればいいじゃん。
>よくベンチマークで、400fpsとかいう数値があったりするけれど、
>あれって何? 画面自体はせいぜい120fpsでるかどうかでしょ。
blitやポリゴン描画なんかの処理とモニタに出力する処理はほぼ平行に行われるから
そういう「描画処理」自体はモニタの同期信号の周波数とは関係ない。
普通HBLANKを待つから最大fps=リフレッシュレートなことが多い、というだけ。
0033名前は開発中のものです。
04/03/15 14:54ID:nFKOW0T2GetMessageで。WindowsなどVブランクをシステムが管理している場合は
ゲームスピードをFPS基準にすべきではない。75Hzの人もいれば60Hzの
人もいるのでVブランクではなく時間を基準にすべし。WM_TIMERは200ms
程度の精度(実際は変動あり)しかないのでMultiMediaTimerを使うしかない
と思われる。
Vブランクに関係なく処理が終わったら画面更新という設計にしておいて、
アニメーションは時間単位で制御する方針で。
>>31
Vブランクを待たずに画面更新をした場合の1秒間のフレーム更新回数。
コンシューマゲームと違ってVSyncはシステムが管理しているので、描画
ラスターがどこにいるかは意識する必要がない。
0034名前は開発中のものです。
04/03/15 15:05ID:BH49Bw7kGetTickCount, timeGetTime等の精度について
http://www.emit.jp/prog/prog_t1.html
0035名前は開発中のものです。
04/03/15 16:34ID:4yykzdEK2Dで作りたいんですが。
0036名前は開発中のものです。
04/03/15 16:58ID:7lXda+Uw0037名前は開発中のものです。
04/03/15 17:43ID:p3AFlJa9おー。レスありがと。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デバッグモードだと普通に動いてるのに
リリースモードにするとエラります(;´д⊂)
このような状況に陥る可能性にはどんな物があるでしょうか
0039名前は開発中のものです。
04/03/15 18:33ID:p3AFlJa9メモリリーク。
あるいはライブラリとのデバッグ/リリースモードの不整合。
0040名前は開発中のものです。
04/03/15 18:50ID:BH49Bw7k・変数、配列の初期化ミス
・配列や確保したメモリの境界を越えたアクセスにより他の変数が壊れた
とかも。
いずれもデバッガじゃ追いにくいやつやね。
がんがれ。
0041名前は開発中のものです。
04/03/15 19:08ID:JehxVOt7検索をかけたのですが、アルゴリズムを見つけられませんでした。
今やってるやり方は、
3角形の重心を透視変換して計算したZ値 0.0〜1.0を
もとにクイックソートをつかって並び替えています。
この方法が一般的でしょうか?
0042名前は開発中のものです。
04/03/15 19:49ID:cPa+rKUo0043名前は開発中のものです。
04/03/15 23:18ID:TVsWtjPx仮のつもりだったのに何の問題もないから不思議だ。富豪的プログラミングマンセー
0044名前は開発中のものです。
04/03/16 16:37ID:/Nn0fi6h0.0〜1.0の値を、たとえば0-255とか0-1023の値にマッピングする。
あとは256個なり1024個なりのインデックステーブルを用意して、
マップした値のテーブルにポリゴンを登録する。
全部の登録が終わったら、テーブル順に描画すればいい。
0045名前は開発中のものです。
04/03/16 20:05ID:JP2lEbCQ0046名前は開発中のものです。
04/03/16 23:07ID:wJFvxNHa「Bitonic sort」これって関係あり?
当方、画像プログラムをやった事の無いヘタレなんで、
もし勘違いだったらスマソ。
t-potさんところが詳しいです。
0047名前は開発中のものです。
04/03/16 23:40ID:ktbTl6+f004841
04/03/17 01:12ID:Bz6qtYMxありがとうございます。
Z値をある程度の配列に割り振って、
精度的に問題があれば配列の数を増やしていくということですね。
ただちょっと疑問があるのですが、
インデックステーブルが 100 などの値でなく
256、1024 のように2の乗数なのはなにか理由があるのでしょうか?
Z値1.0から1024個のインデックスを求めるときには
int index = (int)(z * 1024.0f);
といった具合に計算するのでしょうか?
0049名前は開発中のものです。
04/03/17 15:40ID:7fGZz4Ir単純にシフトで計算しやすい値というだけの話。別に10個でも100個でも1000個でも
好きな数を割り当てればいい。
それから、ある1つのテーブル要素に対して複数のポリゴンが割り当てられる可能性を
考慮して組むこと。具体的にはインデックステーブルをポインタテーブルにして、リンク
各要素からリンクリストがぶらさがるようなイメージかな。
0050名前は開発中のものです。
04/03/18 09:07ID:8j8lQKul0051名前は開発中のものです。
04/03/18 09:47ID:B+MnpSym0052名前は開発中のものです。
04/03/19 23:21ID:xSnIz48S0053名前は開発中のものです。
04/03/24 09:40ID:HbaECddB0054名前は開発中のものです。
04/03/24 10:02ID:6y/xMBfw320*240で処理して640*480へ拡大bltがいいだろう
0055名前は開発中のものです。
04/03/29 09:22ID:htU9rKwGちょっと複雑になるけど、BSP(2分空間分割)木を使ってもできると思う。
それぞれの半透明ポリゴンを一つのノードとして半透明ポリゴンモデルの
BSPデータベースを作っておいて、
ランタイムで、
・BSP空間へ視点を変換。
・視点の裏面になるノードを選び続けて、葉(末節)に達したらそのノードの
半透明ポリゴンをバーテックスバッファにコピー。
・以降、木を表面に遡っていけば、結果バーテックスバッファにポリゴンが
ソートされている。
ノード毎に視線ベクトルと面の内積を計算しなきゃいけないのが難か?
素直にソートした方が早そうだ。
0056名前は開発中のものです。
04/03/29 09:26ID:htU9rKwG>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なんかもう頭が混乱して自分でやってることが良くわからなくなってしまいました。
一応思ったとおりに動作するのですが、どうも不安です。
改善点などのアドバイスをお願いします。
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:1rpdsxXjWindows環境のプログラムでしょ。なぜ60FPSにこだわる必要があるんだろう。
>>33参照。
005957
04/03/29 23:22ID:iNk+Kk8E60FPSは実はどーでもいいんですが
既に60固定で作っちゃったんで>>57に問題がないか知りたいんです。
>>33はとにかくVSYNCは無視しろってことですよね。
0060名前は開発中のものです。
04/04/03 11:39ID:RYYtnws6のはやはり無謀でしょうか?
もっと簡単なのから作るのが普通でしょうか?
0061名前は開発中のものです。
04/04/03 12:04ID:4VZfUvkcシミュレーションってウォーシミュレーション?
ならここ↓の問題設定で手も足も出ないと感じたら
http://pc5.2ch.net/test/read.cgi/gamedev/1079745509/
ブロック崩しとかから五目並べみたいなのからやってみた方がいいと思う。
サンプルも探しやすいしね。
006262
04/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絵ってナニ
いつ実行してるの
006462
04/04/03 15:06ID:c0YQngLd絵というのは絵1・絵2・絵3でパラパラ漫画の用になっています。
つまり、これは段々と絵が1・2・3へと変わっていくプログラムです。
自分がしたい事はメインのループを10回ループすると絵が1枚づつ変わっていくようなものです。
わかりましたでしょうか?
0065名前は開発中のものです。
04/04/03 15:39ID:EgtzjyXvint 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こんな感じで、タイマー使ってやんないと、まともにタイミング取れないと思う。
タイマーは独立したスレッドで、タイマー満了コールバックとかでやる方法もある。
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:3azEgRomtemplate<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();
006862
04/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スタックに積む=1モーション完了して次モーション
だと、いわゆるスト2の「キャンセル」っぽい動きにはならない。
ちなみにスト2のキャンセルは行きと戻りのモーションがあって、
行きモーション中にコマンドが成功したら戻りを「キャンセル」して
次モーションにつながることから。おそらく行きモーションと戻り
モーションが別コントロールになってるんだろうね。
どういう動きをさせたいのか頭の中を整理してみるほうがいい。
0072名前は開発中のものです。
04/04/05 17:44ID:rH0o4MFm主人公キャラの位置をRAYにして、地形と障害物とのあたり判定をしようと思っています。
とりあえず、移動方向に1フレームの移動分だけレイを飛ばして速度ベクトルをその真下にしました。
地形に沿って移動はできるのですが、この方法では主人公とおなじ高さで垂直に立ってる壁とか、こっちに向かって傾斜しているポリゴンがあると困ります。
はじめにレイを進行方向に飛ばすときもあたり判定を計算すると2倍の計算量になってしまいますが、仕方ないのでしょうか。
0073名前は開発中のものです。
04/04/05 20:32ID:WG5Tm/kb何を言いたいのかさっぱりわかりません。
もっとわかりやすく書いて、
改行も入れてください。
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「リフレッシュレートに関する論争」スレでも検索してみるといいことがあるかも。
解決しようとするとちょっとした闇に踏み込むことになるので、覚悟するように。
007875
04/04/14 00:41ID:s1vwKqYYスレを読んだりして見ましたけど、なんかめんどいんでこのまま進めることにします。
余力があったら考えてみたいと思います。
ありがとうございました。
0079名前は開発中のものです。
04/04/14 01:24ID:fCb1f0Lhが、垂直同期周波数が環境によって違うことも多いために
垂直同期とってもゲーム内の描画とのずれでカクカクしてくることもある
その辺がばっちり解決してもWinがリアルタイムOSでない時点で完璧には無理
どの辺で妥協するかが重要と思われ
タイマとフリップ併用が一番いいと思うけどね
0080名前は開発中のものです。
04/04/14 02:16ID:bV4eSf3VRTOSでも無理だから。
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:ApfI3JPrD3Dのマニュアル
008381
04/04/16 18:15ID:6nIx9Yzb申し訳ありません D3Dとは何かの略でしょうか?
検索してみたのですが 海外の会社ばかり引っかかるようです
フルネームを教えてくださいませんでしょうか?
お手数をおかけしますがよろしくお願いします
0084名前は開発中のものです。
04/04/16 18:23ID:ApfI3JPrDirect3Dだよ。
基礎知識のページに
ジオメトリやトランスフォーム、ラスタ化ルールとか
入門に必要な情報はみんな書いてある。
008581
04/04/16 18:43ID:6nIx9YzbMSのサイトが引っかかりました。
ttp://www.microsoft.com/japan/msdn/academic/Articles/DirectX/01/
基礎知識のページとはここでいいでしょうか?
あとDirect3Dのヘルプにも詳しいそうですね。
0086名前は開発中のものです。
04/04/16 19:29ID:ApfI3JPrhttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/DirectX9_c/directx/graphics/programmingguide/gettingstarted/gettingstarted.asp
ここだけど、3Dトランスフォームとかの文章がなくなっちゃってるね。
DirectX7.0迄のマニュアルを落としてきて参照するのがいいかと。
008781
04/04/16 20:07ID:6nIx9Yzbありがとうございます。
ttp://www.microsoft.com/downloads/details.aspx?FamilyID=3a9531f6-577c-4748-b59c-2197014f544e&displaylang=ja
より DirectX7.0ドキュメントを落としております。
感謝しています。
あのう…… 非常に図々しいのですがDOSの時代ってDirectXとか無かったわけですよね
DOOMとか…… あのころの技術とこのDirectX7.0に載っている技術とは基本は変わらないと思っていて
いいでしょうか?
DOOMでは、見えないモノは書かない、省略、上下の省略などで稼いでいたようですがこれってこれから
生まれた技術でしょうか? ちょっとWindows以外なのでDOOMが参考になるかと検索しているんです。
きっちりとした3Dを必要としてないものですから
それと同時に3Dの基本の情報を知りたかったのでこちらは本当に助かりました。
本当にありがとうございます。
008881
04/04/16 20:15ID:6nIx9Yzb2002年 6月号に3Dダンジョンの作成と表示の基本アルゴリズム(DOOMも絡む)
がありますね
これを求めたいと思います
他の人の参考になれば。
0089名前は開発中のものです。
04/04/16 21:26ID:1fUHdakN似非3DならダンジョンマスターとかWizardryとかそっち系のほうがいい気がしないでもない
0090名前は開発中のものです。
04/04/16 22:18ID:CYG69g6nその手のも作っては見ますが、升目式ダンジョンではなく同じような感じの道が
ないようにしたいわけです。
なんとなくそらで道を覚えられるみたいな感じに出来たらと考えていますので。
0091名前は開発中のものです。
04/04/16 23:40ID:bAbJcDxyキャノンからでたRenderWareの分厚い本。
3Dエンジンを作るにあたって生じた技術資料を適当にまとめて
「プロご用達!」などとうたって1万前後で販売!
CDにはRenderWareが入ってるが、これを使ったソフトを配布してはならないという罠。
クラリオンに聞くと「学習用ですので」。氏ね。
009281
04/04/17 00:32ID:KupmHoyYそれってプロ御用達と学習用と矛盾してますな。誰が見てもわかるところに
これを使ったソフトの配布禁止と書かれていて、学習用と書かれているのでしょうか?
(だったらこんなに怒るわけないよな……)
とあるソフトのマニュアル的なものなんでしょうねえ
そういう3Dプログラミング物多いですよね 以外と。
0093名前は開発中のものです。
04/04/17 01:28ID:a3IXbRjM3Dプログラミングってどう言ったレベルを想定してるか分らないが
自前実装って言うならラスタライズやら必要だよね?
"コンピュータグラフィックス 理論と実践"
辺りで良いんでないの?12000円と手頃だし。
特定ハードに依存(API等)しない
3Dの数学的理論、3Dの工業的理論(汎用的なコンピューター理論)
を身に付ければ、自前実装はスグできるようになる。
その前に、実装実機の理解は必須だと思うけど。
0094名前は開発中のものです。
04/04/17 03:02ID:mkUkAsviこの本ってさ、1つの話題に対しての密度薄すぎねぇ?
技術の名前だけのってて「はぁ?こりゃなんも説明できてねぇよ」
ってのが多々あるぞ。
式出したらせめて各変数の意味ぐらい書いとけってのが多々あってムカツク。
0095名前は開発中のものです。
04/04/17 05:17ID:a3IXbRjM自分のレベルに合わない本は、皆そう感じる物じゃない?
それに、自分の望むチャプターのみで、更にそれが根ほり葉ほり事細かな内容ってありえないでしょ。
DirectXのhelp読んで、
>1つの話題に対しての密度薄すぎねぇ?
>技術の名前だけのってて「はぁ?こりゃなんも説明できてねぇよ」
>式出したらせめて各変数の意味ぐらい書いとけ
何て言い出す人間の大半は
プログラムとC++と3Dプログラミングの基礎を持ってから読もうねって、感じの人間が多いと思う。
それと同じかな…?って思うけど…
違うなら、不満や不足に感じる部分は、他の本や他の情報源、
そして自分の頭で解決ってなる物でしょ?
幾ら何でも、答え頂戴、全部教えて、クレクレって方針はありえないでしょ。
普通に数学の基礎とハードの基礎とプログラムの基礎を持って読めば
十分な内容でしょ、12000円程度の価格なんだし。
0096名前は開発中のものです。
04/04/17 07:53ID:Le5gnz+vあんた序文や前書きちゃんと読んでるか?
俺はこの本は持ってないが、
同系統の「Real-Time Rendering」だと
「各トピックについて深く知りたい場合は、
参考文献を充実させたのでそちらを参照してくれ」
ってちゃんと書いてあるんだが。
0097名前は開発中のものです。
04/04/17 09:41ID:VEtZ9nxQはてさて、どちらが正しいのやら。
>>95の方が読んだ事無いように見えるけど
0098名前は開発中のものです。
04/04/17 16:07ID:a3IXbRjM>同系統の「Real-Time Rendering」
両方もってるが、全然同系統じゃないぞ。
Real-Time Renderingの方は原本の奴で英語だけど。
コンピュータグラフィックス 理論と実践は
主にはCGをコンピューターで扱う原理を解説してる。
点を定義してそれらを結んでピクセルを塗る原理(ライスライズ)とか
つまり、普段はハードやらAPIが処理してる低レベル部分の理論的説明が主。
つまり、3Dソフト自体を開発したり、
DirectX使わないでWindowsでポリゴン自力描画(WinAPIは使うけど)実装したり
(勉強で昔やった)って勉強が出来る。
Real-Time Renderingはその名の通り、もうダブルバッファ前提で
いかにリアルタイムで処理時間を稼ぐとかの技術が主にある。
しかも、参考文献ってさ、文献として上がってる
本の著者と名前が載ってるだけだと思うが?
コンピューターCGの本と3Dプログラムの本、同系統では無いと思うけど?
0099名前は開発中のものです。
04/04/25 12:00ID:dZ+uD0u1Cは向いていますか?
またいいツールとかありませんか?
0100名前は開発中のものです。
04/04/25 12:06ID:JYGTOjaq0101名前は開発中のものです。
04/04/25 12:14ID:dZ+uD0u1作れると言うことですか?
今勉強中ですが、Cってゲーム作れるのか?
と不安になってきました。
絵の表示の仕方がいまだにわかんないし・・・
0102名前は開発中のものです。
04/04/25 12:17ID:JYGTOjaq絵を表示するコードが1行の命令で、画面の初期化もらくちんって環境は
世の中にたくさんあるよ。
Cの利点は何でもやろうと思えば細かいことは出来るというだけで
その利点もハードガリガリアクセスする環境ならともかく
Winとかだとほとんどメリットないね
0103名前は開発中のものです。
04/04/25 12:29ID:dZ+uD0u1ちなにみ皆さんはこういうゲームを作るときは
どの言語を使ってるんですか?
0104名前は開発中のものです。
04/04/25 13:14ID:JYGTOjaq結局使い慣れた物が一番だと思う
最近はスクリプト系も結構あるから言語になれて内人はそっちがいいかな
俺はやはりC/C++を長くやっていたから言語体系が近いjavaとCだな
C++で中途半端なオブジェクト指向やるくらいならjavaいったほうがいいし、
シンプルにガリガリ叩くときにはCって感じ
javaだと画像表示やらシステム部分に時間をかけないでゲームの処理のみに
専念できてる感じがいい
Cとかはもちろん必要コード量が多くなるのでライブラリ整備が必須になって
変にシステムをいじってばかりでゲームに専念できないことも多い^^;
>>103がさわれそうな環境はC以外になにかあるの?
画像表示からうまくできてないということはDIBやらDirectXから出来るようになるには
かなり時間かかると思うから他を勧めたい
0105名前は開発中のものです。
04/04/25 13:34ID:dZ+uD0u1もっとも勉強しやすい環境にあるのはCだと想います。
こだわりと言うわけではありませんが、
できればCで作りたいと思っています。
>画像表示からうまくできてない
まだ勉強中なのでそこまで達していなのかもしれません
一応C入門の本は1冊読んだのですが・・・
0106名前は開発中のものです。
04/04/25 14:07ID:vDhsPj0Uみたいなもんだな。
CでやるとしてもまずはコンソールじゃなくWindowsプログラミングやらんといかんし。
まーいっそコンソール&glutって手もあるが。
0107名前は開発中のものです。
04/04/25 14:22ID:JYGTOjaqゲームプログラムが全く出来ない人もたくさんいる
ゲームに必要な知識と、そのプラットフォームで絵を出すとか
システムに必要な知識は全く別物なわけで
逆にスタンドアロンのゲームは作れるけどウインドウシステム上での
ゲームは作れないという人もいる
今のちみの状態は分からないことが多すぎかと
言語自体も本読んだというレベルなら表面上のものだけだと思うので
ポインタガンガン使えるというレベルまで言ってないと思われ
一番重要なのは目的がゲームを作ることなのか、それともC言語を
勉強したいのかってところだよ
昔はC言語&ゲーム作りたいってことが多かったと思うけどこれは
生産性を上げつつマシンスペックが低かった時代これしか選択肢がなかっただけ
8bit時代BASICでゲーム作って遅かったのでしかたなくハンドアセンブルへ
そして16bitになりメモリが多少裕福になってC言語へって人は多いはず
言語が目的ではないんだよ
それにプログラマは複数の言語が使えるのが普通
1つの言語で今後もいくとは思えない
0108名前は開発中のものです。
04/04/25 14:52ID:dZ+uD0u1かなり無謀だったみたいですね。
もちろんゲーム作成が目的ですが、
今は置いておいて、Cをがんがん使えるようになろうと思います
0109名前は開発中のものです。
04/04/25 15:36ID:RwxVe3k8次にC++をいくらかかじって、
あとはDirectXに進めばOK。
このQ&Aってもう何度もされてるよね。
ゲームプログラミングのまともな入門サイトor本がないということだろう。
どうにかならないもんかね?
0110名前は開発中のものです。
04/04/25 15:47ID:JYGTOjaqそれほど山のように雑誌はあった
ベーマガ、MSXFANなど読みやすくて分かりやすいシンプルな物がないからね
あとは個人レベルで作る物と商業レベルとでできあがる物が違いすぎるというか
でも昔から初心者向けと上級者向けはあってもその間の中レベル向けが
ほとんど存在しないと言う問題もあったよ
たとえばC言語は分かって絵も描画できる、でも具体的にゲームで必須な
垂直同期がなんなのかとかラスター割り込みがどうとかそういった物は
なかなかいいものはなかった
DirectXやるときC++よりCでやったほうが楽な気がする
0111名前は開発中のものです。
04/04/25 15:58ID:+MyYZ79o綺麗な使い方が出来ないと思うC++
0112名前は開発中のものです。
04/04/25 16:18ID:itt2Cin5DirectXやったことないけど、呼び出すだけだからどっちでも一緒じゃ?
0113名前は開発中のものです。
04/04/26 09:29ID:YvjKmIIw綺麗な使い方には絶対にならない。
0114名前は開発中のものです。
04/04/26 15:22ID:AM2u3eHSいや、そういうことじゃなくて、アレだろ?
C++なんだけどC風に組むとかそんなんだろ。多分。
でも、C++風に組んだ方が楽だと思うけどね。俺は。
0115名前は開発中のものです。
04/04/28 01:45ID:LxpA+NNA潔癖主義かつ無能なら何を使っても汚く感じるだろう。
0116名前は開発中のものです。
04/04/28 15:15ID:ELYXrsLP0117名前は開発中のものです。
04/04/28 20:35ID:brIWsk8Jなにが汚くなる可能性があるのか具体的に言ってみろばかー
0118名前は開発中のものです。
04/04/28 20:38ID:YnOaqFHo0119名前は開発中のものです。
04/04/28 20:52ID:brIWsk8J清純可憐で微妙なエロスの漂う穢れのないコードかけてるっつーの
0120名前は開発中のものです。
04/04/28 23:03ID:qRKYM2ci0121名前は開発中のものです。
04/04/29 00:07ID:klVfh8nk特別ですね。
言語レベルで厳格な貞操帯を装着しないと、猿のようにオナーニを
いえ独り善がりな汚いコードを書いてしまう無能には「C++は特別」です。
特別汚いコードを書ける言語です。彼等にとっては大きな問題です。
貞操帯を装着しなくても問題の無い一般人にとっては瑣末な問題です。
0122名前は開発中のものです。
04/04/29 01:29ID:ZbXlsRAe0123名前は開発中のものです。
04/04/29 03:54ID:w6BRdvWr0124名前は開発中のものです。
04/04/29 04:02ID:tELycjcoCEntityは自律行動を行うクラスで主にAIの更新を行う仮想関数Update()を持つ。
CRenderNodeはレンダラに登録され描画を行う仮想関数Render()を持つ。
CCollisionNodeはデフォルトの当たり判定を実装してあって衝突を検出したら仮想関数Collide()を呼び出す。
関連性のない3つのクラスからの多重派生ですがこれは邪道でしょうか?
また、みなさんはこの3つの要素をどの様にクラス化してますか?
ご意見お聞かせくださいませ。
0125名前は開発中のものです。
04/04/29 04:54ID:ffNyJU4j平和な奴だ。糞汚いコードを書いてばかりの低脳に
Java、C#、Dを試させてみたことがないんだろうな。
言語仕様上の規定(貞操)が厳格であるために
クルクルパーな悪性のハックは多少は減るが
やっぱりおかしなコードを書くんだよ。
馬鹿に付ける薬は無い。言語変えても駄目な奴は駄目。
0126名前は開発中のものです。
04/04/29 05:01ID:dU1CdeTe俺の場合、
class CCharacter : public CEntity
CRenderNode,CCollisionNodeはCCharacterのメンバ
理由は、描画リソース、コリジョンはいらないキャラのいるから。
例えば、ジェネレータとか。
とある理由で、CEntityをメンバにした事もある。
0127名前は開発中のものです。
04/04/29 05:08ID:klVfh8nk邪道・正道にはとやかく言及しないが
「〜Node」な2つの基底クラスの間で名前衝突が起きないってのが
ぶっちゃけあり得ない。背後にぐちゃぐちゃなメソッドの群れの気配がする。
0128名前は開発中のものです。
04/04/29 08:15ID:0gA9laqu肝心なのはその上位で、CCharacterのインスタンスの集合を管理しているクラスが
こいつをどういう風に扱うかにあると思う。
誰がどうやって生成して、どういうリストに組み込まれて、誰がメソッドを呼び出して、
誰がどうやって破棄している?
0129名前は開発中のものです。
04/04/29 09:54ID:r5N/wC7K俺はちょっと違うなCharacter以外はCharacterのメンバにする。
ちょっと>>124は機能とオブジェクトをいっしょにしてるのがよくなさげ。
継承で考慮するのはオブジェクト指向の説明でよく出てくる
犬と猫は哺乳類で・・・云々の話だけでいい。
もしEnemyなんてのが出てきたら、Characterから継承するって感じの使い方かな。
EntityやRender、Collisionなんてのは明らかに
Characterが所有しちょるものなのでメンバでいいと思う。
Characterより上の方のクラスに入れるかもしれないものもあるね。描画とか。
まあ、クラスのまとめ方が、複数のクラスの処理を一括してやろうと頑張りすぎてて、
かつ、これから継承するものの違いまでカバーしようとしている感じがする。正直うまくない。
まあ、処理で考えるなら、
衝突の検出なんてのは関わるもの同士によって必要な情報が全然違うから
一括処理なんて必要ないならしないほうがいいと思うよ。(仕様変更あると思うしw)
逆に描画なんてのはどれも同じ処理になるはずじゃね?
Characterもしくはその基底クラスがRenderなんて関数をもってればそれでいいような気がする。
AIクラスなんていったら、結構隔離できるクラスのような気がするが
実は他のクラスとの関連が一番多くなるクラス、また、他のクラスとの関連も一番特殊になるクラスだと思う。
何せAIの判断材料に他のクラスの情報が確実に必要になるからね。
AIってのはCharacterそのものになると思うんだけどどうだろうか?
例えばCharacterから範囲10以上に近づいたら、なんてやったらAIにCollisionのデータを使った衝突の検出が必要になるよね?
こういう処理自体をライブラリにするのはいいと思うけど、それに必要になる材料はもろにクラス同士の設計の関連になるわけで略w
0130124
04/04/29 13:08ID:tELycjcoCCollisionNodeをメンバにするのは考えましたが、
CRenderNodeをメンバにしてしまうと自身で描画コードを持てないので
描画情報を登録して後で一括描画してもらうって形ですよね。
この場合ちょっと複雑な事をやりたい場合にCRenderNodeに手を加えるハメになりそうですがどうでしょうか?
2Dなら描画形態は限られてくるのでメンバに持ってしまうかもしれませんが。
0131124
04/04/29 13:09ID:tELycjco〜Node系は特定の機能を保有する事を保証するインターフェイスのような物なので今のところ名前の衝突はないですが、
拡張した場合に仰るとおりのぐちゃぐちゃなメソッドの群れになる可能性は大いにありますね。
0132124
04/04/29 13:09ID:tELycjco生成は各entityが任意にnewしてEntity管理クラスに突っ込み、
entityMgr.Add(new CEnemy); // class CEnemy : public CCharacter
各entityが初期化時に必要に応じて描画管理クラスやコリジョン管理クラスに自身を登録してます。
renderer.Add(this);
collisionMgr.Add(this);
各管理クラスが全登録インスタンスの仮想関数 Update(), Render(), Collide() を呼び出しており、
entity間のやりとりはentityMgr経由でメッセージを送受信して行ってます。
破棄は自分自身でentity管理クラスに破棄要求を出してentity管理クラスがインスタンスをdeleteします。
entityMgr.Remove(this);
なんだか鬱設計ですね。
0133124
04/04/29 13:09ID:tELycjco>>ちょっと>>124は機能とオブジェクトをいっしょにしてるのがよくなさげ。
>>EntityやRender、Collisionなんてのは明らかに
>>Characterが所有しちょるものなのでメンバでいいと思う
コリジョンや描画をメンバにするのはある程度納得出来るのですが、
自身の行動をメンバに委譲するってのはちょっとイメージが沸きません。
状態のみを委譲してそれを受けて自身の行動に変化をつけるのでしょうか?
たぶん違うぽ(つд`)
ゲーム内に登場するオブジェクトの殆どはCCharacter派生クラスだと思うんです。
確かに画面には表示されないステージ管理クラスや当たり判定を行わないスコア表示部分などはありますが、
それらは本当に限られてくるんじゃないでしょうか。
共通のインターフェイスやリソースを含んだCCharacterを定義して全てのキャラクタをそこから派生させた方が、
より汎用性があるかなーと思った訳です。
0134名前は開発中のものです。
04/04/29 15:51ID:r5N/wC7K管理クラスって作った奴が思うほど役に立たないことが多いから
もうちょっと設計考えて見た方がよくね?
>>133
>自身の行動をメンバに委譲するってのはちょっとイメージが沸きません。
どう組んでるのか詳細までは知らないけど、
結局、プロペラ付けたら空を飛んで欲しくて、車輪付けたら道を走ってほしいんでしょ?
ならそういう使い方でいいじゃない?
>共通のインターフェイスやリソースを含んだCCharacterを定義して全てのキャラクタをそこから派生させた方が、
>より汎用性があるかなーと思った訳です。
それはいいんだけど、継承を継承らしく使おうよって話なんだけど。
別にこう↓組んでも組めるっちゃあ組めると思うよ。
class CCharacter : public CEntity, public CRenderNode, public CCollisionNode {};
ただわかりづれぇって一点を除けばw
0135名前は開発中のものです。
04/04/29 18:18ID:0gA9laquとりあえずそのノリなら漏れはついていけるから安心していいよ
邪道かどうかは別として、管理される側が自分を管理する側を知っているっていう
状態は改良できるとこだと思う
0136名前は開発中のものです。
04/04/29 18:20ID:K2EIDtC00137名前は開発中のものです。
04/04/29 20:30ID:klVfh8nk~~~~~~~~
問題は何もない。続けて良い。
0138名前は開発中のものです。
04/04/29 21:45ID:0gA9laquなんでentity間のやりとりの一種として扱わないの?
0139名前は開発中のものです。
04/04/30 02:06ID:zWQ1T1ukスマン。やはり、CRenderNodeがどういったものか、理解せずに
答えたので、見当違いだったかも。
CRenderNodeは描画機能?をもっていて、描画する対象のインスタンスではない。
て事かな?
因みに俺はインスタンスを含むと思っていたので、あくまでも、メンバ(参照用のポインタ)という扱い。
(キャラと描画物が1対1ではないという事)
とあるミドルウェアでは、大概のクラスが、シーングラフノードの派生。という構造もあったし、
そういうのも面白いとは思うよ。
0140名前は開発中のものです。
04/04/30 02:41ID:TdoOcGaP0141124
04/04/30 04:19ID:r3mzBY0g>>管理クラスって作った奴が思うほど役に立たないことが多いから
全AI更新→全衝突判定→全描画
こんな感じにUpdate()やRender()ってのは一括して呼ばれるのが普通だと私は思ってます。
誰かが管理して順番に呼び出した方がスッキリしているような気がしますがどうでしょうか?
管理クラスがない場合って生成されたEntityのUpdate()はどうやって呼ばれるのだろう。
各Entityを木構造のノードにして子or兄弟のUpdate()を連鎖的に呼び出すのか、
それともリストをグローバルで持ってメインループか何処かで呼び出す?
誰かに管理させた方が不用意にノードにアクセスされないだろうしこれが普通かなーと
思ってたんですが一般的ではないんですかね。
>>結局、プロペラ付けたら空を飛んで欲しくて、車輪付けたら道を走ってほしいんでしょ?
この部分の話の流れとしてはCEntityから派生せずに
メンバとしてCEntityを持ったほうがいいよって解釈でよろしいでしょうか?
実際に移動を行う処理やアニメーションを行う処理なんかはAIと分離すべきだと思うのですが、
AIの部分をメンバに委譲して且つ自分ではUpdate()を持たないとなると
自分自身は何も行動を起こせないただの入れ物になりますよね?
うーん。
>>それはいいんだけど、継承を継承らしく使おうよって話なんだけど。
それが引っかかってたので質問した訳です。そしたらその他の部分でボロが出まくる出まくる(;´Д`)
CRenderNodeやCCollisionNodeをメンバに持つってのはいいんですが
CEntityをメンバに持つメリットというか意味が理解できないのです。
0142124
04/04/30 04:33ID:r3mzBY0g>>邪道かどうかは別として、管理される側が自分を管理する側を知っているっていう
>>状態は改良できるとこだと思う
でもリスト構造とかってそういう物ではないんですか?
ああ、ノード自身が管理クラスに登録するってのがマズイ訳ですね。
その点CEntity以外をメンバとして持った場合は
renderer.Add(this);
はアリですよね。
0143124
04/04/30 04:35ID:r3mzBY0g>>邪道かどうかは別として、衝突判定が特別扱いされているのが気になる
自分の中では一括処理ってのが根底にあったので特別扱いになってます。
全ゲームオブジェクトの行動が終わってから衝突判定を一括で行うのでどうしても
管理クラスに自分を登録して後で判定を実行する必要があったんです。
Update()の中で衝突処理も行うとすればAI処理の一部として実装できますし、
自由度は増すと思いますがこれはゲームの規模や構造にもよりますよね。
0144124
04/04/30 04:38ID:r3mzBY0gすみません、説明不足だったようですね。描画対象ではないです。
CRenderNodeはインターフェイスです。基本的にvirtual void Render() = 0;が定義してあるだけで、
レンダラがこれを任意のタイミングで呼び出します。
派生クラスはRender()を実装して1つもしくは複数のモデルをデバイスに対して描画してます。
0145名前は開発中のものです。
04/04/30 05:47ID:iUVDJkHq>管理クラスがない場合って生成されたEntityのUpdate()はどうやって呼ばれるのだろう。
>各Entityを木構造のノードにして子or兄弟のUpdate()を連鎖的に呼び出すのか、
ん?処理の順番って基本的にこうやらないとまずくないか?
だって、親子関係では親から処理を実行していくようにしないと矛盾がおきないか?
子がワールド座標を欲しがるとき、親がすでに正しい位置に動いてくれていないと
子のワールド座標はバグるはずだけどどうよ?
>CEntityをメンバに持つメリットというか意味が理解できないのです。
俺はEntityクラスはキャラクタの行動を制御するものだと思ってたんだけど
実はただのAIクラスなの?
0146135
04/04/30 12:37ID:LSXN/0+O管理される側が管理者のインスタンスを握っていて、
自分の登録と削除だけしかさせてもらえないならいいけど、
そうなってはいないでしょう?管理者を管理するクラスのために用意してある
メソッドにも自由にアクセスできるようになってしまっているはず。
インスタンスが無駄にグローバルになってるとか、
privateになっているべきメンバがpublicだったりするような程度でマズイです。
ヘッダのインクルードもクロスしてるでしょう。
そういうのはできるだけなくしていったほうがいいと思うよ。
>>143
シューティングゲームをつくってるのかな?
この衝突判定は「何に」当ったたのかみたいなことは分からなくてもいいの?
引数で衝突相手をもらうとしても、 Collide(const CollisionNode&) にならざるをえないし
これでは大抵は困ると思うけども
0147124
04/04/30 19:52ID:r3mzBY0g管理クラス内にリストを持って実行順位毎に実行させるのと(現状はこれ)、
木構造にしてルートのUpdate()を呼んでやるのってのは実質的に同じだけど
木構造の方が何かと便利だよって事でしょうか。
何にせよルートノードは全ての子から見えるわけですよね?
インスタンスを晒さずに特別なアクセス関数を作るにしても
結局管理クラスと同じような存在になっていまうと思うんですがどうでしょうか?
>>実はただのAIクラスなの?
Entityは毎フレームUpdate()が呼ばれ続けるただのAIクラスって認識なので
EnemyはCEntityから派生させている訳です。
状態遷移や座標の更新、子entityの生成などをUpdate()内で行ってます。
0148124
04/04/30 19:59ID:r3mzBY0g管理される側がインスタンスを握っているってイメージでは無いんですが、
管理クラスはシングルトンになっててほぼ全てのゲームクラスから見えてます。
単にリストのノードってのであればノードがリストのインスタンスを
知っている必要はまったく無いですが、
個が主体となるEntityでは知らないと何も出来ないですよね?
隠蔽さえ出来ればいいのであれば管理者のインスタンスを隠蔽して登録、削除は専用の
グローバルな関数経由で行うってのでも現状よりはマシなのでしょうか。
はい、シューティングです。
現状ではまさに Collide(const CollisionNode&) これですね。
CollisionNodeに相手のポインタを仕込ませているので
そのポインタ経由で相手の情報を得てますがやっぱりマズイでしょうか?
0149名前は開発中のものです。
04/04/30 22:20ID:iUVDJkHq>管理クラス内にリストを持って実行順位毎に実行させるのと
この管理クラスって結局Updateを毎回読んでやるただそれだけのクラスなんだよね。
はっきりいっていらないんじゃないかなぁ。ってこと。
正直、完全自己完結処理な物体ぐらいしか恩恵が全くといっていいほどないじゃん。
一度管理クラスを捨てて1から考え直してみたらどうかな?
>Entityは毎フレームUpdate()が呼ばれ続けるただのAIクラスって認識なので
Entityクラスを継承してCharacterクラスができてるのはなんか
オブジェクト指向的にわかりにくくないか?(C++の機能としてできるって意味とは別にして)
基本に戻って犬と猫は哺乳類でってところから考えると、
キャラクタはAI(脳みそ)でってなってちょっと変だ。
キャラクタは脳みそをもっていてって考えた方が綺麗に組めるんじゃないかな?
>>148
>管理クラスはシングルトンになっててほぼ全てのゲームクラスから見えてます。
こりゃグローバル変数と何も変わらないよ。
これが駄目だとわからないとなると、ちょっと修行が必要。
ちょっと面倒だけど、引数から渡すように改善できないかな?
0150名前は開発中のものです。
04/04/30 23:35ID:h3JIWfFc例えば、引数を渡した関数から、他の関数を呼ぶときは同様に引数を渡さねばならない。
その関数から他の関数を呼ぶときも(以下略)
リファクタリングする度に、引数付き関数が増えていく。
さらに、引数がいらない関数から、引数がいる関数を呼ぶ必要がある時は、
呼び出し元を辿って全てを引数付き関数に変更せねばならない羽目に。
結局気づいてみると、ほとんどの関数が引数つきに。
一本の大きな関数で書ききるなら行けるが、
そうでない場合は、地獄を見ることに……
実際、引数わたしで上手く行っている人の話が聞きたい。
0151名前は開発中のものです。
04/04/30 23:46ID:FlQn5mKE>例えば、引数を渡した関数から、他の関数を呼ぶときは同様に引数を渡さねばならない。
>その関数から他の関数を呼ぶときも(以下略)
>リファクタリングする度に、引数付き関数が増えていく。
漏れもハマったことあるな(w
0152名前は開発中のものです。
04/05/01 00:08ID:AwZfI0KO何でもかんでもメッセージパッシングでやればパフォーマンス落ちるのと同じで。
膨大な数のインスタンスを高速処理せねばならないエンジン部に近いなら
美しさに伴う冗長性を嫌って汚いハックに走らざるを得ないし。
0153名前は開発中のものです。
04/05/01 00:11ID:AwZfI0KO0154名前は開発中のものです。
04/05/01 00:20ID:Jz0Md+j7構造体で渡していくらか防げるかも。
でも、俺は引数増えても気にしないほうだなぁ。
DirectXがああだからしょうがないって言えばそうなんじゃない?
0155名前は開発中のものです。
04/05/01 04:02ID:HtCFg7B3綺麗か汚いかじゃなくて、何を言いたいのかを考えてインターフェイスの仕様は決めるべき。
まして2chの名無しがうるさく言っていたからなんて理由では(ry
その参照の元が、そのインスタンスの一生のうちに変わる可能性があるということを示唆
するために、毎回参照を渡すようにしなさい。
その参照の元が、そのインスタンスの一生のうちに変わる可能性がないということを示唆
するために、コンストラクタで受け取り自分のメンバに格納しておくようにしなさい。
どちらが美しいとかどちらが汚いとかではない。
0156名前は開発中のものです。
04/05/01 04:56ID:HtCFg7B3>個が主体となるEntityでは知らないと何も出来ないですよね?
管理者のインスタンスで何をしたい?他entityの検索とかかな。
>現状よりはマシなのでしょうか
インスタンスを生成した人がその人の好きな場所に登録できるのがいちばんよいよ。本当はね。
>CollisionNodeに相手のポインタ
どういうクラスへのポインタ?
0157124
04/05/01 06:39ID:bkNOTeqKそうですね。実際にコード化してみて比較しながら考えてみます。
>>キャラクタは脳みそをもっていてって考えた方が綺麗に組めるんじゃないかな?
理想はそうかもしれませんが実際キャラクタが自分の手足に命令を出したほうが
コード的に自然な作りになりませんか?
頭脳をメンバとして持った場合、親(キャラクタクラス)経由で手足クラスに命令を出す
となると複雑になりませんかね。
>こりゃグローバル変数と何も変わらないよ。
変わらないですね。
生成&破棄が頻繁に行われるオブジェクトや状態が変化するものに関しては隠蔽すべき
だと思うんですがシステムで唯一無二の存在であろう管理クラスくらいはグローバルでも
いいと思うんですがどうでしょうか?
管理クラス的なものはそんなにポコポコ作らないでしょうし。
0159139
04/05/01 06:50ID:9Tu48i71ああ、そんな気はしてたが、
virtual void Render() = 0;が定義してあるだけ。か。
俺ならCGameObjectてなクラス作って、メゾットにしちゃうか。
Update()も同様に。
CRenderNodeという名前は、紛らわしいね。tree構造を連想させられる。
管理クラスは、俺も用意してる。
シングルトンで、ファクトリパターンクラスの派生。
作ってるものも同じ。シューティング。
AIは用意してないけど、その辺りを用意すれば、アクションゲームもOK。
ただ、AIをハードコーディングしようとは思わないが。
ありものを作るなら、大抵、コリジョン判定、条件判定の組み合わせが違うだけだから。
0160124
04/05/01 06:58ID:bkNOTeqK>>管理者のインスタンスで何をしたい?他entityの検索とかかな。
そうですね。
Entity間のやり取りでも管理者をかませた方が不正アクセスをチェック出来たり
デバッグ用のアクセスログ吐かせたり延滞メッセージ的な通知とかも出来そうだし。
仲介役が居ることのメリットはあるんじゃないかと思います。
>>どういうクラスへのポインタ?
ここで言うところのCCharacterですかね。
この部分は正直変な事になってると思います・・・。
0161124
04/05/01 07:22ID:bkNOTeqKCGameObjectを管理するクラスがあってそのクラスがレンダラを持ってるんでしょうか?
例えば管理クラスが全ゲームオブジェクトのUpdate()を呼んでからレンダラの参照なんかを
Render()に渡してあげるとか。
AIはハードコーディングしてしまうかも。
部分的に再利用可能な形にする事もできるしちょっとした色付けは外部ファイルから
入力してあげれそれで十分かなーと。
0162139
04/05/01 07:48ID:9Tu48i71実際、今作ってるものには、CGameObjectというクラスはないんだけど、、。
CGameObjectもしくは、CGameObjectManagerが、必要なタイミングで
(生成時、初期化時、視界内に入ってきたとき等々)
に、描画エンジンのmanagerを使って、描画オブジェクトを生成。と。
で、擬似コード
app::Update(frame)
{
描画manager->Update( frame );
GameObjectManager->Update( frame );
}
と。
描画機能と、ゲーム(CPU)的な機能は分離してます。
0163139
04/05/01 07:53ID:9Tu48i71要するに、CGameObjectは、レンダラ機能はもたず、
レンダラがもつ描画ノードの参照を持ってるだけ。
update()時も、描画用のセットアップをしているだけ。
0164名前は開発中のものです。
04/05/01 08:16ID:Jz0Md+j7>頭脳をメンバとして持った場合、親(キャラクタクラス)経由で手足クラスに命令を出す
>となると複雑になりませんかね。
どうして?変わらないと思うけど。
手足クラスが何やるか知らないけど、頭脳と手足が認識できる構造なら
どういう処理にしろクラスにしちゃった方がわかりやすいじゃん。
>システムで唯一無二の存在であろう管理クラスくらいはグローバルでも
>いいと思うんですがどうでしょうか?
駄目だよ。グローバル変数が駄目な理由も理解してないな。
システムで唯一無二のものを直接コードに入れちゃうってことは
そのクラスはそこでもう身動きがとれなくなっちゃうってことだよ。
どこでもどんなタイミングでもアクセスできちゃうし、
一番怖いバグが出るパターンだよ。
0165名前は開発中のものです。
04/05/01 10:28ID:W4jVRbBSなりませんでした
概念だけは美しいが、コードは美しくなく汚くなっただけ
なんだかC言語で、OOやったときのような気分
0166名前は開発中のものです。
04/05/01 11:23ID:Jz0Md+j7なんでそう見た目だけにかき回されるのか激しく疑問。
いくらコードが美しくたって概念が糞なら糞。
>>155のいう通りだろ。
0167名前は開発中のものです。
04/05/01 11:31ID:W4jVRbBS>>150みたになるのを防ぐ方法が挙げられなければ、
スパゲッティなコードになることを回避できない。
0168名前は開発中のものです。
04/05/01 11:33ID:W4jVRbBSわかりにくいな
むしろ、実装してみると、概念にかき回される、と言いたい
0169名前は開発中のものです。
04/05/01 11:42ID:Jz0Md+j7じゃあ構造体でわたせば?(これで解決するよね?)
0170名前は開発中のものです。
04/05/01 11:53ID:HtCFg7B3>仲介役が居ることのメリットはあるんじゃないかと
なにもできないわけじゃないなら、管理される側からは管理している側が見えないように
しておいたほうがよい。管理する側の何かを変更をしたい時に、
管理される側にはその変更によって何も影響がないということを確信をもって取り組むことができる。
そのメリットの方が仲介役と管理者がいっしょにいることより大きいと思うよ。
もしも仲介役が必要ということなら仲介役クラス、というかインターフェイスをつくって
entity生成時に持たせてあげるようにしたらいい。
>>164
>グローバル変数が駄目な理由も理解してないな。
グローバル変数は、そのクラスが変更されたとき、膨大なコードの全体に対して
影響が及んだかどうかチェックして問題がないことを確信がもてる精神力が
あるのなら使える。ぼくは精神力に自信がないのでシングルdをさらすことはせず
必要とされる単純な処理だけをstaticメソッドとして公開してるyo
0171名前は開発中のものです。
04/05/01 12:28ID:HtCFg7B3そのクラスのそれ以外のメソッドがリソースやコンテクストなしでも動けるなら、そのほうが。
んでクラスの全部のメソッドがそのリソースやコンテクストなしでは動けないということが判明したら
コンストラクタでもらうようにしては。
0172139
04/05/01 12:31ID:9Tu48i71俺の場合、「やばい!」と感じたらw
とりあえず、クラスにして渡す。
作業してて「これやばいな」と感じたら、そのまま突き進まず、
別の回避策を考える事にしてる。絶対可笑しな部分があるから。
0173152
04/05/01 13:27ID:AwZfI0KOというか155は抽象的極論なので一体何が言うとおりなのか理解不能です。
この際言葉遊びは捨てて(というか面倒くさいので)美しさ=概念的合理性と
解釈てしまいますが・・・・確認なんですが
こういうものを追求することは当然なのでありますが、これらが常に計算機側の
特性とマッチするわけでない、ということはお互いの共通理解として宜しいですよね。
ゲームの場合、わりと頻繁に この部分が絡むので論争に発展するのだと思います。
現実(ハード特性)との不整合を冷酷に示すパフォーマンスアナライザを恨めという
以外ありません。
0174152
04/05/01 13:35ID:AwZfI0KO純粋に設計上の不備の部分の話なのかなぁ、とも思うので
173の内容は無粋だな。却下。
0175名前は開発中のものです。
04/05/01 13:44ID:Y5IhbaZz0177名前は開発中のものです。
04/05/01 14:04ID:4cYeRpR0ゲームにもよるが、ノードの数が物凄く多くなればキャッシュヒット
やら何やらの問題がボロボロと表出することがあるので、途中で
精度犠牲にして走査回数抑制する方向でロジックを修正することあるし。
最悪、内部データ構造から洗いなおすハメになることもあるし。
0178名前は開発中のものです。
04/05/01 14:15ID:T8UuVfk+手荷物にするか置き勉にするか、状況によっては相当違ってくるよね。
0179名前は開発中のものです。
04/05/01 14:29ID:Jz0Md+j7>美しさ=概念的合理性
え?じゃあ、なんで俺にレスつけんの?
俺は
>>165の
>概念だけは美しいが、コードは美しくなく汚くなっただけ
っていう言葉に対してレスつけたんだけど。
引数で渡すことに関しては賛成ってことでいいんでしょ?
0180173
04/05/01 14:50ID:AwZfI0KO抽象モデルが糞なら(結果としてそれは)糞という発想は極端だなぁ
という、やや無粋な話。
抽象モデルとして説得力のある・人の直感的に分かりやすい代物であっても
それが常にハードウェア特性との親和性を伴うわけではないならば
何が糞で何が糞でないのか、は一概には決め付けられないだろう、という話。
これは詭弁ガイドラインに抵触している気がするので、>>174で取り下げた。
0181名前は開発中のものです。
04/05/02 00:05ID:GnjcB1ex1.2DのアクションRPGをつくっています
2.プレイできる範囲全体を100*100セルとして定義、後ろ(どっか)にもってます
3.プレイヤーの見える範囲を10*10として定義、現在の座標位置より、2.でもってる内容から上下左右に1セル分多く取得してきます。
4.3.で1セル分多く取得してきているぶんをつかってプレイヤーが移動したときに、すこしずつずらしていきます
5.実際の画面への表示は、3.の内容にマスクして、10セル分だけ表示し、スクロールにみせかけています
最初は2Dのスクロール処理のみを考えていたんで、この方法で、スクロール処理ができるようになってよかったんです。
が、他のプレイヤーや、キャラを追加して、そいつらの動きが入ると意味不明になってしまいました。
たとえば、プレイヤーが(x,y)=(10,10)の座標にいて、他のプレイヤーが(x,y)=(12,12)の座標にいて、
プレイヤーが(x,y)=(10,11)に移動、他のプレイヤーが(x,y)=(12,11)に移動すると
先の上で説明したような状況になったときに、どう他のプレイヤーを描画したらいいのか悩んでます
考えているつもりですが、意味不明になって悩んでしまいます
全体的な処理としては、メインのループがあって、そこで、くるくるまわして描画処理をしています。
キーボードのイベントや、マウスイベントや、ネットワークからのイベントは、別のスレッドでキューにいれて、
上のメインを回しているスレッドから読んで描画に関する処理に影響させています。
長くなってしまった上に、意味不明なことを書いているようなきがするんですが、
よかったら知恵を貸してください。
0182名前は開発中のものです。
04/05/02 07:16ID:ewEdZS/bそれが気に入らないから俺しばらく常駐してみてるんだが。
0183名前は開発中のものです。
04/05/02 11:23ID:8zjGYCSW>そいつらの動きが入ると意味不明になってしまいました。
どう上手くいかないのかわからないんだが、
とりあえず、スクロール処理の部分って
プレイヤーの現在位置から見える範囲を決めてるわけだから
他のプレイヤーってこの処理に関係ないんじゃないの?
>>182
>>182の内容が貶し系なわけだがw
0184名前は開発中のものです。
04/05/02 14:39ID:YvKUw6Rv文章が長い割に、必要な情報が欠落している。
他のプレイヤーやキャラとはなんなのか、説明をちゃんとしろ。
0185181
04/05/02 15:03ID:GnjcB1ex>>184
もうちょっとまとめてみました
プレイヤーと動かない対象(床と動いてないキャラなど)
にかんするスクロールは問題ないです
自分がスクロールしている最中に、
画面内に動く対象がいると、スクロールがうまくいかず、
飛んだみたいに見えるわけです
自分が(10,10)→(10,11)に移動し、
動く対象が(12,12)→(12,11)に移動したら、
2セルぐらい飛んだように見えるんです
また、自分が止まっている時に
画面内に動く対象がいても問題なく動いています
結果:
自分がスクロールしているときに
画面内の動く対象の描画位置を計算するルーチンがおかしい、
または、そんなルーチンが動いていないから、
飛んだように見える
あぁ、なんか解決したような兆しが見える・・・
0186名前は開発中の者です。
04/05/02 16:53ID:VrUs0Xi6倍の速度で離れていくのは、普通のことなのではないでしょうか。
ドラクエやイースもそうなってるはずですよ。
(あまり関係有りませんが)
セルという言葉を使ってるようですが、RPGツクールでいうところの
「チップ」のことでしょうか。小さい四角のことをセルというのは
PCエンジンぽいですね。でべろかなんかいじっていた人なのでしょうか。
0187名前は開発中のものです。
04/05/02 17:07ID:BsWZXbD2「飛んだように見える」と言われても
0188練習帳著者
04/05/02 17:21ID:Bla7cnMsスクロール時のキャラクタ描画を「現在のスクロール量(ずらして
描画しているピクセル数)を減じた座標」に対して行うようにすれ
ばよいのでは? わかりにくければ、方眼紙に表示領域とスクロー
ル領域を描いてみて、1ピクセルずつスクロールさせるとどうなるか、
なぞってみてください。
0189181
04/05/02 17:30ID:GnjcB1exおっしゃるとおりですね。
倍速ではなれていくことを表現したいと思っています。
現状ではキャラがスクロールするというより、
飛んでるというかんじで、なんでかデバッグ中です
セルという言葉は、距離を表現するつもりでつかっています。
プログラム中では1セル中にはりつけるタイルを
チップという名前をつけています
ゲームプログラムは今回が初めてで、
詳しいこともわからず独善的に作っています
だから言葉も適当です
適切でなければ、以後、脳内で置換します
0190181
04/05/02 17:35ID:GnjcB1exそうですよね・・・。
適切な表現ができていないですよね。
>>188
すばらしいアイデアですね。
早速方眼紙にかいて試してみました。
なんか、自分のルーチンの間違いが見えてきた気がします。
サンクスです。
こーやって書いて実際に試してみるのがとても大切ですね
0191181
04/05/02 17:55ID:GnjcB1exスクロール処理に問題があり、
>>188さんのアイデアで解決しました。
ありがとうございました。
次は、デバッグ中にわかった問題を解決していこうと思います。
自分が(10,10)にいて、動く対象が(12,12)にいて、一旦描画したとします。
その後、次の描画処理までに動く対象が(12,11)、(12,10)と移動した場合、
2セル動いているので、スクロール処理が想定している
ルーチン中で判断できず、飛んだようにみえていました。
自分の処理の中では必ず1セルしか動かないようになっていました。
これは現在作成しているプログラムで、ステップ実行などをしている際に、
動く対象が1セルずつ移動しているが、
実は2回移動して2セル動いてしまっている際に起こっているようです。
今はステップ実行などを行わない限り、こういった状況にはならないわけですが、
いずれさまざまな問題で発生する可能性があります。
で、解決案として以下を考えています。
@放置、トンでもいいじゃないか
A軌跡を事後に計算して描画処理をさせる
@でいこうと思っていますが、みなさんならどうされますか?
0192名前は開発中のものです。
04/05/02 18:01ID:tlpacHil0193181
04/05/02 18:07ID:GnjcB1exいいアイデアですね
0194名前は開発中のものです。
04/05/02 23:24ID:imw4lXsM処理構造に問題があるんじゃないの?
移動は、そのセルとやらが何ピクセルの大きさか知らないが段階を踏んでるんだろうね?
つまり、32ピクセル x 32ピクセルの大きさなら
移動は、瞬間移動?
それとも8ピクセル程度づつスライドして滑らかに描画してる?
背景のスクロールもしかり、セル単位で瞬間移動描画してる?
というか、スクリーン描画座標と
背景セル上での座標がつじつま合ってれば、そんな問題は出ないでしょ?
どっかに構造的、発想的な問題があるんでしょ。
0195181
04/05/02 23:43ID:GnjcB1exスクロールは、1回の移動あたりが1セル(16ピクセル)
1セルあたりの移動時間を500m秒
描画時に16ピクセル*(現在時間−移動開始時間)/1セルあたりの移動時間
としてスクロール表現のためのマージンを計算してずらす値にしています
>>どっかに構造的、発想的な問題があるんでしょ。
ありました。
自分がスクロールしている最中に、動く対象が動いた場合、
座標計算が元の位置のまま計算していたので、おかしかったです。
この問題は>>188さんのアイデアで解決しました。
0196名前は開発中のものです。
04/05/03 00:42ID:3nJi6lN4処理は人によって自由だけど、
普通は自分(主人公キャラでしょ?)は、MAP上を移動していて
スクロールは別処理でしょ。
つまり、スクロールがどうなってようと
キャラ(主人公だろうが、違う移動キャラだろうが)はMAP上を移動するって処理で問題でないと思うけど?
移動したMAPのセルの更にそのスクリーン座標でキャラ管理でもしてるの?
キャラのMAP上の座標(セル) ->(スクロールしてようが)-> その描画スクリーン座標って処理をかませれば?
0197名前は開発中のものです。
04/05/03 02:17ID:/mbgxFmW基礎から完成まで詳しく解説してたサイトがあったんですけどお気に入りを謝って消してしまって見つかりません
そこのサイトの手順にしたがって学習していくと初心者にもとてもわかりやすくかったのに…
ソースファイルをコモンファイルとかに分割する方法まで詳しく解説してくれてたサイトで
CとC++とdirectxの基礎をまなびながらシューティングゲームを作るサイトでした
gooで色々検索しましたがなにしろヒット数が多くて探しきれなかったです
もしこのようなサイトをご存知でしたらご一報お願いします
0198名前は開発中のものです。
04/05/03 02:30ID:1qvBqI8L0199名前は開発中のものです。
04/05/03 07:03ID:pFjTwflE1とか2があればそれほど必要ではないですか?
0200名前は開発中のものです。
04/05/03 07:52ID:Egjl2fAkまじでお願いします
0201名前は開発中のものです。
04/05/03 07:59ID:knX8BTK6そのサイトに書いてあった言葉思い出してgoogleに突っ込んで
検索かけてみるしかないでしょ?
それより、気にするべきは再発防止だね。
お気に入りを消してしまったから、わからなくなりましたなんて
2度もやったら恥ずかしすぎて俺なら死にたくなるね。
人に知られたら、もう、2度と社会に出れないね。
永遠の負け組確定。
お気に入りの保存の仕方は覚えた?
0202名前は開発中のものです。
04/05/03 08:12ID:hQjA8AGn俺は注文したよ。まだ届いてないから何とも胃炎が。
原書のほうは(邦訳版よりは)安いんだし。買っとけ。
0203名前は開発中のものです。
04/05/03 15:40ID:BkQwHd8zアドヴァイスありがとうございました
お陰で見つかりました
ちなみに探してたのは
http://rina.jpn.ph/~rance/index.html
このサイトです
0204名前は開発中のものです。
04/05/03 16:03ID:rLHaxHTb探したところネットワークゲームを作るための書籍が少ないように感じましたので
書き込みました。ちなみにDirectPlayを使おうと思っています。
やはりTCP/IPとかのゲーム以外でのネットワークプログラミングという形で探したほうがいいのでしょうか。
アドバイスお願いします。
0205名前は開発中のものです。
04/05/03 19:38ID:nurq1E+4まともなサンプルは見たこと無いが
0206名前は開発中のものです。
04/05/03 19:43ID:Omwokgo9そもそも、根本的に位置の管理方法が間違っていると思う。
プレイヤーやその他の移動するキャラクターの位置は、
背景スクロールにかかわらず、背景全体が収まる座標で持てば良い。
もちろん背景は、動かないとして計算する。
そして、実際の画面に出す時に、プレイヤーや他のキャラクターの位置を
画面内の表示位置に変換する計算式、表示する背景の領域を求める計算式、
を用意して、それぞれの表示位置を決めれば良い。
0207名前は開発中のものです。
04/05/04 03:34ID:VBEMEzQBC++での開発が効率悪くてかなわない。
DirectXを用いたゲーム開発では、
いまだにC++が主流だしやむをえず。
0208名前は開発中のものです。
04/05/04 05:59ID:ErnoVSSx0209名前は開発中のものです。
04/05/04 06:58ID:DaOo4sBxそんなに変わるか?
オブジェクト指向言語だし、たいしてかわんねーよ。
何やって使ってんだよ。
0210名前は開発中のものです。
04/05/04 07:20ID:d02V5Vdq>>209
まぁまぁ
0211名前は開発中のものです。
04/05/04 09:08ID:/pFqq6k/結局ゲームで多用するリスト系とかはこれら中間言語系は得意
ポインタでガシガシやりよりバグでないしね
コンパイル時でエラーだしてくれるのでCより実行時でのチェックが少なくて負担は減る
ぶっちゃけC++はオブジェクト指向風味を取り入れたCでしかないと思われ
俺も深くjavaとかc#に触る前まではあんまり変わらんと思ってたけどね
0212デフォルトの名無しさん
04/05/04 09:49ID:ZcLCAYswベクトルの基本演算くらいサポートしてくれたらなぁ・・・
頂点シェーダレベルのことができるサブプロセッサがCPU側についてくれたらよいのに
0213名前は開発中のものです。
04/05/04 10:05ID:RR4igFmH何もかもアセンブラでもよろしい
怠け癖がつくと最終的には
「寝ッ転がりながら頭に概要を思い浮かべるだけで勝手にソース書き上がるようにしてほしい」
などと言い出しかねない
0214名前は開発中のものです。
04/05/04 13:07ID:UhuIoZ4M人間、ミスする生き物だし。
人的ミスが入らないように自動化出来る部分はすべき。
0215名前は開発中のものです。
04/05/04 14:58ID:fBBUT8Xbメモリ内のデータフロー、ロジックフローを
きちんと把握、利用できることが重要なのであって、
それに関わるコンピューター寄りの知識は
速度を重要視しない限りは必要無いんだよな。
環境に頼って手抜きしようとする人間は、
複雑化したデータフローなんて追えなくなってあぼーんするだけ。
でも環境に依存しようとしない人間は
脳内で可能な限り動きを構築してから実際にコードに落とすんで、
コンピューター寄りの本来の目的と直接関係しない部分は排除した方が都合がいい。
自分でデータを細かいところまで管理する環境を少しでいいから経験しないと、
メモリ上のデータをどう扱ったらいいのか学習しにくい。
学習初期に
「メモリ上のデータはライブラリが管理してくれるから俺はデータ突っ込むだけー」
なんて覚えたら洒落にならん。
確かにデータは突っ込むだけなんだが、
何も考えてないとすぐに商品が整頓されてないコンビニみたいになる。
学習初期に最も重要視すべきは管理能力だ。
結局、若いうちは無駄だと思うことも多少はやっといた方がいいってこった。
管理能力がしっかりしてきたら、最近の超高級言語に触れてもいいと思うな。
その方が開発効率いいもん。
0216名前は開発中のものです。
04/05/04 15:50ID:DaOo4sBxいや、さすがにそんなところは
必要ないって言えばない部分だろ。
アセンブラ組んでた俺でも最近は絶対いらないって確信もって思うぞ。
0217名前は開発中のものです。
04/05/04 16:39ID:xC5TcH9e現在は開発する上では必要ない事でも、知識としては知っておいた方が
良いことって、あるじゃない。
0218215
04/05/04 22:27ID:fBBUT8Xb俺もアセンブラほどの学習は要らないと思うよ。
C/C++ でそこらのアルゴリズム本の内容を自分で実装できる程度で充分。
> 必要ないって言えばない部分だろ。
言えばない部分だな。
0219デフォルトの名無しさん
04/05/04 23:02ID:ZcLCAYswSSE化したら笑っちゃうくらい速くなった
アルゴリズム全く換えてないのにC+FPUで書いたものより
20倍平均速くなった
SSEで内積だすのいちいちマンドクサかったけど
当たり判定が20倍速くなったっつーのはでかいので満足
0220名前は開発中のものです。
04/05/06 06:47ID:lM4J9+bgメーカーで言えばIO Interactiveみたいな
MFCで楽に組めるんだから最適化なんて面倒でしてらんないよーん
みたいな感じで思い浮かべてもらえると分かりやすい
だからっつってN64みたいな職人芸的コーディング必須!
んな環境はノーサンキューだが。
0221名前は開発中のものです。
04/05/06 07:50ID:dsRObUy20222名前は開発中のものです。
04/05/07 14:08ID:57ftLVJvアンチウィルスで金を稼ぐ会社なら、これができるだけでOKだし
Winnyをイジッて暗号化を解いた奴もこれで金を得、
ウィルス作って人に迷惑かけるのにも役立つから、
まことにもって有用な言語だな
食うには困らんが時間は不自由するがね
0223名前は開発中のものです。
04/05/07 15:15ID:2CVAEUtdハァ…
0224名前は開発中のものです。
04/05/07 15:39ID:LKHXe0/42つの長方形同士の衝突判定を行いたいのですが、それぞれが回転しているので
頂点のXY座標の大小で判断すると言う手法が使えません。
法線の内角外角を使うとか、行列を使うとか、3D制御に近い手法が有ったような
気がするのですが、平面限定で高速化する手法はないでしょうか?
0225名前は開発中のものです。
04/05/07 15:49ID:vcA11uZ8高速化したければおおよその判定後、厳密な判定を行えばいいだけの話。
0226名前は開発中のものです。
04/05/07 16:05ID:UAroqB1GAABB、OBBをキーワードにgoogleで検索してみ。
ちなみに「頂点のXY座標の大小で判断すると言う手法」は
一言で言えば2DにおけるAABB同士の衝突判定だーね。
OOB同士の衝突判定の適用対象を絞り込むためにAABBを
使うのも当然可。
0227名前は開発中のものです。
04/05/07 16:05ID:UAroqB1G0228追記
04/05/07 17:55ID:UAroqB1G>正確な判定方法と高速化は別問題。
正確かつ高速であればより良い場合が多いわけだが、別問題とはこれいかに。
>高速化したければおおよその判定後、厳密な判定を行えばいいだけの話。
「だけ」か?高速化手法は何も一つではないんだが。
0229224
04/05/07 20:42ID:fOYveHqsD3Dをいじっていた頃の苦い思い出が〜
とりあえず、行列で頑張ってみます〜、何か突然ひらめくかもしれないし。
Thanksです〜
0230225じゃないけど
04/05/07 21:07ID:AD11pjLw>高速化手法は何も一つではないんだが。
効果があるのは225の方法しか浮かばないんだけど?俺は。
他に2つも3つも方法があったっけ?
0231224
04/05/08 00:28ID:tC9ANaFqどちらかを座標系の基準にしてもう一方を相対角度、相対座標で考えたら
sin、cos、tanだけで片がつくのかな…
0232226
04/05/08 00:51ID:Uo5OKKLoうん。例えば辺と辺の判定をするときに
どちらか一方を基準とする(軸とする)座標系に
投影してやると計算を単純化できるのと同じ要領。
0233226
04/05/08 00:53ID:Uo5OKKLoワリ。ここは嘘。
0234名前は開発中のものです。
04/05/08 01:19ID:aaHhGMRi3Dのコリジョンである方法だったような、、。
自前で組んだ事がないのであれだが、、。
対象のローカル座標系に持っていくとかなんとかだったような。
0235名前は開発中のものです。
04/05/08 01:47ID:Uo5OKKLo高速化手法は「前処理の近傍探索」だけではないだろ。
まぁ、たしかに重要なファクターではあるが、局所分布の
状態によって(ゲームによって)最適な実装は変わるなど、
汎用的究極的単一的解決方法はひとつではない単純ではないため。一言で片付けるのは単純化。
2Dアクションや格闘ゲームならベタな方法幾何計算の最適化
だってあるし、時間軸方向のキャッシュ・諸計算の
SIMDや外部プロセッサによる並列化など、状況に応じて
いろいろある。
0236236
04/05/08 01:50ID:Uo5OKKLo>>230
高速化手法は「前処理の近傍探索」だけではないだろ。
まぁ、たしかに重要なファクターではあるが、局所分布の
状態によって(ゲームによって)最適な実装は変わるなど、
汎用的究極的単一的解決方法があるわけでもない。
一言で片付けるのはやや単純化に過ぎる。
2Dアクションや格闘ゲームならベタな方法幾何計算の最適化
だってあるし、時間軸方向のキャッシュ・諸計算の
SIMDや外部プロセッサによる並列化など、状況に応じて
いろいろある。
0237226
04/05/08 01:56ID:Uo5OKKLo>>230
高速化手法は「前処理の近傍探索」だけではないだろ。
まぁ、たしかに重要なファクターではあるが、局所分布の
状態によって(ゲームによって)最適な実装は変わるなど、
汎用的究極的単一的解決方法があるわけでもない。
一言で片付けるのはやや単純化に過ぎる。
2Dアクションや格闘ゲームならベタな方法があるし
他にも幾何計算の最適化、時間軸方向のキャッシュ
諸計算の SIMDや外部プロセッサによる並列化など
状況に応じていろいろある。
寝る。
0238名前は開発中のものです。
04/05/08 15:27ID:/Hn+kYM5共有の仮想空間にあるオブジェクト(クラスのnewしたもの)を作った場合,
つまり,例えば黒板に図形を書いた場合,
相手も自分もその図形を移動や塗りつぶしたり,拡大とか縮小とか可能にしたいんです.
でも,物理的に不可能なことは出来ないようにしたいんです.
(相手が移動してるのに,自分が削除してるとか)
常識的に考えれば,制御権のようなものを厳密にやり取りして,
特定ユーザに制御を委ねていくしかないと思います.
でも,シリアライズみたいにして,簡単にオブジェクトを転送すると,
サーバで差分を判断して・・・みたいな手法はないのでしょうか?
これって,ネットワークゲームで,例えば,ボスが攻撃されたら,全てのクライアントでの
ボスのパラータが変化するのと似ていると思うのですが,
ネットワークゲームではそのあたりをどのように扱っているのでしょうか?
参考になるような,サイトでも本でも(英語でも)ありましたら,教えてください.宜しくお願いします.
0239名前は開発中のものです。
04/05/08 18:51ID:0//jLLOqC/Sモデルにしてサーバーで管理すればいい。
0240名前は開発中のものです。
04/05/10 00:36ID:g89ZL7xTclass GameObject
{
Camera camera;
Map map;
}
class Map
{
MapField field;
MapObject object;
}
こんな感じのクラス構成になっているんですが、
fieldやobjectの描画にはview frustumが必要なわけです。
そのため、cameraのポインタがgameobject>map>field>tree...
と、殆どのクラスに知られている状態です(汗
しかし引数として毎フレーム渡すのも速度、綺麗さ共に、、、
これを改善する知恵をお貸しください(;´д⊂)
#チョト前に同じような質問があるぽいですが、c++をイマイチ理解していないため
#多重継承を当然とした議論には付いていけない(´Д`;)ヾ
0241名前は開発中のものです。
04/05/10 00:54ID:bzGWAz8g大域変数に「現在描画中のカメラ」というものを設けて、パラメータ取得はアクセサ経由で行えばよいのでは?
そもそも一般的なテクニックとしては、被写体がカメラを知っているという構造よりも、
カメラが被写体を知っているという構造が好まれます。被写体登録時にどのカメラで描画されるかを
(enumなどで指定して)、それ以後、被写体はカメラの詳細については感知しないという実装になります。
意味わかりますか? なんにせよ、もう少し情報が欲しいところですなあ。
0242名前は開発中のものです。
04/05/10 01:24ID:uqinqgft多重継承は使わなくていいと思う。
>そのため、cameraのポインタがgameobject>map>field>tree...
>と、殆どのクラスに知られている状態です(汗
これはこれで正解だと思う。
#>>241のカメラの方が物体を知っているっていう設計でもいいけど。
仮にカメラ、またその関連のものを引数で渡さずに、
グローバルインスタンスとして用意しちゃうと
カメラインスタンスと描画する物体のインスタンスとの関連が
すげーわかりにくくなっちゃうと思うよ。
引数は多くなっちゃうけど
突然どこかで内容を変更された変数に悩む事が無くなるから
こっちの方が俺はいいと思うけどね。
0243名前は開発中のものです。
04/05/10 01:59ID:OddJ+Pqz>多重継承は当然とした議論
そんなことは決してありません。誤解の無いように。
まぁ、私なりに噛み砕いて説明させてもらいますと
ヤバイ。多重継承ヤバイ。まじでヤバイよ、マジヤバイ。
多重継承ヤバイ。
まず乱用。もう乱用なんてもんじゃない。超乱用。
乱用とかっても
「friendクラス20個ぶんくらい?」
とか、もう、そういうレベルじゃない。
何しろ無限。スゲェ!なんか節操とか無いの。クロスリンクとか何?名前重複とかを超越してる。無限だし超乱用。
しかも病み付きになるらしい。ヤバイよ、病み付きだよ<<以下略>>
0244名前は開発中のものです。
04/05/10 02:09ID:AwWht2q3今VC++6.0 と DirectX8.0 でゲームを製作しているのですが
DirectGraphics に支配された領域にswf 形式のファイルを
再生したいのですが。
ttp://www.denpa.org/~go/denpa/200304/atlflash.txt
↑このへんを参考にしていろいろやってみたのですが、
なかなか巧くいかないんです。
また、
ttp://www.macromedia.com/jp/software/flash/open/faq/
↑このへんでは「Macromedia Flash Player Source Code SDK ライセンス」とかの
購入とかについてがありまして
もしかして、ライセンス無しではswf 再生のアプリ等を作成する場合にはなんらかの
著作権問題などが発生するのでしょうか?
これについてなにか知っている方はいませんでしょうか?
質問の内容がひどく抽象的で申し訳ないのですが
知っている方がいましたら宜しくお願いします。
0245名前は開発中のものです。
04/05/10 02:27ID:UtYtnSiL0246244
04/05/10 02:57ID:AwWht2q3ありがとうございまつ。
なんとなくそこでプレイヤーのソースが落とせそうな雰囲気があるような
ないような(汗 ・・・
ライセンスがどうこうの部分が怖いので翻訳ソフト買ってから出直してみます。
情報有難うございました。
0247名前は開発中のものです。
04/05/10 20:43ID:FfmNag7Eレスするようなことがありませんように。
0248名前は開発中のものです。
04/05/11 00:12ID:bxfdcVbA心配ならば、あなたの意見を書いてみてはいかが?
0249名前は開発中のものです。
04/05/11 08:30ID:LGS9vROR俺も聞きたいね。
0250名前は開発中のものです。
04/05/11 15:01ID:v+m1DaIB俺漏れも
>>240
無意味なフレームが始まらないうちにCameraや他のへんな名前がついたクラスを
それぞれ具体的にどういうデータのまとまりとして捉えているのか詳しく説明しておいておくれ
0251名前は開発中のものです。
04/05/11 17:53ID:t+MGq8DmGameObjectはそんなに意味ありません。一番上位の物って言うか、、
Cameraはカメラのpos,dirを持っていてsetするとgluLookAtでそっち向いてくれます。
Mapはそのままマップのクラスです.
MapFieldはハイトマップです。quadtreeによりカリング、簡略化をして自分を描画してくれます。
MapObjectはマップのオブジェクト(メッシュ)の集まりです。(書かけ)
、、、えーと毎フレームポインタ渡します;;
0252名前は開発中のものです。
04/05/11 21:08ID:2A/hZ94Mマトリクススタック使えばいいやん。
0253名前は開発中のものです。
04/05/11 21:49ID:+QOcSIS7命名の仕方は別にいいと思うよ。
俺もこんな感じだけど。
わけがわからないものはGameObjectだけかなw
そんなに意味ありません。って自分でも言ってるしやっぱり意味無いんだよw
0254名前は開発中のものです。
04/05/12 00:45ID:BAYSJTEJ殆どのクラスで知られる必要のあるものが、その通り殆どのクラスからアクセスできる
ようになっていることは何もおかしなことではないと思う。
もしも視錐台を参照することだけが殆どのクラスで必要で、
カメラの位置を変えることは必要ないなら、視錐台を読み取るメソッドだけを
staticにしてやって、カメラの位置を変える限定的なクラスにだけ
Cameraを引数で渡すようにしてもいいんでは?
0255名前は開発中のものです。
04/05/12 02:55ID:zyRW5yegとしてはどういったアルゴリズムなんですか?
0256名前は開発中のものです。
04/05/12 04:08ID:eA7QhGH1どんなゲームでも人間と同じじゃないかな?
基本は、今の状況を見て、次の行動を判断する。
ってところだから。
稀に、インチキ臭いのあるけどw
0257名前は開発中のものです。
04/05/12 06:29ID:KGYWW9wSオーソドックスなところでチェスとか麻雀を参考にしてみては。
資料が見つかりやすい。
読むにあたっては、初歩的な統計学やグラフ理論の知識が
要る場合があるかもしれんが、その辺苦手なら入門本の
一冊でもあれば十分。あとはチクチクやってれば何とかなるから。
0258名前は開発中のものです。
04/05/15 17:09ID:dpJnmqJq1つあたりの絵の使用時間はどのようにすべきなのでしょうか?
アニメーションを作るツールだと単純に時間を用いて
ウェイトをとっていますが、同じ方法なんでしょうか
もしくは、フレーム数を用いるのでしょうか?
0259名前は開発中のものです。
04/05/15 18:27ID:gPBAj94c0260
04/05/16 10:24ID:1hAhUILx1.物体の半径を求めておく
2.まずは半径を使って円同士の接触判定をする
3.円同士であたってれば、ラインごとの判定
四角形同士なら、全ての辺同士の判定をする。
だから、判定回数は最大で16回。
0261名前は開発中のものです。
04/05/16 11:52ID:/kpE25cx0262名前は開発中のものです。
04/05/16 13:37ID:IC4HysZiどっちでも可能。
0263名前は開発中のものです。
04/05/16 21:07ID:Ygi0R2jO四角形の辺ごとの判定の前に
四角形同士の判定を入れると>>261が解決すんのか?
0264名前は開発中のものです。
04/05/16 22:37ID:/6128CQM四角形同士の判定をするために4辺の判定をしてるんだから
4辺の判定をするために四角形の判定が必要だったらいみねぇよ
0265名前は開発中のものです。
04/05/16 22:38ID:/6128CQM263へのレスね
0266名前は開発中のものです。
04/05/17 02:56ID:oiA5Z1My0267名前は開発中のものです。
04/05/17 07:37ID:itFQ+twDそうか、回転してるんだっけ。
じゃあ、>>263は意味がねぇな。すまん。
ううむ、難しいなコレ。
俺なら諦めちゃうな、このやり方。
それか、片方の四角形のローカルに一度もってきて
(四角形のローカルにもってくると、片方の四角形は原点を中心とする〜略w)
そこから、もってきた四角形の辺の始点終点でローカルにある四角形の範囲の計算をしてから〜略
ってなるかな。結構、面倒だね。
0268名前は開発中のものです。
04/05/17 11:51ID:u8OQabWlお願いだから図に書いてくれー
オブジェクトはどんな形だ? 正六面体?
軸はどこだ? オブジェクトの中心か頂点か、面の中心か?
変な妄想してしまって収集がつかない。
0269名前は開発中のものです。
04/05/17 12:18ID:itFQ+twDこんなのいちいち図に書いてたら話が進まないよw
軸や中心なんか話の問題にならないと思うけどな。
0270名前は開発中のものです。
04/05/17 16:23ID:A2tOSBQ0多角形Aの頂点が多角形Bの中にあるかどうか、
多角形Bの頂点が多角形Aの中にあるかどうか調べる。
内外判定は適当に線分を外に引いて、辺と交差する回数でチェキ
0271名前は開発中のものです。
04/05/17 17:05ID:MlZuRqOh要するにOBB同士の衝突検出っつーことで一般的な話だから
OBB collision detection でぐぐれば図とか出るかもかも。
0272名前は開発中のものです。
04/05/17 17:58ID:MlZuRqOh0273260
04/05/17 19:00ID:RxL4Iwuqミスるな。
2D面がそこまで速く移動しなければ問題にならないけど。
あれは、ワイヤーフレームの接触を判定する方法だな。
面が完全に中に入ってるかまで検出するには・・・。
ラインに、表と裏の情報を持たせて、
裏から出した法線が、相手のラインと接触するかを求める方法がある。
0274名前は開発中のものです。
04/05/17 21:17ID:bco6q7UB0275名前は開発中のものです。
04/05/17 22:19ID:FXzbejeQキーボードをジョイパッド代わりにできるツールってないかな?
逆はあるんだけど・・・
0276名前は開発中のものです。
04/05/17 22:54ID:4g1lmZuF0277名前は開発中のものです。
04/05/18 00:15ID:4cLQkCuf0278名前は開発中のものです。
04/05/18 22:57ID:LWDwmFAq0279名前は開発中のものです。
04/05/18 23:24ID:nVXuJDmB0280名前は開発中のものです。
04/05/19 03:16ID:h+b3Kx+zジョイパッドなんて安いんだから素直に買ってきなさい。悪いことは言わないから。
ゲーム作るなら違う種類のを複数持っといて
どれでもちゃんと遊べるか確認しろと言いたいほどだ。
0281名前は開発中のものです。
04/05/19 10:28ID:0nv4ICzh0282名前は開発中のものです。
04/05/19 12:53ID:NEnS95DBご自身のジョイスティックでおた(以下略
0283名前は開発中のものです。
04/05/19 13:21ID:adXQ/H95USBオナホールの方が優先らしいw
0284名前は開発中のものです。
04/05/28 04:45ID:QLfJNzYc自分、パソコンの知識はほとんどありません。
ネットが出来る、2chに書き込めるって程度なもんです。
けど、将来はゲームを開発したい。
で、開発したゲームを家庭用ゲーム機で発売して、
みんなに良い評価をもらえるようなゲームを作りたい、と考えてます。
作ってみたいゲームジャンルは、全てです。
RPGも作ってみたい、アクションも、シミュレーションも、ネットゲームも作ってみたい、と思っています。
企画も作りたいですし、シナリオも書きたい、ドット職人なんてのもいいですね。
とにかくゲームを作りたいんです。
でもまぁ、そんなものは高望み以外のなんでもないことはわかっています。
だから、とりあえずはアクションを作ってみたいと考えています。
これなら、少人数で作ることも可能でしょうし、ゲーム作りの肝も詰まってそうかなぁ、なんて。
そんな俺が学ぶべき知識はどのぐらいあるのでしょうか?
そして、何を学んだらいいのでしょうか?
たぶん、星の数ほどの知識が必要だと思うのですが、とにかくやってみたいのです。
0285名前は開発中のものです。
04/05/28 04:52ID:iKc/Nojxとりあえず大きな書店にいって入門向けの本をひたすら立ち読みしなされ。
そして自分にあいそうなのを購入。
プログラマ目指してるのかプランナ目指してるのかよくわからんが
現状でプロのプログラマ目指すなら、
C言語、C++、VisualC++6.0、DirectX
あたりをキーワードにして本やら情報を集めればいいかと。
0286名前は開発中のものです。
04/05/28 08:54ID:ULLXse8H最低限の勉強でゲームを作れるようになりたいとか考えてるようでは無理では?
技術の進歩はものすごく早く、次から次へと新しいことを覚えなくてはならないからな
勉強嫌いでは務まらないのがプログラマ
0287名前は開発中のものです。
04/05/28 08:56ID:DUKb1jdd漠然とした質問って困る。
0288名前は開発中のものです。
04/05/28 09:58ID:ywAV+H02>284
プロ目指してるわけじゃないなら、難しいことなんて何も無いじゃん。
本屋でDirectXの本を何冊か買ってきなよ。
そしたら何からはじめたらいいか分かる。
0289名前は開発中のものです。
04/05/28 18:38ID:yyEXtvd6学問に王道なし。
ゲーム作りというのは純粋な知的活動であり、相応の知的能力が求められる。
ひたすら本屋や図書館に通い、ひたすらGoogleにキーワードをブチ込み、
ひたすら数学や英語を勉強する。これが入力。
ひたすらプログラムを書き、ひたすら文章を書き、ひたすら絵を描く。これが出力。
興味を持ったこと、疑問に思ったことは、何でも学び、学ぶだけでなくそれを活用しよう。
自分の周りで起こることすべてに関心を持とう。脳に負荷をかけ、それを常態とせよ。
すべてのことに手を出したいのであれば、時間はいくらあっても足りない。
人並みにテレビを見たりゲームを遊んだりする余裕はもはやないと思え。24時間を管理せよ。
2chは1日数回まで。祭への参加禁止。
短くて半年、長くて10年もあれば、何らかの成果は出ているだろう。
実際的なことについては、まず、入門書の類を片っ端から読み漁るべし。
これはどんな分野に挑戦するときでも極めて有効な手段である。
専門書はいきなり読むには難解すぎるし、入門書は平易だがミスリーディングがありすぎる。
しかし、入門書を何冊もあわせて読めば、偏りを打ち消し、
また、説明のわかりにくいところを他で補うことができる。
0290名前は開発中のものです。
04/05/29 18:53ID:1snUEMHr情報溢れすぎ、迷うぐらいかな。
こんな所で聞く必要もなし。
漏れらの頃は、X68000で他人のソース読みまくって、
覚えたもんよ。
0291名前は開発中のものです。
04/05/29 19:47ID:8INIajuj俺の高校時代なんてまさに盲目だった。
0292名前は開発中のものです。
04/05/29 20:45ID:H034p2Oc0293名前は開発中のものです。
04/06/03 02:35ID:sjW+31p8入力履歴とコマンド列群の全マッチをとる方法以外に
効率的な検索方法を教えてください。
0294名前は開発中のものです。
04/06/03 02:37ID:XVtbUixq0295名前は開発中のものです。
04/06/03 07:47ID:+90sbAK/どうせたいした計算量じゃないんだし。
0296名前は開発中のものです。
04/06/10 00:05ID:EVE2hvMP>どうせたいしたゲームじゃないんだしw
酷い人ね!
0297名前は開発中のものです。
04/06/10 01:22ID:5cqiK5gWいまはメモリが沢山あるから、
コマンドの全分岐パターンを、メモリにいれておけばいいじゃん。
コマンドに、波動拳と、たつまきがあるとして、
まず、下があって、次にコマンドとして継続可能な入力は、
右下か、左下で、
とう具合に。
波動拳なら、
まず、下で、次にコマンドとして分岐可能なのが、
0298名前は開発中のものです。
04/06/10 02:40ID:qBwAR2Ydまあメモリがあるなら、とりあえず希望道理に動作する処理を作るのがいいかと。
まずパターンマッチで作ってみれば良し。
それで自分で入力して遊んでみれば、いろいろ改善点も見えてくると思う。
SNK系とカプ系でも設計思想が割れてて、なかはこうなってんだろうなぁとかそのうち見えてくると思うよ。ちと古いか。
0299名前は開発中のものです。
04/06/10 02:42ID:qBwAR2Ydこうできませんって感じのがいいよな。
ヘローワールドくらい出力させられる段階になったら、まずなんか作ってもってこいとオジサンは言いたい!
0300名前は開発中のものです。
04/06/10 02:46ID:cR6g+xduInputNode *ipsiron_node;
};
0301300
04/06/10 02:50ID:cR6g+xdu0302名前は開発中のものです。
04/06/10 03:01ID:/LNWknHXpublic:
void update(){
switch(count_){
case 0: if(g_Keyboard.getKeyState() == Keyboard.DOWN)count_++; break;
case 1:
/* (略) */
case 3: Hatsudou(); count_ = 0; break;
}
}
private:
int count_;
};
0303名前は開発中のものです。
04/06/10 03:10ID:qBwAR2Ydもし壁にぶち当たったら、また質問スレにくればいい。
0304名前は開発中のものです。
04/06/10 07:50ID:ccdw5s27オートマトンでしょ。
0305名前は開発中のものです。
04/06/10 07:59ID:R4NUZcHA0306名前は開発中のものです。
04/06/10 13:57ID:Le5pEI7v0307名前は開発中のものです。
04/06/10 22:40ID:qBwAR2Yd0308名前は開発中のものです。
04/06/10 23:00ID:Y189To6+マルチゲームScripter
内蔵の言語/簡易言語なら
最近体験版が出たRPGツクールXP、ADVツクールシリーズ、
格ゲーツクール、チャイムズクエスト
他にもあるかもシレン
0309名前は開発中のものです。
04/06/12 16:36ID:uX7X340v何でVCが6.0なんだ?
ネイティブコードは普通に打てるし.NETでも構わないと思うが。
最近入門書も増えてきたし。
0310名前は開発中のものです。
04/06/12 16:55ID:gvpzCpXgよく読みましょう
0311名前は開発中のものです。
04/06/13 14:41ID:zqEFd0SE落ちてたサンプルをほとんどそのまま使っています。
一通りは理解できて、動作するのだけど、どうしても解からない部分があります。
50%の透過色を得るのに、
※lptemp1=転送先のバッファ
※lptemp2=転送元のバッファ
*lptemp1 = ((*lptemp2 & 0xf7de)+(*lptemp1 & 0xf7de))>>1;
の式で、なぜ「& 0xf7de」する必要があるのでしょうか?
ディスプレイは16ビットの565でやっています。
0312311
04/06/13 14:48ID:zqEFd0SE「& 0xf7de」でビットマスクをかけているってのは解かったのですが、
これでなぜ正常に色が表現されるのかが解かりません。
よろしくお願いします。
0313名前は開発中のものです。
04/06/13 14:55ID:xISHbvDs各要素のひとつ上のビットを0にしておけば、
加算時の桁上がりが確実にそこに反映される。
それを一つシフトすれば、元の各要素の位置に、
それぞれ足して2で割った値が入る。
隣り合う要素の最下位ビットが失われるので、
最大で1の誤差が生まれるが、演算速度の向上に比べれば
無視できる範囲だろう。
0314311
04/06/13 15:45ID:zqEFd0SEなるほど。
加算した時の桁上がりが、別要素の色に悪ささせないために、
マスクをかけているわけですね。
確かにPhotshopで作った半透明画像と、
プログラムで出力してキャプった画像の色のRGB要素が微妙に違っていました。
おかげで胸のつかえが取れました。
ありがとうございました。
0315名前は開発中のものです。
04/06/13 15:45ID:EvZ8h1Zh1 1110 111 1 10 11110b=F7DEh
RRRRRGGGGGGBBBBB
1111011111011110
+ 1111011111011110
------------------
11110111110111100
11110111110111100 >> 1 =
1111011111011110
0316名前は開発中のものです。
04/06/13 15:50ID:xISHbvDs知ってたから答えることもできたけど、
こんなコードをコメントなしで書いてしまうのはお勧めできない。
0318名前は開発中のものです。
04/06/15 15:27ID:VVOVJCXy>落ちてたサンプルをほとんどそのまま使っています
どうでもいいが、そのサンプルの出典(ソースの出自)を書かないのも
あまり誉められた真似ではないな。俺は知ってるが、お前が貼る事に
意味があるので少しだけ待ってやる。
0319名前は開発中のものです。
04/06/15 20:00ID:zNZaMExsアホ?
0320名前は開発中のものです。
04/06/15 20:30ID:H+leUq8X0321名前は開発中のものです。
04/06/15 20:45ID:MqAReyL80322名前は開発中のものです。
04/06/16 13:57ID:cW2KlvaDhttp://www.google.co.jp/search?hl=ja&ie=UTF-8&q=1111011111011110&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
0323名前は開発中のものです。
04/06/16 14:05ID:cW2KlvaD回路屋なら比較的サラっと出てくる(出てこなければおかしい)アイディアである。
ただし、ゲーム系プログラマに関しては信号処理のしの字も知らないDQNが
普通にのさばっているので、この手のアイディアの提供者は比較的絞られくる。
http://www.gamedev.net/reference/articles/article817.asp
http://www.emit.jp/prog/prog_b.html
他人へのリスペクトを忘れないってのは大事ですね。
0324名前は開発中のものです。
04/06/16 15:34ID:NZ8+ANNQ0325名前は開発中のものです。
04/06/16 15:43ID:Qvbskj5p比較的サラっと出てくるのは、そういうコードに触れた事があったり前例があるから。
PCのアマチュアプログラマでも、たとえば上げられたページなんかを見たことがあれば
応用できるようになるだろうよ。
0326名前は開発中のものです。
04/06/16 16:08ID:cW2KlvaD今度は何処に争点を置いてるんです?
0327名前は開発中のものです。
04/06/16 16:12ID:4oN7mGs10328名前は開発中のものです。
04/06/16 16:31ID:Y3zAuYuk> 比較的サラっと出てくるのは、そういうコードに触れた事があったり前例があるから。
いや、算術演算の加算回路を知ってれば済む話だが。要するにそこは論点じゃあないよ。
汎用知識を個別の分野に適用しよう、というアイディアを思い付くことは素晴らしいし
ネット上で広めた奴には賛辞を惜しまないね。という話だろう。
>>327
レス番号を書きたまえ。尤も、お前さんの発言を否定する書き込みは見当たらないようだが。
0329名前は開発中のものです。
04/06/16 16:44ID:Y3zAuYukぼかしツールのコードと思われる部分で16bitレジスタによる8bit値
飽和演算処理を見た。おそらく、それ以前の画像処理方面のプロプライエタリな
コードの中でも同様なテクニックが使われていたであろうことは
想像に難くない。
こうしたアイディアを発見的に思いつきオープンな場で広く語られる
きっかけを提供した奴らは気の利く奴らであり、相応の評価をしても
バチは当たらないだろう。
0330名前は開発中のものです。
04/06/16 17:28ID:qfS7ZFH2でもJavaゲームってけっこう叩かれてて…
もう少し技術が身についたら他の物で作ろうと思うんですけど何がおすすめですか?
それともこのままJavaを使ってても充分なものをつくれるでしょうか?
0331名前は開発中のものです。
04/06/16 18:26ID:p3CztuKrようはやる気
3Dものならアレだがまずはそのレベルまで言ってないと思うから
Javaで問題になることはないだろうね
0332名前は開発中のものです。
04/06/16 18:55ID:cW2KlvaDABA games とか覗いてみては。参考になると思われ。
http://www.asahi-net.or.jp/~cs8k-cyu/
あと、pure Javaではなくなるけど
JSDLとかJSparrowを使えば良い感じでイケます。
もし不満が出てきたら
・C#+Cg(OpenGL)
・C#+HLSL(DirectX)
という富豪的プログラミングも可能です。
0333名前は開発中のものです。
04/06/16 19:13ID:p3CztuKrjavaも1.4からは標準でvram直とかDirectDraw使ったりして高速化できるし
フルスクリーン化もほんの数行でできるし通常の2Dベースなら問題ないけどな
0334名前は開発中のものです。
04/06/16 20:35ID:qfS7ZFH2いろいろ考えるよりもまず作ってみますね
0335名前は開発中のものです。
04/06/18 00:18ID:9WjZIBPx今は使ってないんですが、将来的に透過情報も使うかもしれないので
PNGとかにしようかと思ったんですが、libpngを使うと思ったより実行ファイルが
大きくなっちゃいまして。
0336名前は開発中のものです。
04/06/18 09:54ID:F29KhlRtA付ビットマップだていいじゃないか。
0337名前は開発中のものです。
04/06/18 16:59ID:xHeZzj8T>libpngを使うと思ったより実行ファイルが大きくなっちゃいまして。
無圧縮バイナリが200KB程度増えることが障害になるケースが
あるのか疑問だが、もし気になるならlibpngが内部で呼び出してる
zlibを直接呼び出せばいいのではないか。あれは64KB程度だろう。
実行環境のHDD容量をハデに使っても構わないなら>>336が云うように
RAW形式にしておけばいいし。どのみち配布時はLZ77派生アルゴで
圧縮するわけだし。
0338名前は開発中のものです。
04/07/13 21:07ID:BtuSWgS+迂回したり、飛び越えたりしたいのだが、どうやってルートを計算したらいいのか分からない。
マス目上にして、2Dシミュレーション+大雑把な高さのようなのにしようにも、障害物の大きさがバラバラ過ぎて、判定出来ない。
目を細かくすれば、無駄に容量食うし、処理も重くなる。
風雲新撰組を見ると、ポイントのようなものがあり、迷ったらとりあえずそこに出るという形になってるぽいですが、あれも何か変。
いいのありませんか?
0339名前は開発中のものです。
04/07/22 22:48ID:960yNB+RDirectX&VC++使ってます。
0340名前は開発中のものです。
04/07/25 04:45ID:35wXch4G正射影を考えればいいんじゃないかな
こことか参考になるかどうかわからないけど
http://www.cam.hi-ho.ne.jp/strong_warriors/teacher/chapter09.html
0341名前は開発中のものです。
04/12/09 17:11:37ID:xa3u+hyT0342名前は開発中のものです。
04/12/11 16:27:00ID:vgTlHBwt誰か教えてください
開発環境は.NETでGSlib使ってます。
0343名前は開発中のものです。
04/12/11 16:34:08ID:811lQTfWclass CParticle{
public:
float px,py,pz;// 位置
float mx,my,mz;// 移動
void Update(){
my-=0.1f;
px+=mx;py+my;pz=mz;
}
};
インスタンスを配列でたくさん作ってそれぞれ別々の初期値を
px,py,pz,mx,my,mzに入れて、毎フレームUpdateを読んだ後に
px,py,pzの座標にビルボード表示しろ
px,py,pzの初期値を全インスタンスで揃えて
mx,my,mzをインスタンス毎に別々の値にすると
花火のようなパーティくるになる
↑
このソースはさすがに理解できるだろ?
あと、マルチポストするんなら、先に質問してほうに断りいれないと失礼だぞ
0344名前は開発中のものです。
04/12/11 16:45:12ID:vgTlHBwt初心者なんでそのソースみるとJAVAに見えるんですがどうなんですかね?
0345名前は開発中のものです。
04/12/11 17:05:55ID:811lQTfWC++です
自分の使用する言語
後、現在OpenGLでどの程度の事までできるのか
などなど、情報が少なすぎる
0346名前は開発中のものです。
04/12/11 17:25:03ID:1OS7WaCz0347名前は開発中のものです。
04/12/11 23:20:32ID:t9QkwRza現在Cにて、シューティングのタスクシステムを構築中なのですが、製作する構造体で悩んでます
今考えているのは
@固有データの性質別に構造体を製作
A構造体を1種類しか作らない
Bプライオリティ毎に別の構造体を製作
多分実装するなら@かAになると思うのですが、
構造体の種類が増えると重くなるとか、不具合は出るのでしょうか?
0348名前は開発中のものです。
04/12/11 23:38:46ID:uYrLB73Nマルチポストですか
0349名前は開発中のものです。
04/12/11 23:39:37ID:uYrLB73N今月のCマガにタスクシステムのってたぞ
0350名前は開発中のものです。
04/12/11 23:52:03ID:t9QkwRzaおお!
じゃぁ明日Cマガ買ってきて勉強してみます〜
0351名前は開発中のものです。
04/12/12 00:37:31ID:CeTMvWXF言語ってありますか?
0352名前は開発中のものです。
04/12/12 01:04:00ID:/zorvY1TC++かJavaが一番だとは思うけど、
挫折した(またはしそう)ならHSPが良いかもしれない
知り合いがHSPでゲーム作ってたけど、意外とキチンと出来てるので驚いた
0353名前は開発中のものです。
04/12/12 01:10:19ID:bBuHfoVs0354名前は開発中のものです。
04/12/12 01:10:41ID:CeTMvWXF情報ありがとうございます。
C++ってお金かかりますか?
0355名前は開発中のものです。
04/12/12 01:26:19ID:/zorvY1Tコンパイラと開発環境はBCC使えば無料で揃える事が出来る
出来れば.NETを使った方が良いけどソフト代がン万円・・・・・
学生なら学割で5000円になるけどキーコードの申請に2週間以上かかる
そういえば.NETって評価版があったような希ガス
それと落としてみて使ってみてから決めるのがいいかも
0356355
04/12/12 01:30:19ID:/zorvY1T「猫でもわかるプログラミング」内に
BCCのチュートリアルがあったので張っておきます
連投スマソ
0357名前は開発中のものです。
04/12/12 01:32:23ID:bBuHfoVs今はベータ版が無料で使えるYO(VisualC++ 2005 Express)
0358名前は開発中のものです。
04/12/12 06:11:00ID:V4Sj+KDuvcToolKit + プラットフォームSDK + DirectX SDK
全部タダ
BCCよりいいよ
0359名前は開発中のものです。
04/12/12 06:54:33ID:yiVn8EQz「ただより高い物は無い」
ってことだよね。
統合開発環境もってる人と比べたら、それなりの苦労はすると思う。
http://www.amazon.co.jp/exec/obidos/ASIN/B00009PJOC/
http://www.amazon.co.jp/exec/obidos/ASIN/B00009PJOD/
http://www.amazon.co.jp/exec/obidos/ASIN/B000063NKV/
学生にしたってなんでこんな金ケチるんだろう・・・。
これからかかる書籍代云々含めたらこんなどころの話じゃないのに・・・。
0360名前は開発中のものです。
04/12/12 10:57:25ID:eeUucuKY書籍も殆どは図書館で済ませているし。
今はD言語+SDLだけど、総合開発環境に染まっていたらこれらの存在を知ることすら無かっただろうね。
総合開発環境も使ったことあるけど、俺は馴染めなかった。
結局のところ、人それぞれ。
0361名前は開発中のものです。
04/12/12 11:13:06ID:vLKNn5Dw今はC#や無料のアドイン可能な言語が使えて4000円以下だけどな。
http://www.amazon.co.jp/exec/obidos/ASIN/B0002ERS18/250-8777118-1081041
まあ、.NETは初心者には複雑すぎるだろうからVCToolkitで不満が出たら買う程度の認識で構わないと思うぞ。
0362名前は開発中のものです。
04/12/12 12:56:49ID:gDl4N7ky規模というか3Dが、だな
2Dでも規模が大きければJavaや.NETのほうがC++よりはいい
まぁSDL&OpenGLラッパー使えばどうでもいいが
Java3D方面はおいかけていないのでわからない
Javaの利点はあれだ、無料でコンパイラからIDE、データベースを
使った業務プログラムまでこなせるものがひとつの言語で作れるというところだろう
0363名前は開発中のものです。
04/12/12 15:16:20ID:T4tmo/uTVS.net学生版登録しましたが,3日で垢とれました。
0364名前は開発中のものです。
04/12/12 22:08:28ID:ECDzMr090365名前は開発中のものです。
04/12/12 23:03:21ID:WoF+KpwQ毎年更新するよりマシ
0366名前は開発中のものです。
04/12/12 23:09:00ID:B/rSPOKE0367名前は開発中のものです。
04/12/12 23:31:47ID:FwlKHgFV私の持論ではプログラムは独学で身に付けるものです
0368名前は開発中のものです。
04/12/13 00:12:14ID:H/NM9SWx0370名前は開発中のものです。
04/12/13 08:23:09ID:Bu85fQFnむしろ経験上、独学以外で学んで奴にロクな奴はいない
>>360
よかったよかった
紹介した介がある
0371354
04/12/13 23:44:03ID:zV7Kakl+時間があればこつこつと勉強していきます^^
0372名前は開発中のものです。
04/12/14 07:16:46ID:poGq8Mncみんな独学してます。
専門学校も情報系の学部も、周りに同好の士がいるという以上の意味はたいしてない。
しかも、昔はプログラミングの学習曲線は相当鈍いのが常識でしたが、
今ならやる気さえあれば数年でアマチュア最高峰、下手なプロより上のレベルまで行けます。
この記事の表現に従えば、「高速道路が敷かれた」と。
インターネットの普及がもたらした学習の高速道路と大渋滞
http://blog.japan.cnet.com/umeda/archives/001909.html
俺が正統な書物や論文に当たれないまま
授業中にウンウンポリゴンの出し方考えてた頃と比べりゃめっちゃ恵まれてるから、
悩まずとっととやれ。
0373名前は開発中のものです。
04/12/14 10:51:03ID:73CldVQsどのプログラミング言語orツールが適していますか?
勉強しながら簡単なサンプル程度のものから始めようと思っています。
0374名前は開発中のものです。
04/12/14 12:44:42ID:EyG3+mk4Delphi、Rubyもいいかもな
豆乳、GameMakerという手もあるか
0375名前は開発中のものです。
04/12/14 13:10:05ID:bBZqvcB7ま、まずは言語自体が初めてなのかゲーム作成が初めてなのかによるが
0376名前は開発中のものです。
04/12/14 13:45:31ID:DDGCo+Mbと聞いてるあたりからプログラム経験は無いと思われ。
そんな>>373にはMultiMedia Fusionを薦めてみる。責任は取らん。
0377名前は開発中のものです。
04/12/14 13:52:11ID:el6KibCx0378名前は開発中のものです。
04/12/14 15:46:14ID:6EayMZnDプログラミングがしたいんじゃなくてゲームが作りたいだけなら>377
すぐに画面に何かだして動かしたいならHSP、GameMaker、豆乳
時間はかかっても超本格的にやりたかったらC/C++
ちなみにC/C++はどんなに早くても3ヶ月くらいは
ビットマップ一枚表示できないことを覚悟せよ
個人差や学習効率によってはもっとかかる
挫折者も多い
ちなみに漏れはCがはじめての言語で
結構みっちり勉強してたけど
絵をウィンドウに出すまで半年かかった
でもC/C++だと(ある程度マスターできれば)飯が食える
0379名前は開発中のものです。
04/12/14 18:06:21ID:FapYMSueヲイヲイ、初心者をいじめるなよ。
現実、.netでもCでSDKならSTGの型を作るだけなら
一週間(一日3〜4時間×5日+10〜14時間×2日を目安)でできぞ。
(馬鹿な事言ってるのは分かるけど突っ込まないでね。)
ただ、問題はそこから
アルゴリズムとか、言語の色んな仕組み、その他多くの関数を知らないと
そこから先進めなくなる。
で、一番高い難所は
Visual Studioの使い方だ。これを理解するのに2日掛った・・・。
0380>>379
04/12/14 18:19:40ID:FapYMSue・HSP(一番最初はこれが神に見えた。)
Cを始めるまでに4・5日ぐらいはやってた。Sampleが多いから勉強しやすい。
・猫でも分かるプログラミング(今のCプログラム初心者が一度は見る所)
でも、自分はあんまり役に立たなかった。古い記事が多いので念頭に置くこと
・WisdomSoft( ttp://wisdom.sakura.ne.jp/ )自分はここでCをほとんど覚えた。
ここの人が書いてる「Windowsゲームプログラミング:書籍」で実質SDKを覚えた。
・C言語 ( ttp://www.wakhok.ac.jp/~kanayama/C/98/ ) とある短期大学の物
別にそこの学生じゃないんだけどね。上とあわせてCを覚えた。
・窓プログラミング (ttp://hp.vector.co.jp/authors/VA016117/index.html )
色々とポインタとか、特別分かりやすかったわけではないが。
・あと、もう一つあるんだけど、今はWeb上に残ってないので省略。
( 自分はその時のDownLoad版を今でもたまーにみてるけど。)
あとは、Googleでとにかく分からない単語を調べる。=>分からなくてもそのうちどうにかなるさと開き直る。
エラーもとにかく調べる=>解決したときは、その方法を、そのページをコピーしてOffLineでも見れるようにしておく。
0381>>379
04/12/14 18:37:06ID:FapYMSue1.コンソール物をいくつか作ってみる。(main関数だけでいいから)
■適当に数回「分岐 if switch 」とか、「ループ」「配列」「文字列」「ファイル操作」とかのサンプルを研究
で、プログラム板の宿題スレからなんか適当に選んで作ってみる。
2.関数を理解する。
■「引数」「関数」「返り値」とかの言葉を調べる。
1.に同じく、プログラム板の宿題スレ(略
3.Win32APIを泣きながら覚える。
■とにかく、記事を読む。Sorceを読む。分からないものも調べる。
でも分からないものはそのうちどうにかなるさぁと開きなおる。
4.自分だけで(カット&ペーストは使ってもいいが)キー入力と絵の表示を連動する物を作る。
5.あとは、野と成れ山と成れ
0382名前は開発中のものです。
04/12/14 19:31:00ID:6EayMZnD>5.あとは、野と成れ山と成れ
なんかカコイイw
0383名前は開発中のものです。
04/12/14 22:57:59ID:LLXVByAK一瞬、「白紙の状態からC++を理解してSTG製作」を一週間でこなしたのか
とか思ってしまった俺は負け組み
まぁHSPはちょっとやったけど、あれも爆発的に手間が省けるってほどじゃない・・・・・・・
結局システムとか判定は1から作らないといけないし・・・・・・
0384名前は開発中のものです。
04/12/15 05:08:46ID:b6lgozwBそれを省いたら××ツクールになってしまう。
0385名前は開発中のものです。
04/12/15 10:19:32ID:HsGZhQ6qでも、システムとか判定は種類が違えど、どこかしら似ている部分が多い。
0386名前は開発中のものです。
04/12/15 14:08:56ID:45BomRiK0387名前は開発中のものです。
04/12/15 14:52:20ID:L/K/Ntdfオナヌィツールを作るのに夢中になる罠
0388名前は開発中のものです。
04/12/15 19:56:57ID:b6lgozwB客観的に見たら、ォナニーにしか見えないだろうとは思う・・w
0389名前は開発中のものです。
04/12/15 20:18:31ID:uxKIR4qzまぁプラモデルなんかも同じようなもんだろうな
0390名前は開発中のものです。
04/12/16 00:31:07ID:U1q3cJqR0391名前は開発中のものです。
04/12/16 00:42:48ID:GydeynlBじゃあ、もう、オナニーでいいよ。
みんなプログラムなんて組むのやめようよ。
0392名前は開発中のものです。
04/12/16 01:19:50ID:U1q3cJqR0393名前は開発中のものです。
04/12/16 07:16:53ID:I5NiXAvzと言っているのに
・オナニーしよう
というのは(*^ー゚)ノ ぃょぅな構造をしているとしか思えない
0395名前は開発中のものです。
04/12/16 09:18:20ID:7k6UBUX70396名前は開発中のものです。
04/12/16 11:35:07ID:nYcbMoQ4それで限界だと思ったら別のを探せばいいしな
0397名前は開発中のものです。
04/12/16 20:11:53ID:A2FLIb2p0398名前は開発中のものです。
04/12/16 23:02:01ID:3yDx983G目標は高く持つべきだが、いきなり挑戦するのは無謀。絶対嫌になる。
いきなりチョモランマ登頂を目指すのではなく、まずは天保山辺りから少しずつ進めていく。
0399名前は開発中のものです。
04/12/17 01:11:42ID:cec1JpT9とかは作れるようになったんですが、自動で動くゲームっていうのが分かりません。。。
http://www.geocities.jp/ball_by_vc/Ball.zip
クリックしたらボールが動く、っていうのを簡単に(60行ほど)作ったんで、
誰か1秒ごとに動いていく、のように書き換えてうpしてください。お願いしますorz
0400名前は開発中のものです。
04/12/17 01:28:43ID:kwb+kcf4BallWnd::OnTimerを追加(中身はOnLButtonDownと同じくInvalidateで良い)
メッセージマップにON_WM_TIMER()を追加
InitInstanceの最後にSetTimerをElapse=1000で追加
引数はMSDNなりなんなりで調べれ
0401名前は開発中のものです。
04/12/17 23:01:07ID:phamhyn5どのようにフィールドを表示するのが普通なのでしょうか。
僕はSRPGを作っていて、僕のは、フィールド1マス分を表示する関数があって、
そこで、地形下地、地形上地、移動範囲、攻撃範囲、キャラ、カーソルと
順番に表示し、フィールド全体を表示する場合は、それを複数回行う方法です。
全てが1マスに収まっている場合はその方法でよかったのですが、
キャラの立つ位置を変えたり、ダメージを受けた時に吹き飛んだりさせたく、
キャラの位置をマスからはみ出して表示させたくなったのですが、
それをやった所、案の定、体が千切れて表示されてしまいました。
ツクールでは、地形サイズが16に対して、キャラが24なので、
はみ出しているのが普通なのですが、どの様に表示しているのでしょうか。
0402名前は開発中のものです。
04/12/17 23:09:51ID:Kqu8dkBQ0403名前は開発中のものです。
04/12/17 23:11:24ID:tQoXALVp地形下地、地形上地、移動範囲、攻撃範囲、キャラ、カーソル
と表示すればいいんでない。
0404名前は開発中のものです。
04/12/17 23:11:42ID:d+0PjBV10405名前は開発中のものです。
04/12/17 23:14:53ID:Am+j201ESTGみたいに座標で管理するのはNG?
背景描写して、その上から座標でキャラクターを描写
ゲーム中のキャラの座標は、マスのドット数で割れば出せる
俺だったらこういう風な処理にするけど、SLGは作ったことないからなぁ・・・・・・
誰か創ったことのある人の意見キボンヌ
0406401
04/12/17 23:18:07ID:phamhyn5具体的にお願いします。
>>403
速度を早くするために、位置を指定して表示するためにそうしていました。
スクロールの時は、新たに視界に入る分のみ表示、
キャラが移動する時は、前の位置と移動後の位置のみとか。
>>404
キャラもですね。縦横それぞれ2倍に。
0407401
04/12/17 23:21:22ID:phamhyn5細かくやれば、正しく表示は出来ると思うのですが、
セルという概念でデータを管理している以上、
それを生かした表示の仕方が無いかなと。
0408名前は開発中のものです。
04/12/17 23:31:34ID:Am+j201Eじゃぁ、>>402の言うように背景表示してから
キャラ表示すればいいだけの話では?
/ ̄ ̄/
/ /
/__/こんな風に全ての背景を一気に表示させてから
/ ̄ ̄/
/('A`)/
/__/キャラを描写して
/ ̄w/
/('A`)/
/w_/木とか、キャラの上に来るオブジェクトをのっける
0409408
04/12/17 23:32:15ID:Am+j201E0410403
04/12/17 23:44:09ID:tQoXALVp>位置を指定して表示する
そういうふうにするなら、移動後の座標を予測して、その通り道のマスだけを描画するってのは?
どのみちマスとマスの中間にキャラを表示するには、
「1マス分を表示する関数」では表現できないから、
複数のマスを>>408みたいに表示する関数を作ればいいんでない。
0411名前は開発中のものです。
04/12/17 23:44:56ID:INtctKM+たぶんだがそういうことをいっているわけではないかと・・・
だってそれはスプライトのプライオリティの設定だけですむわけだし
どっちにしろ抽象過ぎてどうしたいのかがつたわってこない
0413名前は開発中のものです。
04/12/17 23:49:38ID:INtctKM+0414401
04/12/17 23:53:58ID:phamhyn5移動は、半歩ずつとかは無く、1マスごとに飛び飛びに行われます・・。
一マス移動、前のを消す、1マス移動、前のを消すという感じです。
>>411
確かに文章で説明するのは難しいです。
0415401
04/12/17 23:58:14ID:phamhyn5どうなんですかね。確かに見た目で遅いなとは思わなかったですけど。
いい方法が無い場合はそれで行きますが、何かあればいいのですが。
0416名前は開発中のものです。
04/12/17 23:59:06ID:d+0PjBV1シナリオ進行時は表示ルーチンを別にする
おそらくマップの論理座標x=1,2,3,....というの指定するだけでそれに対応した位置に
表示してくれる便利なルーチンを作ったんだろうが後から小芝居させるときに不便だと
気づいたんじゃないかな。
キャラクタをグラフィックの座標(0-639)で表示できるルーチンを先に作ってそれのラッパーで
論理座標を指定して表示でいるルーチンを作っていればこんなことにならなかったはず
今から作り直すか論理座標に追加でグラフィックの座標で補正できるようにすればいいと思う
>体が千切れて表示されてしまいました。
ここから推測するに1マス作成してから転送してるんだよね?
で、>>408みたいにするのは面倒だから代案を考えてくれと。
だったら影響があるマス全部に個別に対応するしかない
キャラクタが千切れたらその千切れたもう片方が本来あるべきマスに
描けばいい。
0417名前は開発中のものです。
04/12/18 00:02:01ID:fcL5sLlu処理軽ければ派手なエフェクトとかガンガン入れても平気だろうし、
低スペックマシンにも優しいし・・・・・
0418名前は開発中のものです。
04/12/18 00:05:48ID:fcL5sLlu>キャラの立つ位置を変えたり、ダメージを受けた時に吹き飛んだりさせたく、
この処理の時だけ、動いたキャラを表示させないようにして
@から改めて動いたキャラを表示させれば良いんじゃないだろうか
この方法だと、キャラが一番上に表示されてしまうけど・・・・・・
0419名前は開発中のものです。
04/12/18 00:14:29ID:aIR3jZyQSLGならフルフレームでなくてもいいだろうし
マップチップが固定されて2プレーン程度であれば
600MHzクラスのCPU+UMAの統合チップセットでも
60fps余裕で出るぞ
ノーウエイトにしてみればわかるがサイズにもよるが200fps余裕でこえるかな
0420401
04/12/18 00:16:54ID:oq7OWQ9j>>416
何となく見えてきました。
>おそらくマップの論理座標x=1,2,3,....というの指定するだけで
>それに対応した位置に 表示してくれる便利なルーチンを作ったんだろうが
>後から小芝居させるときに不便だと気づいたんじゃないかな。
まさにです。
>>417
ゲームの制作意欲を残す為に、
常に難しい方法でやるように心がけています。
>>418
グラフィックを綺麗にする為に、マップチップで陸と海の境界線とか、
草と砂の境界線とか、それらを2層目で書くようにし出したんですけど、
足の位置にその境界線が来てしまって、草か水かどこに居るのか分かりにくくなり、
キャラの位置を全体的に上にずらそうと思いこれをやろうと思ったので、
常にやることになります。ダメージを受けた時はその方法でいけますが。
0421名前は開発中のものです。
04/12/18 00:19:25ID:nY+nxo0b最後にソートすりゃいいんじゃね?
もしDirectX使ってるならrhwを指定するだけでいいだろうし
SDLならレイヤーに対応してたはず
でもそんな小細工できるならこんな質問しないよな_| ̄|○
>>419
環境がわからんから皆ツッコミが甘くなってるだけじゃないかと・・・・
GDIで>>401の方法だと40FPS出ればいいほうだろ
0422401
04/12/18 00:26:47ID:oq7OWQ9j>影響があるマス全部に個別に対応するしかない
まさにここだと思うんですよね。
ずらして書いた後、そこの上に地形を書いたために千切れてしまったり、
逆にマスに上書きしたつもりが、キャラがずれている分消せなかったり。
>>419>>421
fpsの事を教えてください。調べてみると
「動画のなめらかさを表す指標。1秒間に何枚の画像を表示しているかを示す。」
らしいのですが。
ちなみに、C言語、SDKウィンドウズアプリ、イベントトリブン方式
で製作していて、フィールドのサイズは、13X13です。
0423401
04/12/18 00:38:29ID:oq7OWQ9jそれらを参考にもう一度やってみます。
うまく行きましたら、ご報告します。
みなさま、ありがとうございました。
0424名前は開発中のものです。
04/12/18 01:09:32ID:aIR3jZyQDirectDrawでのbltを基準にして考えていた
だからRiva128以降で16bppなら余裕かと思っていたが
GDIでも同じね
DDB使えばDirectDrawより早い
>>422
あーfpsわからないか
その考え方で合っているんだが、ゲームはWinのイベントドリブンで
考えるのはよしたほうがいいぞ
メインループでがりがり毎回描画するアクション系の考え方で
そのなかで独自のイベントを作っていったほうが・・・
どっかにSTGとかならメインルーチンの雛形ころがっているはずだから
それ参考にしてみるといいよ
0425名前は開発中のものです。
04/12/18 02:23:17ID:fcL5sLluDxInputでパッドの入力処理を製作してるんですが、
bool型で各ボタンの状況を判断する方法以外で、何か良い方法は無いでしょうか?
0426401
04/12/18 05:54:22ID:oq7OWQ9j地形を全体に、移動範囲を全体に、キャラを全体に、に変えました。
後の処理のやり方としては、キャラがずれてかかった分のマスをチェックして、
その分も追加して表示する、という案を使うと思います。
やり方は単純ですが、ずれチェックがかなり難しそうです。
ひとまず眠いので寝ますが、今日中に出来ると思います。
>>424
僕のやり方は、基本はメッセージループなんですが、
メインループの見易さ、細かさも取り入れたやり方をしています。
メッセージだと、その時に関係ないルーチンに当たったり、
グローバル変数だらけになったりして、メインだと、やや重くなりますが、
そこを両方とも解決できないかと編み出しました。
当然、アクション系では使いにくいやり方なのですが。
0427名前は開発中のものです。
04/12/18 16:20:14ID:nRcDUE9K意味がわからんが、
ゲーム的には、
・押した瞬間かどうか: bool
・離された瞬間かどうか: bool
・押してからどれだけたったか: int
も実装しておくとらくだが
0428401
04/12/18 20:45:34ID:oq7OWQ9j仰っていた通り、全部表示してしまった方が効率がよさそうです。
通常時はずれられないようにして、スクロールの時とかには、
高速の従来バージョンで表示できるようにし、
戦闘など特別な時にのみずれられるようにします。
しかし、まだ問題がありました。
キャラの足が地形の境界線に掛かり、どの属性の地形にいるか分かりにくい事です。
そもそも、キャラの位置を全体的に上にずらして、境界線が絶対こない所に
足の位置が来るようにしようと思い、この質問をしていたのですが、
先ほど結論に達した、通常時はずらさないに反してしまいます。
解決方法として、一番楽な、その部分には目を瞑る方法、
少ないずれチェックで済む、上にだけずれている時の表示関数を作る方法、
ずれている時も全表示でなく位置を指定して表示できる、
ずれ方を半マスに限定して、キャラを半マスずつ表示する方法を思いつきましたが、
逆に位置関係が分かりにくいなどの弊害が起こる事も考えて、
一番楽な、目を瞑る方法で行きたいと思います。
ここらの部分を納得して先に進むことが出来ます。
みなさま、ありがとうございました。
0429名前は開発中のものです。
04/12/18 21:09:54ID:fcL5sLlu成るほど!
じゃぁ、そのやり方で構造体作り直してみます!
ありがとうございます〜
0430名前は開発中のものです。
04/12/18 21:13:56ID:aIR3jZyQあんなの速度的にも軽い軽い
8bitマシンでさくさく動いていたし、ノーウエイトにすると早すぎたしね
内部の作りはSTGと同じにしていたとか聞いたことがある希ガス
半キャラ単位で描画してもいいし、Y軸基準で描画してもいい
あの程度でいいのなら100MHzでもさくさくかも
0431401
04/12/18 22:04:34ID:oq7OWQ9jやった事がないのですが、このゲームですか?
スクショが乗っていて、何か見た事があるゲームではあるんですけど。
http://www2.plala.or.jp/yasinoue/oldgame/hyd1_1.html
0432名前は開発中のものです。
04/12/18 22:17:10ID:q7rx8BU3うわ、懐かしい
漏れがやったのはファミコン版のハイドライドスペシャルだけど
0433名前は開発中のものです。
04/12/18 22:37:17ID:BHPEV/eq列挙子で
FREE 押されてない
PUSH 押した
PULL 放した
HOLD 押しっぱなし
を作って分類すると楽かも。
0435名前は開発中のものです。
04/12/19 06:16:39ID:DRqhJ+ehD3DXMATRIXで、左右反転させるような関数って無いですか?
0436名前は開発中のものです。
04/12/19 06:27:39ID:DRqhJ+ehD3DXMatrixRotationYで180°指定してやったらできますた
もうちょっと自分で確かめてから質問するようにします・・・・・・
スミマセン
0437名前は開発中のものです。
04/12/19 09:51:38ID:K0ZRB1bTこのスレッドで質問させてください。
今開発されてるスクウェア・エニックスのファイナルファンタジー12って
技術的にはかなり凄いんですか?
もぐりでも頑張ればグラフィック以外は再現できるレベル?
なんか戦闘がリアルタイムで、しかも地形の形状を戦闘に利用できて
かつ主人公以外は完全に自動で行動させられるらしいですけど。
プログラムの中さえ分かれば、自分でもどうにか再現できるレベルなのか。
皆さんはどう思っておられますか。
0438名前は開発中のものです。
04/12/19 10:08:28ID:7IrxQaSKプログラムわかんない人に説明すると長くなるので短く漏れの意見
設計はすごくしっかりしてるんじゃないかと思う
0439名前は開発中のものです。
04/12/19 10:33:30ID:bc/DHSmtここのムービー見れ。
最高峰の物理エンジンとAI使ってるから。
FF12?ナニソレ?ってくらい凄いよ。
漏れはFPS系酔うから買ってないけど、
友人宅で見た時は鳥肌立った。
0440名前は開発中のものです。
04/12/19 11:04:56ID:WMy/66MHHalf-life2は2.4GHzのメモリ256M、VRAM32M以上レベルの高性能であのグラフィック。
FF12はCeleron300MHz、メモリ32M、VRAM8M相当の低性能であのグラフィック。
…釣られた?w
0441名前は開発中のものです。
04/12/19 11:13:00ID:7IrxQaSKFFのテクスチャのクオリティはすごいと思うよ
小さくて制限の多いなかで、すごくいい仕事してると思う
素人さんはそれにだまされて「PCでFF以上のグラフィックって難しいですよね」
とか言いはじめるくらいだから
少し脳内補間が効いてるっぽいところもあるけど
多分>437もその口
0442名前は開発中のものです。
04/12/19 11:13:24ID:2VUgMi4zグラボでいうと
Radeon最新とRivaTNTだからな。
0443名前は開発中のものです。
04/12/19 11:25:18ID:VXomDsbqFF12のゲームシステムをツクールで再現したいという話か?
0445名前は開発中のものです。
04/12/19 11:50:22ID:bc/DHSmtつまり、>>437の言う
戦闘がリアルタイムで、しかも地形の形状を戦闘に利用できて
かつ主人公以外は完全に自動で行動させられる
システムなんてそんな敷居の高いものじゃないから、頑張れば
それなりのものは出来るんじゃね?
0446名前は開発中のものです。
04/12/19 12:12:07ID:WMy/66MHじゃあお前、アルゴリズムさえ知っていたらPC98やX68000時代のマシンでHalf-life2やFF12を実装できるってのか?
…あれ?釣られた?w
俺が言ってるのは
>最高峰の物理エンジンとAI使ってるから。
>FF12?ナニソレ?ってくらい凄いよ。
Half-life2もFF12も似たり寄ったり、どっちも限られた環境を追求してあのグラフィックを作ってるんだから比べられるもんじゃないって事だよ。
0447名前は開発中のものです。
04/12/19 12:30:09ID:bc/DHSmt>>437がグラフィック以外はって書いてるのに何でグラフィックの話持ち出すんだ?
あくまでアルゴリズムの話だぞ。
喪前さんは、ゲーム全体の話をしてるようだが・・・
0448名前は開発中のものです。
04/12/19 15:24:24ID:DRqhJ+eh釣りだと思うけど、十分いけると思うぞ
と書き込みそうになったorz
確かにグラフィックが無理だし、物理エンジンも走るかどうか微妙だな・・・・・
スマソ吊ってくる
0449名前は開発中のものです。
04/12/19 15:33:27ID:DRqhJ+ehアルゴリズムが理解できて
尚且つ数学も理解できて無いと_
でも技術的には
結構ありふれた物使ってるのじゃないかと思われ
0450名前は開発中のものです。
04/12/19 15:37:31ID:WMy/66MH話題が二転三転してないか?
お前が>>439で書いてるのはほとんどグラフィック関係だけじゃん。
物理エンジンはグラフィックに関係してないのか?
アクションゲームのAIをロールプレイングゲームのAIと比べられるのか?
俺が突っ込んでるのは「PCとPS2でそもそもジャンルが違うHalf-life2とFF12を比べられるわけないだろ、釣りか?」
って事なんだが。
お前にとってHalf-life2のアルゴリズムはFF12より凄いらしいが、真・三国無双と初代ドラクエだとどっちのアルゴリズムが凄いの?w
0451名前は開発中のものです。
04/12/19 15:56:57ID:DRqhJ+eh連レスだけど・・・・・・
モグリじゃ再現はまず不可能
モグリでも再現できるようなら、
同人ゲームでそういった3Dをバリバリ動かすようなゲームが溢れてるはず
グラ関係等での制約もあるんだろうけど、
今の所そこまで高度な処理をするようなゲームは殆どない
こんな回答で良いのだろうか?
0452名前は開発中のものです。
04/12/19 16:23:23ID:yaeQpsCQ0453名前は開発中のものです。
04/12/19 17:25:18ID:bc/DHSmtはいはい、クマ-(AA略
アルゴリズムって言葉を調べてね。
0454名前は開発中のものです。
04/12/19 18:31:41ID:bc/DHSmtttp://www.4gamer.net/store/movie/HALFLIFE2_E3_2003.lzh
こっちを見ればわかるだろ。
0455名前は開発中のものです。
04/12/19 19:02:26ID:P175sgFg3Dですら、連中にとっては高スペックらしい。
0456名前は開発中のものです。
04/12/19 19:36:37ID:WMy/66MH池沼か?
>>437はそもそもFF12がグラフィック以外なら素人に作れる物なのかを聞いてるのに、何でHalf-life2が話題に出てくる?
全く関係無いだろ?
0457名前は開発中のものです。
04/12/19 20:02:30ID:bc/DHSmt読解力ってものが無いのか?
>>437は
戦闘がリアルタイムで、しかも地形の形状を戦闘に利用できて
かつ主人公以外は完全に自動で行動させられる
技術が凄いのか?って聞いてるんだろ。
だから参考にするならHalf-Lifeを見ろと言ったわけ。
おまいさんは、ただFF12をけなされたと勘違いして脊椎反射で噛み付いてるだけじゃないか。
そりゃ総合的に見ればはFF12もかなり凄いって事くらい解るよ。
0458名前は開発中のものです。
04/12/19 20:27:21ID:yaeQpsCQ0459名前は開発中のものです。
04/12/19 20:31:14ID:4xsPTOj3地形を戦闘に利用することが出来るようにすること自体は
そんな難しくないだろうけど、それを使ってゲームを面白くするシステムを考える方が難しい。
自動行動だって簡単な物はすぐ出来るだろうけど、「頭がいい」って言えるような
学習も備えたやつを作ろうとすると多少手間がかかる。
0460名前は開発中のものです。
04/12/19 21:03:48ID:P175sgFgRPGでは英雄伝説のAIは、敵のHP情報などを使用して、割と頭の良い行動が出来た。
>>459の「学習を含めた」、というのは恐らくないだろうから(保存メディアの必要領域が
大きくなるから)、そんなに高度なものは作られていないと思う。
0461名前は開発中のものです。
04/12/19 21:16:32ID:+EamBMW/以前どこかのRTSがやってたと記憶するんだが、
現在の状況を元に次の行動を決定する過程で
パーセプトロンと同じモデルを使っていれば
記憶に使う容量は学習が進んでも増える事はない(重みが変わるだけ)し、
SLGの分野では(類似した物が)そこそこ使われてる気がする
0462名前は開発中のものです。
04/12/19 21:24:33ID:P175sgFg勉強になります。
0463名前は開発中のものです。
04/12/20 00:43:20ID:rMlKdZvOてかNNがゲームに使われてるなんて話聞いたこと無いんだが、本当なの?
本当ならすげー嬉しい。
0464名前は開発中のものです。
04/12/20 00:53:06ID:rMlKdZvOあとNNをゲームに使ってるなんて話は聞いたこと無いんだけど、それ本当?
知ってたらネットワーク構造とかも含めて教えてホスィ(A`)
0465名前は開発中のものです。
04/12/20 00:54:11ID:rMlKdZvO0466名前は開発中のものです。
04/12/20 00:58:26ID:7rZTeKhR商用ゲームに使われてる事例は知らないし、
さすがにまだないんじゃないか?
0467名前は開発中のものです。
04/12/20 01:01:51ID:7rZTeKhRRenderware A.I.にニューラルネットマネージャがあるね。
曰く
「ニューラルネットワークは、一般に予測、分類、データの関連付け、概念化、およびフィルタリングに使
用される、高性能な統計分析データ構造」
実際に使った事例があるかどうかは知らないけど…
0468名前は開発中のものです。
04/12/20 01:38:22ID:NwRcaupm事例はともかく、ミドルウェアに一応置いておく位には使えるのか。
涙が出そう。NNって完全に窓際族扱いで。。
0469名前は開発中のものです。
04/12/20 03:11:33ID:cqrg6fzoGems2の3.14にはColin McRae Rally2.0では多層パーセプトロンをつかってるって記述があった。
0470名前は開発中のものです。
04/12/20 03:24:30ID:tkuWKnTlゲームの分野ではまだまだ未開拓に近いのでは<NN
0471名前は開発中のものです。
04/12/20 15:35:20ID:hImEK0ED現在、背景にポリゴンを用いて海面の揺れ処理を表現しているのですが
このコードでは、なんというか・・動きが変なんです。
gameFunctions.cpp内DrawSea関数で波の動きを制御しています。
ここの伝播処理部分にもっと施すことがあるだろうとは思うのですが、
具体的にどうすれば良いのかが、恥ずかしながら分かりません。
参考になるウェブサイトや、アドバイスなどを頂けたらと思います。
よろしくお願いいたします。
http://prisira.s59.xrea.com/20041219.zip
0472名前は開発中のものです。
04/12/21 00:02:34ID:KKJvDASbだから動作環境ぐらい書け
0473名前は開発中のものです。
04/12/21 00:23:26ID:YOOEfiigそのままでも結構上手く動いてると思うけどね。
とことん凝るなら波動方程式で検索してみるといいよ。
0474名前は開発中のものです。
04/12/21 00:27:21ID:w8c1Lm3Uいやこれはマズいだろ。
一見動いてるように見えるけど、たまたま波の伝搬で誤差を打ち消し合ってるだけで
伝搬をさせないとエネルギーの誤差が蓄積してどんどん振幅が増して大変なことになる罠
波動方程式に基づいて計算するのが無難かと
0475名前は開発中のものです。
04/12/21 00:31:11ID:9lMiERGt0476名前は開発中のものです。
04/12/21 01:37:47ID:sch2axpxすいません、動作環境ってどれを書けば良いんでしょうか?
とりあえず使用しているDirectXSDKは9.0です。
>>473-474
御助言ありがとうございます。
波動方程式について調べてみたのですが、
数式では私には大変難しくよく理解ができませんでした。
それから色々ググっていたら、恐らく私が目指すべきに近いと思われるjavaアプレットを見つけました。
http://hp.vector.co.jp/authors/VA012735/applet/dropimg.htm
しかも大変ありがたいことにソースも公開されていました。
しばらくこのソースと睨めっこして、波動をマスターしたいと思います。
・・・これも何だか難しいですね。
0477名前は開発中のものです。
04/12/22 09:45:46ID:vEPXp48K”error C2660: 'Begin' : 関数が不正な 0 個の実引数をともなって呼び出されました。 ”
というエラーが出る。
ちなみにVC++6.0、DirectX9.0 2004(October)
ヘルプを見ても HRESULT Begin(VOID);だし、引数はいらないように思うのですが。
d3dx9core.hを見ると、
DECLARE_ID3DXSprite_(ID3DXSprite, IUnknown)の中身が、
STDMETHOD(Begin)(THIS_ DWORD Flags) PURE; となっていた。
同じくd3dx8core.hでは、
STDMETHOD(Begin)(THIS) PURE; となっていた。
とりあえず、引数に0を入れてみるとコンパイルは通りましたが・・・。
みなさんはそのままでコンパイルが通ったようなので、どういった環境の違いに
よるものか悩んでいます。とりとめもなく書きましたが、何かわかる方、ご教授ください。
お願いします。
0478名前は開発中のものです。
04/12/22 14:41:37ID:quiBQpLd日本語Help って 9.0 と 2004(December) しか無かったような
対応したバーションの Help 読んでるなら
コードを書いた奴の環境とバーションが違っているんだろ
0479名前は開発中のものです。
04/12/22 18:58:33ID:JZkoDinq×2004(December)
○2004(October)
ちなみにmsdnじゃOctber 2004って綴り間違えてる
↑
0480名前は開発中のものです。
04/12/22 21:59:05ID:VEp0024Iオーソドックスな視点の2Dのゲームなんですが、
このタイプで高さを表現する良い方法はないでしょうか。
それを行う為に、今マップの坂を、以下の絵の様に、草、茂み等の下地の地形に、
崖の絵を合成する形で表示しているのですが、余りしっくり来ません。
http://gamdev.org/up/img/2160.png
(http://hp.vector.co.jp/authors/VA020046/
のMACKさん作の素材で、それを少し改変しています)
下地の地形をベースに、影の付け方を変えて坂を表現するという方法を
考えましたが、そういう素材は見つからず、
下地を取り込むと、坂を自動的に作ってくれるツールがあるのかもしれませんが、
グラフィックに詳しくなく見つけられませんでした。
これに沿った方法で、または別の方法で、
高さを表現する方法がありましたら教えてください。
0481名前は開発中のものです。
04/12/22 22:35:59ID:qTuprgSwttp://www.nintendo.co.jp/nom/9811/p04/zelda031.jpg
が参考になるかも。
0482480
04/12/22 22:49:44ID:VEp0024Iありがとうございます。参考にさせていただきます。
自分もゲームでそういうのが使われていないか攻略本を見て探したんですけど、
ドラクエ6、ツクール4に少しあるぐらいでなかなかないんですよね。
0483480
04/12/23 00:24:56ID:zeGMsZ0H見つけましたがこれでいけそうです。ありがとうございました。
0484名前は開発中のものです。
04/12/23 01:31:56ID:vYKn4Xgr旧バージョンのヘルプを見てしまっていました。
あらためて2004(October)のヘルプで確認し、納得できました。
ありがとうございました。
0485名前は開発中のものです。
04/12/23 14:33:36ID:R6w3o4WDenum{
BUTTON_A = 0x00000001,
BUTTON_B = 0x00000004,
BUTTON_C = 0x00000008,
BUTTON_X = 0x00000010,
BUTTON_Y = 0x00000020,
BUTTON_Z = 0x00000040,
BUTTON_L = 0x00000080,
BUTTON_R = 0x00000100,
KEY_UP = 0x00000200,
KEY_DOWN = 0x00000400,
KEY_LEFT = 0x00000800,
KEY_RIGHT = 0x00001000
};
これをDWORD型変数にOR演算でセット。
AND演算を使って判定。
以前の入力が欲しい時はDWORD型配列にする。
僕が以前格闘ゲームを作成したときに使用した方法です。
0486名前は開発中のものです。
04/12/23 14:59:30ID:rYMlNBD20487名前は開発中のものです。
04/12/26 18:12:17ID:xK7O99x1PSとかPS2,game cubeのソフトは、DirectXなるものが使われているんでしょうか?
0488名前は開発中のものです。
04/12/26 18:29:15ID:JxCJBP69コンシューマでDirectX使ってるのはXBOXだけ
0489名前は開発中のものです。
04/12/26 19:23:21ID:z6k4KEYjそれを言ったのは誰だ?
WindowsやXBOXのプログラマが言ったならともかく、PS2やGCのプログラマに言われたなら軽くあしらわれてるぞw
0490名前は開発中のものです。
04/12/26 19:27:18ID:U7hutUIm0491名前は開発中のものです。
04/12/26 21:10:46ID:PcH7Hb9Yまぁあながち間違いではない
右も左も2Dも3Dもその他もろもろもわからない香具師はとりあえずDirectXでも勉強しとけ
DirectXを通してグラフィックハードウェアがどういうものなのか知ることもできるし
3Dの勉強もできるし
ただDirectXにはD3DX系なんかの便利な関数やクラスの中身を
まったく理解せず使ってたらだめだろうな
プロットフォームが変われば使用するライブラリも変わるが、
しっかりとした知識を持っていればすぐ対応できる
逆にライブラリが変わったくらいで、すぐに対応できないような香具師は現場では使えない
0492487
04/12/27 14:22:37ID:c4eg2dH6なんか、いまはC#だとか言ってるんですが。。。
0493名前は開発中のものです。
04/12/27 15:16:06ID:DotxQdESそれが出来ればC#もあまり苦労せずに出来るようになるから。
(逆は案外難しい)
0494名前は開発中のものです。
04/12/27 16:44:29ID:FkSCbusX基本的な部分の仕組みを作る、というか考えるということが出来ない気がするなぁ。
0495名前は開発中のものです。
04/12/27 18:05:01ID:+zVJFTQhあー、そいつ典型的なWindows専門プログラマだよ。
エロゲの会社にでも勤めてる奴?
XBOX2以降だったらC#が使えるようになるかも知れんが…
0496名前は開発中のものです。
04/12/27 18:13:48ID:PyUvd91V最近の言語はプログラマの負担を減らす代わりに
CPUの負担を増やしてるからゲームには不向きだなぁ
0497名前は開発中のものです。
04/12/27 18:37:27ID:7gyZFTApわざわざランタイムを入れてもらわなければ動かないという方が致命的。
0498名前は開発中のものです。
04/12/27 19:54:05ID:VQkgEWr2DirectXだって、ランタイム入れてもらわなきゃならんだろw
0499名前は開発中のものです。
04/12/27 19:57:07ID:P9U2f31C0500名前は開発中のものです。
04/12/27 20:15:49ID:+zVJFTQh0501名前は開発中のものです。
04/12/28 04:21:29ID:eZh/IZfo0502名前は開発中のものです。
04/12/29 21:26:24ID:y6PUZTMCID3DXSpriteインターフェースがDirectX9の前期と後期で変わってるっぽい
BeginのほかにDrawも変更食らってるのを確認済み
ID3DXSpriteインターフェース使って2Dライブラリ組んでた俺としては最新版は使えねぇ・・・
拡大縮小や回転が使えなくなっててもう最悪だった
2D作るのに気軽に使える環境を返してくれYO!
あと同じメジャーバージョンなのにインターフェース変えるなYO!
0503名前は開発中のものです。
04/12/29 22:33:22ID:QlZN4+1J0504名前は開発中のものです。
04/12/30 00:08:24ID:KnybJ9RYだから、拡大縮小回転は使えるって
全部Matrixで指定しる
0505名前は開発中のものです。
05/01/07 21:15:47ID:PnxhwrgV今、2Dのアクションゲーム作ってるんだけど、
オブジェクト(敵や特別な地形)とオブジェクトとの当たり判定っていつやればいいの?
今は水平方向に動かすときと、垂直方向に動かすときにそれぞれ全オブジェクトとの当たり判定やってます。
ちゃんと動くけど無駄が多すぎな気がする・・・
0506名前は開発中のものです。
05/01/08 00:24:20ID:Mfb5U7xY0507名前は開発中のものです。
05/01/09 14:51:26ID:vGUkFhnG比較的軽い計算で、これは絶対に当たっていないって条件が判定できるものは判定する
ってやってるとは思うけど一応
0508名前は開発中のものです。
05/01/09 16:01:21ID:8Mf88qbFQuad Tree
Oct Tree
0509505
05/01/10 03:04:03ID:pQUwlE+5すいませんすいません、毎フレームごとにチェックはしてます。
ただ、その1フレームの中でさらに二回やっているんです。
具体的には、オブジェクトAがあって、
A.x += velX
って感じの水平方向の移動後と、
A.y += velY
って感じの垂直方向の移動後。
他オブジェクトと当たっていた場合は位置補正してます。
>>505
・・・やってないかもしれない。
矩形での当たり判定のみなのでこれが一番軽いかな、と手抜きを(汗
X座標やY座標でソートして明らかに外れているオブジェクト達との
判定はしないようにしたんだけど、オブジェクトの数が少ないと
かえって時間がかかっちゃいまして。。。
>>505
8分木は名前だけ知ってたけど、4分木は初めてです。
8分木の2次元版?って感じですか、どうやら。
どう実装すればいいのかよくわかりませんが、これをキーワードにちょっと
調べてみようと思います。
みなさんありがとう!
0510名前は開発中のものです。
05/01/14 03:51:03ID:i3bZFA1f敵の思考ルーチンをプログラムする際に
参考になりそうなおすすめサイトがあれば教えてください。
0511名前は開発中のものです。
05/01/15 00:22:48ID:Q+iKu070サイトじゃなくて書籍だけど
「定本 Cプログラマのためのアルゴリズムとデータ構造」
0512名前は開発中のものです。
05/01/15 00:27:16ID:rN3ku86Qサイトじゃなくて書籍だけど
「ゲーム開発者のためのAI入門」
A*ならgamdev wikiにもあったような・・・・
0513名前は開発中のものです。
05/01/16 22:59:35ID:CY/+3klI今はfor分の二重ループで1つずつ代入しています
使用環境はVC++です
0514名前は開発中のものです。
05/01/16 23:01:24ID:NpLjrdXw0515名前は開発中のものです。
05/01/16 23:23:24ID:CY/+3klIうまくいきました。ありがとうございます。
使用前
for (int i=0; i<3; i++)
{
for (int j=0; j<3; j++)
{
map[i][j]=0;
}
}
使用後
memset(map, 0, sizeof(int)*9);
0516名前は開発中のものです。
05/01/16 23:26:51ID:IXkeSk7x0517名前は開発中のものです。
05/01/16 23:42:36ID:CY/+3klIなるほど!全体を指定してしまったほうが手っ取り早いですね。
うまくいきました。ありがとうございます。
改良後
memset(map, 0, sizeof(map));
0518名前は開発中のものです。
05/01/17 02:12:10ID:Q4YWdrDN>>513は、もっとガンガレ!!
0519名前は開発中のものです。
05/01/17 02:42:31ID:jWBtbAdV0520名前は開発中のものです。
05/01/17 07:52:36ID:6lEx3rdPでもいいね。
0521名前は開発中のものです。
05/01/18 01:05:52ID:7XkOXKh6memset は string.h
ZeroMemory は windows.h
0522名前は開発中のものです。
05/01/19 16:17:57ID:ZQyRJ79S0523名前は開発中のものです。
05/01/19 18:28:10ID:aRH3B+4H0524名前は開発中のものです。
05/01/23 04:37:44ID:LheYkhazhttp://www.microsoft.com/japan/msdn/library/ja/jpdncode/htm/secure10102002.asp
0525524
05/01/23 04:52:12ID:LheYkhaz0526名前は開発中のものです。
05/01/28 12:13:19ID:7PgE831Hイベントの処理やデータの管理(セーブ機能をつけたい)などを
どう実現していいやら検討も付きません。
どこかに参考になりそうなソース付きのアクションRPGをDL出来るところは無いでしょうか?
ちなみにVC++とDirectXで作っててキャラ&敵の表示、あたり判定、攻撃、マップの移動などは出来てます。
0527名前は開発中のものです。
05/01/28 17:50:53ID:IiB3r9BB暗号化と、バイナリモードのファイル入出力を習得すればできる
大事なのは考えることだ
0528名前は開発中のものです。
05/01/28 18:07:56ID:DhbqYSB9大事なのは「他人にいじられないようにする」という勝手な用件を脳内で作らないことだ。
0529名前は開発中のものです。
05/01/28 19:29:59ID:IiB3r9BBよく意味がわからないんだが、どういうことだ?
0530名前は開発中のものです。
05/01/28 20:52:13ID:KA8jG9qB弄られることで自分が不利益被らないなら、どーなっても良いんじゃないのかな。
大事なのは考えることだ
だけど、余計なことは考えなくて良い
0531名前は開発中のものです。
05/01/28 21:19:33ID:ZJQyR3uNイベントが発生する時は、何かしらのアクションやシグナルがあるから、
それらをifやswitchとかで監視する。(他にも方法はあるだろうけど)
ボスが死んだらイベントが発生する、とか色々イベントを試していれば、おのずと形が見えてくると思う。
まぁ俺の言ってることは>>527、530と一緒で、とにかく試行錯誤したほうがいいよw
0532名前は開発中のものです。
05/01/29 03:56:50ID:hwmUiymu何が分からないのかよく分からないからもっと具体的な質問をしてみな。
データセーブはファイルの入出力さえできれば簡単だろ。どこができないの?
イベントについては、最高の理想を言えば、ごちゃごちゃプログラムで泥縄式に
作るするんじゃなくて、シナリオ記述言語(スクリプト)みたいなのを自分で
勝手に考えて創って、それを読み進めるプログラム(=ゲームプログラム)を
作る…という感じにすると美しいぞ。
0533名前は開発中のものです。
05/01/29 06:10:59ID:dcHY39ty>勝手に考えて創って、それを読み進めるプログラム(=ゲームプログラム)を
>作る…という感じにすると美しいぞ。
多分、526にはその技術が無いから、想像もできんのだよ。
イベントは、まず、イベントマップというのを作る。
これは、画面を表示するマップに重なっているイメージだ。
そんで、そのイベントマップに、イベント番号などを記録する。
すると、マップの。X=5.Y=6の地点で、イベントマップにイベント番号があれば、そこでイベント発生だ。
イベントは、メインルーチンと並列に実行されるようにせねばならない。
たとえば、勝手に上に歩いて、キャラクタが「勝手に足が動いたんだ」というセリフを出すイベントだとしたら、
その歩いてるときにも、ゲームの全体の進行を止めてはならない。
0534526
05/01/29 09:16:02ID:7YDq9IjJデータの管理:まとめてメモリを確保して、セーブが必要なデータはそのメモリを使う。セーブする場合はそのメモリを保存する。
イベントの管理:イベントのデータが入ったファイルを用意して必要なイベントファイルを読み込んでおき、そのデータに応じて処理をする。
書き込む前に色々調べて上記のような処理で実現するのがいいんじゃないかとは思ったのですが、
教材になりそうなプログラムやサイトが見つからないのでここに書き込みをしました。
質問べたですみません。
シナリオ記述言語(スクリプト)をつくる技術はありませんが、イベントマップ方式?はできそうです。
イベントマップとはRPGツクールのイベント処理と同じ考え方ですよね。
体験版があるみたいなのでちょっといじってみようと思います。
0535名前は開発中のものです。
05/02/07 22:00:54ID:lJKKg9iLでもこれが作れたらかなりの腕だと思うよ。
0536名前は開発中のものです。
05/02/10 07:15:16ID:wT+Y0IFB場合によるだろ。
はじめからあらかじめ計画してあって
プレイヤーが今そこにいるための情報がすべてまとまっていれば
ファイルに書き込むだけで終わりだろ。
逆に何も考えずにただゲームを作った後で
どこでもセーブしたいとかいいだしたら地獄絵図だが。
システム組むのって大変だよね。
じゃなくてちゃんと計画できてなきゃそもそも不可能であってやるべきじゃねーことだろ。
0537名前は開発中のものです。
05/02/10 15:17:17ID:pqZJazXR大規模なシステム組むのって大変だよね。
作れたらかなりの腕だと思うよ。
0538名前は開発中のものです。
05/02/10 16:57:44ID:UHlpW5jj0539名前は開発中のものです。
05/02/10 20:56:02ID:R7En7PQ70540名前は開発中のものです。
05/02/10 23:29:01ID:m8YDuGMo0541名前は開発中のものです。
05/02/18 07:16:25ID:NdgimZZ6DirectXをプチプチと勉強しているんだけど、2体のポリゴンキャラクター同士の全ポリゴン判定?フル当たり判定?
をする場合どうやってやってますか?
自分が思いついたのはVertexBufferとIndexBufferを使ってLockするして判定する方法です。
でもこれだと速度的に心配なので他の方法ないかと思ってエロイ人が集っていて板違いじゃなさそうな
ここに相談しにきました。(;´Д`)ハァハァ
0542名前は開発中のものです。
05/02/18 08:38:07ID:I2CSa8I20543名前は開発中のものです。
05/02/18 09:00:28ID:NdgimZZ6・勉強という事で何かいい方法がないか知りたいんですよ。(;´・ω・`)
0544名前は開発中のものです。
05/02/18 09:11:40ID:5R+gyy4l0545名前は開発中のものです。
05/02/18 15:37:57ID:JUukIzID0546名前は開発中のものです。
05/02/18 20:15:52ID:SyUoLxbMそれも思いつきました。
でもたくさんのメッシュが一度にぶつかるとやっぱりきついかな?って思いまして。
>>545
むむ!?(;`・ω・´)もっと詳しく説明やここよめアホってなサイトお願いします!
0547名前は開発中のものです。
05/02/19 06:29:08ID:UXB8Jg0Cたくさんのメッシュを一度にぶつけないでください(マジレス)
衝突判定に銀の弾丸はないのです
0548名前は開発中のものです。
05/02/19 06:41:03ID:O2/kCUDX当たってるかどうかだけなら重くはならん。
ほかに何か求めたいのか?角度とか。
0549名前は開発中のものです。
05/02/19 07:07:27ID:j8BXkcXy角度や摩擦など求める予定ですが、その前にLockして判定する以外
の方法を教えてくれたらと思っています。
簡易オブジェでぶつかっているやつだけLockしてフルチェックさせる方法でも
たくさんのオブジェクトが密集してしまうと結局は簡易オブジェクトなしでフルチェックする
場合とあんまり変わらず処理に影響してしまうので。
0550名前は開発中のものです。
05/02/19 07:08:58ID:T6zgD8Th0551名前は開発中のものです。
05/02/20 10:22:20ID:Mw8d2O0Lえぇ!そんなぁ・・・。(´Д`;)
0552名前は開発中のものです。
05/02/21 18:17:21ID:b2LRiS8sゲームが作りたいなら全メッシュ衝突判定なんて考えない。簡易オブジェクトを使う。
それでも超重くなるとしたら設計が悪い。たくさんのオブジェクトが密集しまくる設計にしないでください。
0553名前は開発中のものです。
05/02/23 00:55:24ID:4mRmpQC+これはグローバルな座標変数をローカルな座標変数に変換するのですか?
あと似たような名前の
D3DXVec3Transformとの違いもD3DXVec3TransformCoord が理解できないため分かりません。
どなたか教えてください。お願いします。
0554名前は開発中のものです。
05/02/23 05:48:21ID:lVuNeIQFこれらを見ても関数の意味が分からないようでしたら、ベクトルと行列の基礎をしっかり勉強してから再挑戦することをお勧めします。
VECTOR4F* D3DXVec3Transform
( VECTOR4F *pOut, const VECTOR3F *pV, const MATRIX44F *pM )
{
pOut->x = pV->x * pM->_11 + pV->y * pM->_21 + pV->z * pM->_31 + pM->_41;
pOut->y = pV->x * pM->_12 + pV->y * pM->_22 + pV->z * pM->_32 + pM->_42;
pOut->z = pV->x * pM->_13 + pV->y * pM->_23 + pV->z * pM->_33 + pM->_43;
pOut->w = pV->x * pM->_14 + pV->y * pM->_24 + pV->z * pM->_34 + pM->_44;
return pOut;
}
0555名前は開発中のものです。
05/02/23 05:49:38ID:lVuNeIQF( VECTOR3F *pOut, const VECTOR3F *pV, const MATRIX44F *pM )
{
VECTOR3F ret;
float w;
w = pV->x * pM->_14 + pV->y * pM->_24 + pV->z * pM->_34 + pM->_44;
if(w) w = 1.f / w;
ret.x = (pV->x * pM->_11 + pV->y * pM->_21 + pV->z * pM->_31 + pM->_41) * w;
ret.y = (pV->x * pM->_12 + pV->y * pM->_22 + pV->z * pM->_32 + pM->_42) * w;
ret.z = (pV->x * pM->_13 + pV->y * pM->_23 + pV->z * pM->_33 + pM->_43) * w;
*pOut = ret;
return pOut;
}
VECTOR3F* D3DXVec3TransformNormal
( VECTOR3F *pOut, const VECTOR3F *pV, const MATRIX44F *pM )
{
VECTOR3F ret;
ret.x = (pV->x * pM->_11 + pV->y * pM->_21 + pV->z * pM->_31);
ret.y = (pV->x * pM->_12 + pV->y * pM->_22 + pV->z * pM->_32);
ret.z = (pV->x * pM->_13 + pV->y * pM->_23 + pV->z * pM->_33);
*pOut = ret;
return pOut;
}
0556名前は開発中のものです。
05/02/23 05:53:24ID:lVuNeIQFVECTOR4F → D3DXVECTOR4
VECTOR3F → D3DXVECTOR3
MATRIX44F → D3DXMATRIX
0557名前は開発中のものです。
05/02/23 07:07:45ID:5jBEcMCA0558名前は開発中のものです。
05/02/23 14:56:55ID:9pm4uh9q0559554
05/02/24 17:48:31ID:9BALKx7J少しでも質問者の疑問に答えられれば良いなと思って書いたレスを、「なんと独りよがりな」という言葉で一蹴ですか。
お前みたいなやつがいると正直やる気を無くすよ。
0560名前は開発中のものです。
05/02/25 03:35:38ID:8xpRQllj0561名前は開発中のものです。
05/03/06 20:52:45ID:+8c0xIHX0562名前は開発中のものです。
05/03/15 00:30:34ID:2caYpl3H0563名前は開発中のものです。
05/03/15 17:25:12ID:l/6TEvIC0564名前は開発中のものです。
05/03/19 22:25:07ID:zqD1MdPqこのスレ、レベルひくっ(ぷっ)笑えてきた。
プログラムなんかやめちゃえ!
0565名前は開発中のものです。
05/03/19 22:53:19ID:OqPAYq45くだらないことを書き込まないように。
0566名前は開発中のものです。
05/03/20 05:27:02ID:oSFOPQ/k喪前は
人間やめちゃえ!!
0567名前は開発中のものです。
05/03/20 05:28:52ID:oSFOPQ/k無能な上司の下で
デスマーチ頑張ってねwww
0568名前は開発中のものです。
2005/03/29(火) 09:19:19ID:NLg6bdst大手ゲームメーカーって言ってるところが笑えるな
腕に自信が無いんだろうな
0569名前は開発中のものです。
2005/03/29(火) 19:21:00ID:UxPYIf8bま、下請けでも強弁すれば「大手でプログラマ」と言い張れないこともないし、
内部事情を知らない厨房の嘘だと決め付けるのもアレかねぇ。
0570名前は開発中のものです。
皇紀2665/04/01(金) 11:07:39ID:2DNa+8SZ0571名前は開発中のものです。
2005/05/10(火) 22:31:50ID:qbemgZao敵の動きを一つずつRubyのマルチスレッド機能で処理するのは良くないですか?
羽虫みたいのが画面一杯に湧いてくるのを蹴散らす場面があるので、弾幕STG並の負荷になると思われます
動作環境はWindowsXPが動いてるメーカー製PCなら例外なく動くようにしたいです
0572名前は開発中のものです。
2005/05/10(火) 23:03:32ID:xTojRoxkゲームに限っては、の話ですが。
マルチスレッドよる処理は、そうする必然性がない限り、お勧めしません。
特にあなたが提案するケースの場合、環境によっては
「自機の処理が行われないまま一つの弾丸にばかり処理権が連続して行く」
事態が、最悪、想定されます。
すると、DIOの世界(ザ・ワールド)に攻撃されたかのような
理不尽な死が体験できることになります。
やめたほうが無難ですよ。
また、世界(ザ・ワールド)現象を回避するために
各キャラの処理一回につき他のスレッドと同期を取った場合、効率は最悪です。
普通にシングルスレッドで処理した方がよっぽど効率的です。
テクに走りたい気持ちはとっても理解する。
そう思っていた時期が俺にもありました。
でも、シンプルかつ愚直に作るのが最善の道であることも多いのですよ。
0573名前は開発中のものです。
2005/05/11(水) 08:43:01ID:6LEYouSHありがとうございます
シングルタスクでやるっていうと
タスクコントロールブロックとかいうやつですよね
初心者向けに解説してある本とかサイトとかがあれば教えてもらえませんか
やね氏の本で扱ってるっていうのを聞いて(プロフェッショナルの続編だったかな)立ち読みしてみましたが
あれだとよくわからんかったです
0574名前は開発中のものです。
2005/05/11(水) 12:26:25ID:KXICTm7E別にそんなたいそうなものじゃなくても
考え方の基本を1フレームずつの処理に変えればいいだけ。
0575名前は開発中のものです。
2005/05/12(木) 20:29:44ID:aQoHjmWQ日本語で詳しく説明している書籍かサイトはありませんか
0576名前は開発中のものです。
2005/05/24(火) 16:19:08ID:v7WpxIBqこれを回避するにはどういうコードを書けばいいんですか?
0577名前は開発中のものです。
2005/05/24(火) 17:14:36ID:NGCTpyCND3DSWAPEFFECT_COPY_VSYNC?
それともここらへんが参考になるか?
ttp://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=28142
0578名前は開発中のものです。
2005/08/12(金) 14:16:54ID:CaToi4lwゲーム製作には構造化の方が向いている気がするんですが。どう思います?
0579名前は開発中のものです。
2005/08/12(金) 16:50:57ID:+xjZsnhE0580名前は開発中のものです。
2005/08/24(水) 09:49:40ID:NGiAd0T20581名前は開発中のものです。
2005/08/26(金) 19:17:31ID:vVPZkYc6数学や物理の勉強から始めた方がいいのでしょうか?
0582名前は開発中のものです。
2005/08/26(金) 19:29:34ID:6D6lM3q9物理なんて当面は高校卒業程度の知識で十分だ
0583名前は開発中のものです。
2005/08/26(金) 19:33:27ID:vVPZkYc6高校の頃は文系だったので科学はやってましたが物理は全くやってないんです
0584名前は開発中のものです。
2005/08/26(金) 21:35:57ID:hMfPlAPs算数やっとこう。それさえできれば後は勘。
0585名前は開発中のものです。
2005/08/26(金) 21:46:40ID:D8UBXRK80586名前は開発中のものです。
2005/08/26(金) 21:57:23ID:q0ihkIeI0587名前は開発中のものです。
2005/08/27(土) 00:57:00ID:4R6gqBFc俺ド素人だし、しかも仕事にしようと思ったらそんな生半可な気持ちじゃ・・・・
0588名前は開発中のものです。
2005/08/27(土) 01:15:27ID:ZquWVtNIゲームプログラミングなんて漠然とし過ぎだって
0589名前は開発中のものです。
2005/08/27(土) 01:18:02ID:4R6gqBFcアクションとかRPGとか
0590名前は開発中のものです。
2005/08/27(土) 03:15:29ID:+qa4qoicつか、仕事にするんじゃこんなとこで聞くなよ
それっぽい定番の本買って、そこから参考文献のリンクやら必要な資料を辿って必要なことから身につけろ。
0591名前は開発中のものです。
2005/08/27(土) 03:20:16ID:4R6gqBFc0592名無しさん@そうだ選挙に行こう
2005/09/11(日) 01:44:55ID:VkAkPVlEver9しかないみたいなんだけど、
ひょっとしてもう8は
CD付きの古本とか探すしかないですか?
98SEだと9のSDKが使えないらしいんで…
(入門サイトに2000以上って書いてた)
0593名無しさん@そうだ選挙に行こう
2005/09/11(日) 11:35:06ID:2BgVInhkつMicrosoft download
0594名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:27:23ID:3zrye/oeここですよね…
ttp://www.microsoft.com/downloads/results.aspx?NextOrPrevClause=6%7c%2b6562&
productID=9C954C37-1ED1-4846-8A7D-85FC422D1388&CategoryID=&freetext=&
DisplayLang=en&DisplayEnglishAlso=&sortCriteria=popularity&startDate=&period=0&
type=&sortOrder=ascending&nr=20
何遍見ても8本体が見つからない_M○
ランタイムやupデータはあるのに…
探し方悪いのかな
0595名前は開発中のものです。
2005/09/19(月) 23:40:13ID:92cy+6KO8は9の中にあるんだけどな。
0596名前は開発中のものです。
2005/11/30(水) 18:14:19ID:NRCIXxVfCをマスターしていればC++のマスターにどれくらい労力がかかるとか。
0597名前は開発中のものです。
2005/11/30(水) 20:18:12ID:/kKwaLK2しかし構文などは似ている部分が多いので、
C++を扱ってた人ならすぐ修得できるよ。
0598596
2005/11/30(水) 20:46:37ID:NRCIXxVfなるほど。ありがとう
ついでに聞いておきたいんだが、そこから派生してWindowsプログラミングってのはやっぱり難しいんだろうか?
今はCでのいわゆるコンソールアプリってのを学んでいる訳なんだが……。
0599名前は開発中のものです。
2005/11/30(水) 22:15:01ID:3MglgmXZいやいや、互換性はあるから。
基本的に、C++ は C に仕様を追加したものだから。
そりゃ、細かいところではルールが違うとかはあるけどさ。
C++ のソースコード内に C のコードを書くことはできるよ。
だから…
- 最初は C で書いて、後々 C++ に書き直す
- C++ で書いていって、どうしても分からない場所を C で書く
っていう勉強方法が使えるよ。
0600名前は開発中のものです。
2005/11/30(水) 22:18:26ID:3MglgmXZ> そこから派生してWindowsプログラミングってのはやっぱり難しいんだろうか?
Windows の API は C ベース。
なので、最低限 C のコードを書ける程度の力は必要です。
ともあれ、「猫でも分かるプログラミング」を見て勉強してみることをお勧めします。
0602名前は開発中のものです。
2005/12/25(日) 18:32:09ID:QPxHAtwCHandleクラスやHandleMgrクラス内に出てくるマジックナンバーとは、一体どのような役割をする為のものなのでしょうか?
本を読んでもソースを読んでも、全く何のために存在するものなのか理解できません。
初歩的な質問かもしれませんが、マジックナンバーとは何なのか、解る方教えて下さい。お願いいたします。
0603名前は開発中のものです。
2005/12/25(日) 21:16:44ID:10j12RX3Handle のマジックナンバーは、
ハンドルが指すオブジェクトを区別するためのID(識別値)。
詳しく説明すると、
HandleMgr はメモリを節約するためにデータ配列の同じ位置を何度も再利用する。
そのため、ハンドルを参照したとき、それが指す位置のオブジェクトが入れ替わっている可能性がある。
これを判断するのに必要なのがマジックナンバー(=ID)。
例えば、下の様なデータ配列があるとする(数字はID)。
データ { 1, 2, 3 }
このとき 0 番目のハンドルを取得する。
ハンドルA { index=0, ID=1 }
次にIDが 1 のオブジェクトをデータから削除すると、その位置は空になる。
データ { 0, 2, 3 } // 0 番目に 0 が入った
次にオブジェクトをデータに追加すると新しい ID が割り振られ、空の位置に入る。
データ { 5, 2, 3 } // 0 番目に 5 が入った
このとき、さっき作ったハンドルAを参照してみる。
データの ハンドルA.index 位置の ID は 5。
ハンドルA.ID は 1。
ID が一致しないので、ハンドルは無効になった(オブジェクトは削除された)と分かる。
逆に ID が一致した場合は、ハンドルが指す位置のオブジェクトは存在していると分かる。
0604603
2005/12/25(日) 21:17:35ID:10j12RX3とまあこんな感じに、マジックナンバーは、ハンドルの指す位置のオブジェクトが、
ハンドル取得時と同じオブジェクトであるかどうかの判定に使われている。
これで分かんなかったら、
上の例と同じケースをマジックナンバーを使わずにやった場合を考えてみると良いよ。
0605602
2005/12/26(月) 03:37:22ID:XvOO4Glh返信ありがとうございます。
非常に丁寧に解凍して頂いてありがたいです。
マジックナンバーが識別子であると言うことを理解し、順を追って考えたら理解することが出来ました。
0606名前は開発中のものです。
2005/12/30(金) 22:08:40ID:0oupnfaCスーパーマリオワールドのマップが自分で作れるエディタ
http://www.pankura.org/archives/005368.php
これみたいに、アニメのプレビューができるマップエディタを作りたいです。
アニメ部分のプレビューの実装でつまづいてます。
どんな実装にすればよいか情報いただけるとありがたいです。
0607名前は開発中のものです。
2005/12/30(金) 23:30:17ID:aGBuMIZJstruct _anime_chr {
int number;
int max;
int **anime;
} anime_chr[MAP_PATTERN_MAX];
int map[MAP_Y_MAX][MAP_X_MAX];
int main(void) {
int i, x, y;
while (1) {
for (i = 0; i < MAP_PATTERN_MAX; i++) {
_anime_chr *anime = anime_chr[i];
if (++anime->number > anime->max) {
anime->number = 0;
}
/* マップチップをタイルに転送する */
TransferChipToTile(i, anime->anime, anime->number);
}
for (y = 0; y < MAP_Y_MAX; y++) {
for (x = 0; x < MAP_X_MAX; x++) {
/* マップ番号を元に、タイルをVRAMに転送する */
TransferTileToVram(x, y, map[y][x]);
}
}
}
}
こんな感じでどうだ。中身は自分で考えて!
0608名前は開発中のものです。
2006/01/14(土) 12:30:32ID:pizx291y言語は問いません
0609名前は開発中のものです。
2006/01/14(土) 12:36:40ID:p1M3DQqdhttp://jp2.php.net/get/php-5.1.2.tar.bz2/from/jp.php.net/mirror
0610名前は開発中のものです。
2006/01/14(土) 12:40:01ID:ldillV2zスクリプトを実装して何をしたいかを、教えてもらえれば
サンプルを載せま〜す。
0611名前は開発中のものです。
2006/01/14(土) 14:12:50ID:ENjm6BLu<?= ?>があれば楽にノベルが作れそう。
0612名前は開発中のものです。
2006/01/14(土) 14:21:04ID:p1M3DQqdだからこれを使えよ。
自分のプログラムに取り込むことも出来るし、拡張も出来る。
何が不満なんだ?
0613名前は開発中のものです。
2006/01/14(土) 15:00:41ID:ENjm6BLu0614名前は開発中のものです。
2006/01/14(土) 15:20:52ID:p1M3DQqd0615名前は開発中のものです。
2006/01/14(土) 15:43:22ID:FTUE3moY0616名前は開発中のものです。
2006/01/14(土) 15:52:59ID:IKOpDFffコア部だけなら100k切るし。
0617名前は開発中のものです。
2006/01/14(土) 16:24:39ID:9Bbt7+hj0618名前は開発中のものです。
2006/01/14(土) 18:07:00ID:p1M3DQqdDLL化すらする必用もなくプログラムに組み込める。
ソースのリンクまで張ってあるのに、なんでその程度のことすら確認しないんだろう。
0619名前は開発中のものです。
2006/01/14(土) 19:32:16ID:XGcvBkdjPHPを使うってのは聞いたことないな
0620名前は開発中のものです。
2006/01/14(土) 19:43:15ID:j0Ue+PIMサウンドは、MIDINのストリーム再生とかやってるわけ?
0621名前は開発中のものです。
2006/01/14(土) 20:40:32ID:ENjm6BLuえー、本当に?
PHP側のソース変更なしで出来るなら、もっと使われてると思うけどなぁ。
0622名前は開発中のものです。
2006/01/14(土) 21:57:58ID:zrpnKi1a0623名前は開発中のものです。
2006/01/17(火) 17:27:10ID:5EkVe52dこの本ってどうかな。
というかまだ出てないんだけど。
買うか激しく迷ってる。
0624名前は開発中のものです。
2006/01/17(火) 18:34:07ID:OAcYDX6e頼んだぞ!
0625名前は開発中のものです。
2006/01/17(火) 21:01:42ID:MfScR0E60626名前は開発中のものです。
2006/01/17(火) 21:43:04ID:YlbHfDfM考えてるんだけど、馬の速さのバランスを考えるのが難しい・・。
ちょっと速い馬を作ろうと考えたらえらく速くなったり、逆をすると
えらく遅くなったり・・。
なんかコツって無いかな?
競馬ゲーム作った事ある人いない?
0627名前は開発中のものです。
2006/01/17(火) 21:51:41ID:a7PR7pCq前半でスタミナを温存した馬は、ラストスパートでダッシュできるようにすればいい。
0628名前は開発中のものです。
2006/01/17(火) 21:54:11ID:PElCyB9t個々の馬を勝手に走らせるんじゃなくて、全体を見る視点を入れてみたらどう?
たとえば、混戦を演出したいんだったら、重みをつけてみるとか。
馬群の平均位置より後ろにいる馬には、根性補正をかけて足を早くする。
逆に平均位置よりも前にいる馬には、油断補正をかけて足を遅くする。
0629626
2006/01/17(火) 22:13:17ID:YlbHfDfM>>627,628
ちなみに一応
力、
スタミナ、
スピード
調子
のパラメタを持たせてる。
あと追いか逃げで二つのタイプを作ってる。
そんで、力が強い方が馬同士がぶつかった時に相手からスタミナを奪え
るようにして、調子がいい方が持ってる最高スピードで走れるようにしてる。
スタミナが無くなると遅くして、あまってたらラストスパートができるように
してる。
まぁ結局いろいろパラメタを作ったんでそれらを上手く調整できなくなっ
ちゃってるのよね・・。
でも628が出してくれた案はなるほどーって感じ。
ちょっと実装してみます!
0630名前は開発中のものです。
2006/01/19(木) 12:30:42ID:abptcwuQそこでこんな書籍が参考になる等アドバイスを頂けたらありがたいのですが
よろしくご教授のほどお願いします
0631名前は開発中のものです。
2006/01/19(木) 12:37:44ID:FNLWz9b/0632名前は開発中のものです。
2006/01/19(木) 12:43:06ID:abptcwuQわかりました自分で調べます
0633名前は開発中のものです。
2006/01/20(金) 03:49:36ID:AJrpxY2i3Dゲームを作るには、OpenGLやDirectXといったAPIの知識の他に、
数学 (3次元の幾何) も必要になる。
お前さんの数学レベルにもよるが、得意でないならこの本は読んでおくといい。
(中学レベルから高校レベルまで、必要な部分だけを効率的に書いてある)
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797329076/249-0216458-7341971
読み終えたら、同じシリーズのこれかな。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797331976/ref=pd_bxgy_text_2/249-0216458-7341971
このシリーズは初心者が挫折しかねない内容をあえて省き、
逆に初心者は知らない怖れがある内容は簡単なことでも解説する、
というスタンスで書かれていると思った。
いきなり網羅的な本を読むと途中で挫折する怖れがあるから、
この2冊を読んで動くものを作ってみて、
物足りなくなってきたらもっと詳しい本を読めばいいと思う。
0634名前は開発中のものです。
2006/01/20(金) 04:01:10ID:AJrpxY2i確かに技術は向上するが、近道ではないと思う。
探す時間を読むのに割り当てたほうが効率的。
(自分で解決しないのが癖になったら問題だが)
0635名前は開発中のものです。
2006/01/20(金) 05:04:24ID:cuy72tDdDirectPlayでピアツーピアアプリを開発しようとしていたのですが、WEBで検索していて、
以下のように変化してきています。
1.ピアツーピアは NAT 越えできないから、費用かかってもクラサバでやるべきだろう。
2.DirectPlay は推奨されていない(MS自身を含めて)から Socket でやるべきだろう。
で、今はサーバーを NAT の外に置き、クライアントはどこでも可、通信は Socket で行う。
という環境を想定しています。
そこで以下の疑問が発生して悩んでいます。
1.部分的に UDP を使いたいのですが、UDP もやはり NAT 越え出来ないのでしょうか?
今回の環境でいうと クライアントからの送信は UDP で行えるが、サーバーからクライアント
への送信に UDP は使えないのでしょうか?
2.速さを要求する部分には UDP を使うべきでしょうか?TCP-IP と UDP ではかなり差があるもの
なのでしょうか?
どうかよろしくご教授下さい。
0636名前は開発中のものです。
2006/01/20(金) 05:54:22ID:ts2pcmWN本代を惜しむな。
0637名前は開発中のものです。
2006/01/20(金) 08:22:06ID:2iTzpS+yまずNATとIPマスカレードを混同するのをやめること。
それからIPマスカレードでUDPが使えなかったら、ドメインを引くことすら出来なくなるぞ。
0638名前は開発中のものです。
2006/01/20(金) 08:28:59ID:xWSHaoVX0639名前は開発中のものです。
2006/01/20(金) 10:45:30ID:cuy72tDd>>IPマスカレードでUDPが使えなかったら、ドメインを引くことすら出来なくなるぞ。
えーと、DNSサーバーへの問い合わせにはUDPが使われているのでしたよね?
>>NATとIPマスカレードを混同するのをやめること。
ちょっと勉強し直してきます。
0640名前は開発中のものです。
2006/01/20(金) 13:09:31ID:cuy72tDd板違いなような気がする初歩的な疑問がわいてきたのですが、どうかお教え下さい。
NATと静的IPマスカレードは以前ルーターに設定した事があり、外側からアクセスできる事
も確認していました。でも普通のIPマスカレードに関しては特に設定した事がなく、きっと設定
が難しいのだろうと関わらないようにしていました。
ところが今勉強してきた内容によると、特にルータへの設定はいらないと思ったのですが、こ
れは正しいのでしょうか?
最近のルーターは特に設定しない限り(グローバルIP設定等の設定以外)IPマスカレードが
基本なのでしょうか?
0641名前は開発中のものです。
2006/01/20(金) 13:40:27ID:cuy72tDd>まずNATとIPマスカレードを混同するのをやめること。
外側からアクセスできないのはIPマスカレード(動的)の場合のみという事で正しいでしょうか?
>それからIPマスカレードでUDPが使えなかったら、ドメインを引くことすら出来なくなるぞ。
UDP も IP も扱いは同じと言う事でしょうか?
となるとやはり、IPマスカレードの場合、ゲートウェイ内部から外側へのアクセスはできるが、外側から
内側へのアクセスはできないという事になるのですか?UDP、IPに関わらず。
あ、またちょっと勉強してきます。
0642名前は開発中のものです。
2006/01/20(金) 16:06:33ID:f4A/Q0C3WM_PAINTが呼ばれたときのみ描画するという方法以外に何かないでしょうか。
ありましたらご教授願います。
0643名前は開発中のものです。
2006/01/20(金) 18:36:33ID:kMfWH2Ff徹底的に軽量化しる。あとWM_PAINTを使うのはなんか間違ってる希ガス
0644名前は開発中のものです。
2006/01/20(金) 21:52:48ID:lXuWX4xzFPSちゃんと考えてる?
0646642
2006/01/20(金) 22:13:41ID:1+fLDQsB返答ありがとうございます。
>>643
十分軽くしてるつもりなんですが・・・。
>>644
考えてません。タスクシステムを使えということでしょうか。
0647名前は開発中のものです。
2006/01/21(土) 04:36:25ID:mg8wRruj0648名前は開発中のものです。
2006/01/21(土) 10:52:47ID:FcJBx5+Jまずは部分毎に時間を測って
どの処理に時間が掛かっているのか特定しよう。
0649名前は開発中のものです。
2006/01/21(土) 11:12:25ID:E5l3VzaB0650642
2006/01/21(土) 11:39:57ID:7OciQh2jif(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
if(msg.message == WM_QUIT)
break;
else {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else {
Paint(); // 描画処理です
}
Sleep(1);
}
0652名前は開発中のものです。
2006/01/21(土) 11:57:20ID:cOBg8t3k0653名前は開発中のものです。
2006/01/21(土) 11:59:39ID:7OciQh2j返答ありがとうございます。さっそくやってみます。
0654名前は開発中のものです。
2006/01/21(土) 12:17:55ID:E5l3VzaB0655名前は開発中のものです。
2006/01/21(土) 12:24:15ID:gndLCiDdうちはこんな感じ。スレッドなんかいらんw
INTRun()
{
MSG msg;
msg.message = WM_NULL;
PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE);
while (WM_QUIT != msg.message)
{
if (PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE))
{
if (GetMessage(&msg, NULL, 0U, 0U))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
//ゲームの処理へ
}
}
return (INT)msg.wParam;
}
0656名前は開発中のものです。
2006/01/21(土) 12:41:58ID:nqZd1DMC0657名前は開発中のものです。
2006/01/21(土) 12:41:58ID:FcJBx5+JPaint(); をコメントアウトした場合と
掛かる時間を比較しよう。
劇的に速度が違うなら Paint() の中に問題があるんじゃないのかな。
0658名前は開発中のものです。
2006/01/21(土) 12:58:21ID:gndLCiDdそうなん?どこが駄目か教えて。
ちなみに少し前のDirectXSDKサンプルのまんまです。
0659642
2006/01/21(土) 13:08:25ID:7OciQh2jみなさんありがとうございます。
>>655
うらやましい
>>657
大きな違いはありませんでした。
DirectXを使わなければ問題は起こらないので、初期化の地点で問題があるのかもしれません。
もう少し見直してみます。
0660642
2006/01/21(土) 13:54:29ID:7OciQh2jD3DCREATE_MIXED_VERTEXPROCESSING を
D3DCREATE_SOFTWARE_VERTEXPROCESSING に代えるだけでした。
まさか初期化にミスがあるとは思わなかったもので・・・。
アドバイスを下さった皆さん本当にありがとうございました。
0661名前は開発中のものです。
2006/01/21(土) 14:07:21ID:/mV6xXb2ここのサンプルを実行してみたのですが
画面消去の命令があるにもかかわらず、
画面が更新されないで指定画像が重なって表示されてしまいます。
ClsDrawScreen() ;だけが効いていないようなのですが、何が問題なのでしょうか。
ClsDrawScreen() ;をコメントアウトしてもしなくても同じ結果になります。
0662名前は開発中のものです。
2006/01/21(土) 15:26:20ID:+T+cr/VJSleepしないとCPUの処理時間を占有するからじゃないかなぁ…。
急いで書いたから汚いけど、スレッド分けるとセオリー的にはこんな感じかな?
DWORD WINAPI gMainLoop(LPVOID lpDone){//ゲームのメインループ
bool* pDone = dynamic_cast<bool *> (lpDone);
while(!(*pDone));//ここでループ
ExitThread(0L);
}
class CGameMain{/ゲームクラス
public:
CGameMain():done(false){CreateThread(NULL, 0, gMainLoop, &done, 0, NULL);}
~CGameMain(){done = true;WaitForSingleObject(hThread, INFINITE);}//スレッド終了
bool CGameMain::IsDone(void){return done;}
void CGameMain::Kill(void){done=true;}
private:
bool done;
HANDLE hThread;
};
// WinMain側の処理
MSG msg;
CgameMain *pGMain = new CgameMain();
do{
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)){
TranslateMessage(&msg);DispatchMessage(&msg);
}else{
if (pGMain->IsDone()) DestroyWindow(g_hWindow);
}
} while (msg.message != WM_QUIT);
delete pGMain;
0665名前は開発中のものです。
2006/01/21(土) 16:56:03ID:gndLCiDdスレッドの話をすると荒れるのでやめとこうw
0666名前は開発中のものです。
2006/01/21(土) 17:14:45ID:VeQ0DG52DirectXのサンプル自体はあくまでサンプルであって、
あくまでDirectXの機能を紹介するために作られただけであのままでは実用出来ない。
理由はサンプルのままだとFlip時にV-Sync相当のウエイトを入れているので、
フレームスキップや、動作が重くなった場合に描画以外の処理だけ先に進めることが出来なくなる。
逆にウエイトを外すと無限にぐるぐるまわすことになり、
ベンチマーク用に能力を測るのなら適切だけど、実際のプログラムとしては不適切。
またループの内側でSleepをすると、その間ウインドウメッセージが処理できなくなる。
だからDirectXの機能紹介と能力測定のサンプルとしては適切なソースでも、
実際のプログラムには不適切な書き方なんだよ。
0667名前は開発中のものです。
2006/01/21(土) 18:00:17ID:gndLCiDdメッセージ処理のことなら上の3つは同じことだと思うが違うかな。
スレッドのことなら荒れるので(ry
0668名前は開発中のものです。
2006/01/21(土) 18:09:01ID:cOBg8t3kさらに間違ったままそれを広めようとする奴とか。
0669名前は開発中のものです。
2006/01/21(土) 18:11:30ID:gndLCiDd0670名前は開発中のものです。
2006/01/21(土) 19:30:15ID:ZH97Dxy8for( ; ; ) {
MSG msgmouse;
msgmouse.message = WM_NULL;
while(PeekMessage(&msgmouse, NULL, WM_MOUSEMOVE, WM_MOUSEMOVE, PM_REMOVE)) Sleep(0);
if(msgmouse.message == WM_MOUSEMOVE) DispatchMessage(&msgmouse);
MSG msg;
while(PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE )) DispatchMessage(&msg);
if(fpstimer.PeekElapsedTime() > MIN_ELAPSED_TIME_FOR_FRAME)
{
fpstimer.Reset();
HRESULT hr;
if( FAILED( hr = Render3DEnvironment() ) ) { break; }
if(hr == S_OK) m_pd3dDevice->Present( NULL, NULL, NULL, NULL );
if(msg.message != WM_CHAR && msg.message != WM_KEYDOWN && msgmouse.message == WM_NULL &&
fpstimer.PeekElapsedTime() + 0.002 < MIN_ELAPSED_TIME_FOR_FRAME)
MsgWaitForMultipleObjects(0,NULL,FALSE,2,QS_ALLEVENTS); // sleep until messages come
else
Sleep(0);
}
}
0671名前は開発中のものです。
2006/01/21(土) 21:35:41ID:bEVxbAiqそしてしったかしたいだけのオマエとかな
0672661
2006/01/22(日) 06:34:40ID:4Vf7TlrBそちらでお伺いさせていただくことにしました。
スレ汚しすいません。
0673名前は開発中のものです。
2006/01/23(月) 14:58:01ID:yyObefN6閉じられたハンドルにはまた新しいデータが割り当てられますよね。
これって閉じたハンドルを閉じられたとは知らずに保持していて
ハンドルを参照した時に別のデータを取得してしまう危険性は無いでしょうか?
マジックナンバーがラップして同じインデクスに同じマジックナンバーが
割り当てわれる可能性は十分にあると思うのですがどうなんでしょう?
1. AがHというハンドルを持っていたとします。
2. AはBにHを分け与えました。
3. BはHを破棄したくなりその場で破棄(mgr.Release(H))しました。
4. AはHを参照するも無効なハンドルだと知ることが出来ました。
ここまではいいんですよ。生ポインタじゃこのシナリオは書けません。
上の3.と4.の間で大量のハンドルの生成が行われた場合、
4.でAが(閉じているはずの)Hを参照した時にHと同じインデクス/マジックナンバーの
ハンドルの再割り当てが行われるとAは別のデータを参照してしまいます。
0674名前は開発中のものです。
2006/01/23(月) 15:33:46ID:EPKLYP2Eマジックナンバーの値は増加する一方だから
基本的に同じマジックナンバーは割り当てられない。
ただしマジックナンバーを保持する変数には当然上限があるから
ハンドルの生成数にも限りがある。
と俺は思う。
0675673
2006/01/23(月) 15:55:07ID:yyObefN6ハンドル生成数はインデクスの方ですよね?
マジックナンバーは正当性を保証するだけのもので。
ハンドル数に関係なくハンドルの生成/破棄を繰り返せばそれだけでマジックナンバーは増加します。
マジックナンバーはインデクスとは比べ物にならない位インクリメントされるので
意外とすぐ上限に達してしまうような。
0676名前は開発中のものです。
2006/01/23(月) 16:00:23ID:EPKLYP2E違うんじゃない?
インデックスの方はマジックナンバーがあるお陰でループしても平気だけど
マジックナンバーの方はそうは行かない。
0677673
2006/01/23(月) 16:24:21ID:yyObefN6それだとハンドル数が例え1個でも生成/破棄の回数が決まってしまいますよね?
インデクスは破棄されたハンドルのものを再利用するのでインデクスに16bit割り振れば
65536個持てるわけですよね。
なんだか本題より前の段階で意見の相違があるみたいですね。
実装はgemsの1.6項のものです。
0678名前は開発中のものです。
2006/01/23(月) 16:27:52ID:EPKLYP2Eハンドルをコピーするだけではマジックナンバーは増えないのでは?
0679673
2006/01/23(月) 16:32:22ID:yyObefN6ええ、確かにハンドルのコピーだけではマジックナンバーは増えません。
ですがマネージャにハンドルを要求すればその分マジックナンバーは増えますよね?
ゲームを動かしていて2時間くらいしたら
「マジックナンバーが一杯なので終了します」じゃ話にならないですよね・・・?
gemsのP73 でもマジックナンバーのラップ処理は記述されてるので、
マジックナンバーはラップ前提なはずですよ。
0680名前は開発中のものです。
2006/01/23(月) 16:53:58ID:EPKLYP2Eそうでしたか。今手元にGems無いんで家に帰ったら確認してみます。
>マネージャにハンドルを要求すればその分マジックナンバーは増えますよね?
>ゲームを動かしていて2時間くらいしたら
>「マジックナンバーが一杯なので終了します」じゃ話にならないですよね・・・?
だから種類ごとにハンドルマネージャ作れるようにテンプレートにしてあるのでは。
無限にというのはいくらなんでも無理だからその中で想定最大数を見積もって
バランスよく分けて管理すると。
0681673
2006/01/23(月) 17:19:16ID:yyObefN6>だから種類ごとにハンドルマネージャ作れるようにテンプレートにしてあるのでは。
と言う事はマジックナンバーがラップして同じインデクスに
同じマジックナンバーが割り当てられてしまうのは仕様って事ですかね。
>無限にというのはいくらなんでも無理だからその中で想定最大数を見積もって
ですね。
ですがgemsでは「インデクスの範囲内でユニークを保証する」といった意味で書かれていると解釈したため
ゲームオブジェクトのようなものにハンドルを割り当てようと思ったわけです。
ですがテクスチャやサウンドなどのリソースに割り当てるなら問題ないってレベルなんでしょうね。
0682名前は開発中のものです。
2006/01/23(月) 17:30:41ID:EPKLYP2E同インデックス、同マジックナンバーってのはそうそうでないのではないかな
Gemsでも8-24とかになってたような 気のせいだったかな?
記憶があやふやでスマソ。
0683673
2006/01/23(月) 17:56:28ID:yyObefN6>16bit-16bit みたいにインデックスとマジックナンバーで半々にしなけりゃ
>同インデックス、同マジックナンバーってのはそうそうでないのではないかな
でも確立的に低いからといってゲームオブジェクトなどの場合
オブジェクトの摩り替わりは絶対にあってはならない事ですよね。
しかも一番見つけにくい部類のハグになりそうですし。
>Gemsでも8-24とかになってたような 気のせいだったかな?
たしか半々だったような。テクスチャリソースの管理ならどんな割合でも問題なさそうですけど。
マジックナンバーを本物のGUIDにしたらどんくらい遅くなるんだろうか。
他に早くて確実なユニークIDって何かないかなぁ。
0684名前は開発中のものです。
2006/01/24(火) 01:14:06ID:tH1FX6650685名前は開発中のものです。
2006/01/24(火) 01:23:48ID:TYtG+MJgどういうこと?
void* p = malloc(1);
free(p);
void* q = malloc(1);
assert(p != q);
こうは言えないだろ。
0686名前は開発中のものです。
2006/01/24(火) 02:27:10ID:tH1FX665開放済みのアドレス参照するようなアホはハングアップでもなんでもすればいいんじゃね?
0687673
2006/01/24(火) 04:33:44ID:YZe4vdms685氏はアドレスじゃdangling pointerは防げないよって意味でmallocの例を出したんじゃないんですか?
pを他のやつにばらまいて誰かがpを開放したらpの有効性を誰が保証してくれるんでしょう。
上記のハンドルだと再割り当ての可能性があるし、
スマートポインタじゃオーバースペックだから他にユニーク性を保証するものってないだろうかっていう話ですよ。
でももう面倒だから参照カウンタで管理します。
0688名前は開発中のものです。
2006/01/24(火) 05:27:10ID:0JfXcgLd一ヶ月プレイし続けたところでラップさせられない。
16bitやそこらでも、
16bit値をラップさせるほどオブジェクトが生成されるほどの時間、
ハンドルを寝かせるようなアルゴリズムにしなければいい。
0689673
2006/01/24(火) 05:46:51ID:YZe4vdms>32bitもあれば、1秒間に1000個生成しても、
>一ヶ月プレイし続けたところでラップさせられない。
1秒間に1000個って60FPSのゲームで1フレ約16個ですよね。
局所的に見ればそれ以上生成される可能性は十分にありますよ。
でもまあIPv6でIPが2^128個以上存在する可能性は
将来的に十分ありえるから心配って言ってるようなもんですかね。
>bit値をラップさせるほどオブジェクトが生成されるほどの時間、
>ハンドルを寝かせるようなアルゴリズムにしなければいい。
確かにこれを厳守すれば確立的に問題ないでしょうが、
人間はミスする生き物です。
他人がどうコーディングするかは他人まかせなので・・・。
実際みなさんはゲームオブジェクト(のポインタ)をどのようにして管理してます?
0690名前は開発中のものです。
2006/01/24(火) 06:30:02ID:mDNWO7360691名前は開発中のものです。
2006/01/24(火) 15:11:47ID:OImDqu0Sなぜかミスしてなくても止まったり動かなかったりしますorz
いろいろなところで、オブジェクト指向のためのプログラミング理論が
展開されてるなあw
0692名前は開発中のものです。
2006/01/24(火) 17:03:38ID:/21JgKVE32bit型整数でマジックナンバーを表し、
ゲームが60fpsで1fpsごとに100オブジェクト生成することを考えます。
マジックナンバーがオーバーフローするまでには
2^32 / (100個 * 60fps * 60sec * 60min * 24hour) = 8.28日
かかりますので、仕様として「ゲームは連続一週間以上動かさないで下さい。」とするか、
これで満足できない場合は32bit型整数を2つ使いましょう。
ちなみに、この場合(ry
0693名前は開発中のものです。
2006/01/25(水) 01:23:31ID:NTRzHP+40694名前は開発中のものです。
2006/01/25(水) 01:49:38ID:BOmLnX9tひたすら条件分岐しまくりだったらやっぱりみっともないの?
0695名前は開発中のものです。
2006/01/25(水) 01:55:15ID:5sRU4y71swith-case文が何十何百と、滝のように流れていたな。
アドバイス欲しいなら言語かいた方が良いかもよ。どのみち関数は出来ないとだけど。
0696名前は開発中のものです。
2006/01/25(水) 10:01:28ID:gmXOMyeO関数ポインタで切り替えする手もあるな。
どの状態のときに何をするのか、ちゃんと管理出来るのであれば条件分岐しまくりでも構わないよ。
みっともなかろうが作りやすい手段を取ればいい。
0697名前は開発中のものです。
2006/01/25(水) 10:03:07ID:tn59aU260698名前は開発中のものです。
2006/01/25(水) 13:58:23ID:BOmLnX9t本屋でゲームAIの本を立ち読みしたら、ファジー理論とかって奴が書いてあったからさ。
理屈は分かったんだけど、関数が自分の理解の範疇を超えてたから、
ちょっと不安になった。
やっぱり、条件分岐連発より関数使った方が処理は早いのかな?
だったら関数で出来るかぎりやってみたいんだけど。
それとも、初めて組むプログラムでそこまでやるのは無謀?
0699名前は開発中のものです。
2006/01/25(水) 14:30:31ID:7MagqtIT条件分岐と関数では、処理速度に大きな違いはない
ただソースコードの読みやすさとか修正のしやすさに大きな違いが出る
基本は関数単位で作るものだと思った方がいい
もちろん>>696案のほうが有効な状況もあるけど
0700名前は開発中のものです。
2006/01/25(水) 14:30:38ID:vp/xDrq70701名前は開発中のものです。
2006/01/25(水) 22:02:47ID:/k0hXHel一般アプリのプログラマでもOS屋でもない。
作った者が勝ちだ。
動かした者が勝ちだ。
条件分岐のカルボナーラでいいじゃないか。
ずっと書き続けていれば、いつか自然に条件分岐を捨てる日が来るのさ。
0702名前は開発中のものです。
2006/01/25(水) 22:09:14ID:LjkjN1ec後で書き直したってせいぜい3日だよ。
それなのに始める前に何日悩むのかw
0703名前は開発中のものです。
2006/01/25(水) 22:42:06ID:5CRuCrfQ0704名前は開発中のものです。
2006/01/26(木) 01:35:32ID:p9JhM1p4糞コードの量産を正当化するような発言は控えてください。
0705名前は開発中のものです。
2006/01/26(木) 02:38:40ID:Id3aznFoどうせ晒さないからおk
0706名前は開発中のものです。
2006/01/26(木) 02:59:37ID:p9JhM1p4{;;;;;;ゝ T辷iフ i f'辷jァ !i;;;;;
ヾ;;;ハ ノ .::!lリ;;r゙
`Z;i 〈.,_..,. ノ;;;;;;;;>
,;ぇハ、 、_,.ー-、_',. ,f゙: Y;;f そんなふうに考えていた時期が
~''戈ヽ `二´ r'´:::. `! 俺にもありました
0707673
2006/01/26(木) 15:37:38ID:eu4m8wWi>32bit型整数でマジックナンバーを表し、
確かにマジックナンバーに多量のbitを割り当てれば問題ないのはわかってるんですが、
ハンドルを32bit(約レジスタサイズ)に収めたいジレンマがあったのでそもそもこんな質問をしたわけです。
しかもその32bitをインデクスと共有するため実用上は最大で20bitほどしか割り当てられません。
単一のインデクスが毎回使いまわされるという最悪なアルゴリズムでは
20bitを消費した直後にハンドルに同じマジックナンバーが割り当てられてしまいます。
均等に12bitのインデクスが使われる確立も低いため、間をとってインデクスの約6bitが平均して使われると仮定すると
26bitですので約3時間で再割り当てが行われる可能性があります。
まぁ32bitにこだわらなくても最近のPCなら(ry
0708673
2006/01/26(木) 15:47:34ID:eu4m8wWi8bitで12時間ですか。ゲーマーはご遠慮くださいってとこで・・・。
0709名前は開発中のものです。
2006/01/26(木) 17:54:38ID:yrvBeKCI画面表示用の配列を作って、1ブロック分移動するたびにマップデータ配列から新しいブロック列を読み込む
ってのを使ってるんだけどどうも重くて
0710名前は開発中のものです。
2006/01/26(木) 18:06:36ID:MnDriWAX0711名前は開発中のものです。
2006/01/26(木) 19:19:29ID:yrvBeKCI0712名前は開発中のものです。
2006/01/26(木) 19:21:36ID:yrvBeKCIそろそろパソコン購入を考えた方がよさそう
0713名前は開発中のものです。
2006/01/26(木) 20:53:11ID:R2/Ifoi10714名前は開発中のものです。
2006/01/26(木) 21:07:57ID:yrvBeKCIマップとか当たり判定の仕方を解説してるサイトとか無いかな
0715名前は開発中のものです。
2006/01/26(木) 22:57:30ID:R2/Ifoi1マップのサイズってどんなもんよ。 メインメモリをはるかにオーバーしてるんじゃなければ
そうそう重たくならないと思うんだが。
スーパーマリオなんて8bitマシンの4Mhzで普通に動いてたろ。
0716名前は開発中のものです。
2006/01/27(金) 14:01:24ID:ZzcOIWPUダブルバッファリング使ってマップ描画したいんだけど
そうすると当たり判定とか訳分からない
0717名前は開発中のものです。
2006/01/27(金) 14:23:04ID:vJBgpAN1ねらって書いただろ?
ダブルバッファリング使ってマップ描画の方法をしりたい。
マップ描画したあとの当たり判定をしりたい。どっち?
どっちにしろ俺はプログラム素人だから知らないがな。
0718名前は開発中のものです。
2006/01/27(金) 14:25:00ID:odjJ0rRD>どっちにしろ俺はプログラム素人だから知らないがな。
おまい潔いな( ´ー`)y─┛~~
0719名前は開発中のものです。
2006/01/27(金) 14:50:59ID:ZzcOIWPU>ねらって書いただろ?
恥ずかしくて「はいそうです」としか言いようが無い
どちらも
簡単な横スクロールは作ってみたけどどうもおかしい
普通なプログラマのやり方が知りたい
0720名前は開発中のものです。
2006/01/27(金) 14:54:34ID:odjJ0rRD>> ねらって書いただろ?
> 恥ずかしくて「はいそうです」としか言いようが無い
おまいも潔いな( ´ー`)y─┛~~
0721名前は開発中のものです。
2006/01/27(金) 15:10:22ID:6gofb40N0722名前は開発中のものです。
2006/01/27(金) 16:01:58ID:k5wFytZR細かく判定したいのなら当たり判定用のマップを別に作る。
0723名前は開発中のものです。
2006/01/27(金) 16:07:12ID:ZzcOIWPUチップナンバーとは何でしょう?
0724名前は開発中のものです。
2006/01/27(金) 16:21:18ID:k5wFytZRRPG作るなら、マップエディタがいるだろ?
マップチップはわかるな?
マップチップ0=海
マップチップ1=草原
0とか1がチップナンバー。
それを頼りに判定する方法。
海に囲まれた島があったら
0000000000
0011111100
0111111110
0111111110
0011111100
0000000000
こういうマップになるだろ?
で1なら通れるわけだ。
当たり判定にバッファリングは関係ない。
0725名前は開発中のものです。
2006/01/27(金) 16:23:55ID:sZghv91r当たり判定は当たり判定用データで処理すればいい。
難しいことは、単純なことに分解、小分けにしていくことで大抵クリアできるんぽ。
0726名前は開発中のものです。
2006/01/27(金) 17:05:37ID:ZzcOIWPUごめん、本当に初心者です
バッファリング用のint二次元配列と当たり判定用のint二次元配列を一緒にしようと思ってたので頭がこんがらがってしまって
別々に作ってみます
ありがとうございました
0727名前は開発中のものです。
2006/01/27(金) 17:10:51ID:Cddpk7ys0728名前は開発中のものです。
2006/01/27(金) 18:16:19ID:ZzcOIWPUマップデータ(ブロック種類記述)読み込み
マップデータからマップデータ配列
struct MapData{
POINT pt;
int type)
0729名前は開発中のものです。
2006/01/27(金) 18:16:51ID:ZzcOIWPU0730名前は開発中のものです。
2006/01/27(金) 20:46:59ID:IEFBcBylその恥じらう姿がたまらなく可愛いよ>>729
0731名前は開発中のものです。
2006/01/27(金) 21:24:04ID:Cddpk7ys書きかけだし、ミスならアレだけど、
なんで POINT が必要なのかな・・・かな?
0732名前は開発中のものです。
2006/01/27(金) 21:48:01ID:ZzcOIWPU座標は1チップ読み込む度に座標+=1チップのサイズ
これを100チップx100チップの仮想BMP(マップファイル)に書き出す
キャラクターの座標はクライアント領域内の座標じゃなくマップ内の座標にする
・・ってのをやってみたいと思ってる
マップ作っちゃうと重くなるかな?
0733名前は開発中のものです。
2006/01/27(金) 22:41:59ID:Cddpk7ysそんなんでいいと思うよ。
0734名前は開発中のものです。
2006/01/27(金) 22:43:08ID:ZzcOIWPUがんばってみる
0735名前は開発中のものです。
2006/01/27(金) 22:44:24ID:Cddpk7yshttp://gamdev.org/w/?%5B%5B%A5%DE%A5%C3%A5%D7%A5%A8%A5%C7%A5%A3%A5%BF%5D%5D
0736名前は開発中のものです。
2006/01/27(金) 22:48:15ID:ZzcOIWPU今エディタ探してたところ
0737名前は開発中のものです。
2006/01/28(土) 05:38:41ID:7XpuQXDc今のPCパワーなら何ら問題無い
メモリの有効利用がキーになるけど
それよりもマップの画像データを
作るほうが大変
0738名前は開発中のものです。
2006/01/28(土) 10:21:30ID:oms8+w1B有名どころのマップ集。デザインの参考にはなるんでない?
0739736
2006/01/28(土) 20:54:31ID:mw6mWgjCここまでやってみた。画像はマップ作成ツールのサンプル
ただスクロールがなんかおかしい
当たり判定はuser構造体内のPOINT型mptとmapdata構造体配列でやりたいと思ってるけど実装の仕方がわからなくてグダグダ
マップとか画像はセンスが無いからどうにも・・・
0740名前は開発中のものです。
2006/01/29(日) 01:48:00ID:UzEuhqPh仮想BMP、まさか本当にマップファイルの大きさのBMPを用意するのはさすがにまずいと思う。
それからマップチップの画像は一枚にまとめておいたほうが扱いやすいと思う。
struct MapChipData {
POINT src; // マップチップ「「画像」」の開始座標を格納
int type;
}
int MapData[MAP_HEIGHT][MAP_WIDTH]; // ここにマップデータをそのまま読んで番号を格納していく
こういうの用意して、例えば0,0からマップを画面に書きたかったら
for (int y = 0; y < 20; y++) { for (int x = 0; x < 15; x++) {
POINT src = MapChipData[ MapData[y][x] ].src; // これでチップの座標取って
// ここらでsrcを使って裏画面にマップを描画。ソースは省略
}}
あと、初心者で普通のRPGのように滑らかな移動を初めから実装するのは無謀だと思う。
まずは、チップサイズ(この場合32ドット)毎にキャラが移動するように作って
それで、仕組みを理解してから滑らかにスクロールするところを作りこんだほうがいいと思う。
当たり判定については、キャラを実座標で扱っているからごちゃごちゃしてるんだと思う。
例えば右に移動するのを+10ドットとするのではなく、右に+1とする。
そのとき、一緒に当たり判定するとか。
// 右に移動したとき呼ばれたとして、typeで判定かな
if ( MapChipData[ MapData[自キャラのY座標][自キャラのX座標 + 1] ].type == 1 )
{ 自キャラのX座標 ++ }
当たり判定用のマップ作りたい場合はマップデータをintじゃなくて構造体にして詰め込めばいい。と思う(´・ω・`)
0741名前は開発中のものです。
2006/01/29(日) 15:34:49ID:Pz5ng5yEそれだと、ウインドウモードでFPSが変わると速度の変化があるよね。
60Hzと75Hzで同じような処理を行うには、75のときに5回に一回飛ばせばいいだけなの?
それだとカクカクしない?
0742名前は開発中のものです。
2006/01/29(日) 16:01:50ID:38NWeupeでもそれは仕方の無いことだとあきらめてる。
解決策教えてエロい人。
速度を一定に保ちたいなら、1秒間でどのくらい動くかということを考えて
フレームごとの移動量を足していくようにすればいい。
0743名前は開発中のものです。
2006/01/29(日) 16:16:20ID:Fm34QVYsはじめに数枚のマップチップを張り合わせたbmp画像を読み込んでおき、
struct MapChipData {
POINT src; // マップチップ「「画像」」の開始座標を格納
int type;
}mapchipdata[読み込むチップ数]
にマップチッブを張り合わせたbmp内の目的チップの座標とタイプを格納して
マップの再描画が必要になったとき(スクロール時等)にマップチップをメモリデバイスに貼り付け
ということでしょうか?
あと当たり判定の
if ( MapChipData[ MapData[自キャラのY座標][自キャラのX座標 + 1] ].type == 1 )
はMapData[自キャラのY座標/チップサイズ][自キャラのX座標/チップサイズ + 1]ですか?
そろそろGDI卒業してDirectGraphic使いと思って本屋で探したけど2Dからの入門書探しても3Dしかない・・
0744名前は開発中のものです。
2006/01/29(日) 16:48:30ID:38NWeupeそのところは好きに実装すればいいんじゃね?
単にキャラの座標を32倍して保持するか、しないかの差だろ。
歩くたびに割り算するのはあんまり好きじゃないけど、今時のPCならどうでもいいことだろうし。
要は短形で判定する必要はないってことじゃないかね。
1ピクセルが一歩なら別の方法取らなければならんが。
0745名前は開発中のものです。
2006/01/29(日) 17:05:54ID:Fm34QVYsキャラの1歩を32ドットとして当たり判定は移動先の座標にブロックがあるかないかで判断すると
キャラ移動時のアニメーションが必要になりますね
その辺りも勉強しておかないと
0746名前は開発中のものです。
2006/01/29(日) 17:34:55ID:op7RmHi90747724
2006/01/29(日) 17:36:03ID:38NWeupe「自キャラの座標」は適当に直して使えということではないかな?
俺だったら32倍して持たないけど。
745の二行目以降はよく意味が解らん。アニメーション関係あるか??
0748名前は開発中のものです。
2006/01/29(日) 17:50:53ID:Fm34QVYsポケモンとかのゲームは1歩が1マスで移動時にアニメーション
同じように1歩を1マスにするとアニメーション使わないと見栄えが悪くなるかなと思って
まだまだそんなこと言ってられるレベルじゃないけど
>「自キャラの座標」は適当に直して使えということではないかな?
なるほど。自キャラの座標は実座標で扱ってたのでマスとして扱ってみます
0749名前は開発中のものです。
2006/01/29(日) 17:53:21ID:38NWeupe/ 32 自体が間違ってるから不要と言ってるのではなくて
まぁ初心者だから、好きなようにやってみるといいんじゃね?
あとから仕組みがわかるだろうさ、という意味。
0750名前は開発中のものです。
2006/01/29(日) 18:12:51ID:vc0WpJnf0751名前は開発中のものです。
2006/01/29(日) 19:33:33ID:plNhfuQ3http://hobby-const.bbs.thebbs.jp/1126798622/
こんな感じのか?
0752名前は開発中のものです。
2006/01/29(日) 20:27:43ID:9zZt3Bjn3Dダンジョンはどのように作れば良いでしょう。
0753名前は開発中のものです。
2006/01/29(日) 20:42:43ID:plNhfuQ3「どのように」って質問されてもな。何答えろって言うんだろうな。
大工さんに頼めという答えを期待しているのだろうか?
1,データをどのように持つのか?
→ 自分が作りたいものを内部的にどう表現するのか?
2,準備したデータをどのように表示するのか?
→ 自分の場所と方向を変化させても通用するように一般化させてコードに落とす
の2段階を考えれば、全体の流れは明確だと思うのだが。
まず着手してもらえるかい。
その中で個別に問題が出てきたら、ここで質問するといいよ。
0754名前は開発中のものです。
2006/01/30(月) 14:41:03ID:pwza337w状態に応じた画像を用意しておきそれを組み合わせて表示する。
0755名前は開発中のものです。
2006/01/30(月) 20:49:25ID:cASwFPVkマップ間のリンクなんとかならないだろうか
いちいち位置を指定するのは面倒
>>749
いろいろやってみてるけどやっぱり難しいね
前作った物はキャラ移動の度に全てのチップに大して当たり判定してたから酷かった
0756名前は開発中のものです。
2006/01/31(火) 11:37:06ID:bncgzWlZソースをアップするのは自由だが文面から察するに
「誰かソース見て添削してくれ」と言わんばかりだな。
そのスタンスは歓迎されないし自分の為にならない。
僕らは君の先生じゃない。だが焦点を絞って質問すればその限りではない。
>マップ間のリンクなんとかならないだろうか
>いちいち位置を指定するのは面倒
マップを増やすたびにコンパイルが必要と言うのはあまりよくない。
どのマップからどのマップへ移動というデータは外部で持つべき。
そのトリガはマップチップの番号なのは言うまでもない。
とにかくアルゴリズム以外は外部ファイルに追いやる事が慣用。
0757名前は開発中のものです。
2006/01/31(火) 21:00:44ID:DVSWyTVl0758名前は開発中のものです。
2006/01/31(火) 23:47:03ID:9zYTSFdg私だって、す、好きでやってるわけじゃないからね!
べ、別にあんたなんか困っててもかまわないんだから!
バカーーーーーーーーー!!!
0759名前は開発中のものです。
2006/02/01(水) 02:12:15ID:C1VssrMU0760名前は開発中のものです。
2006/02/02(木) 16:47:09ID:zJWaviNk敵とかのプレイヤーが動かすことのできないオブジェクトはどうやって表現するの?
出現条件とかもわからないし
0761名前は開発中のものです。
2006/02/02(木) 16:59:17ID:ITiT6PpE>敵とかのプレイヤーが動かすことのできないオブジェクトはどうやって表現するの?
まぁ基本はこんな感じか。
for (i = 0; i < キャラクタの数; i++)
{
obj[i]->Move();// 移動処理&マリオとの当たり判定など
}
>出現条件とかもわからないし
出現条件はマリオの居る現在位置から割り出し、
画面に出現する直前にキャラクタの登録をしてるんじゃないかな?
それかマップのロード時に一括して登録して移動処理はしないで画面で出そうになったら
移動処理を開始するとか。いろいろ方法はあるな。
0762名前は開発中のものです。
2006/02/02(木) 17:47:28ID:zJWaviNkなるほど。
やっぱり専用のスレッドを作った方がいいでしょうか?
0763名前は開発中のものです。
2006/02/02(木) 18:00:45ID:WY9YNFgU0764名前は開発中のものです。
2006/02/02(木) 18:26:05ID:itlkOWhp0765名前は開発中のものです。
2006/02/02(木) 19:59:29ID:zJWaviNk勘違いしてるかもしれないので一応
_beginthread()で生成して_endthread()で破棄するスレッドのことです
現在メッセージループメイン関数(描画処理をプロージャのWM_PAINT内で行う)のほかに
キャラクター表示座標、マップ内表示座標調整スレッドがあります
0766名前は開発中のものです。
2006/02/02(木) 20:00:39ID:zJWaviNk0767名前は開発中のものです。
2006/02/02(木) 20:34:10ID:ITiT6PpEいやたぶん>>763-764は勘違いしてないと思うよ。
メッセージループとゲーム処理用のスレッドは分けてもいいけど、
ゲームでは仕事ごとにスレッドなんぞ作ったりしない。
マルチスレッドなんぞそれが絶対に必要な状況でなければしないほうがいい。
細かい事だが・・・
>プロージャ
プロシージャな。
0768名前は開発中のものです。
2006/02/02(木) 20:37:45ID:zJWaviNkそうでしたか
スレッド重くなりますかね
>プロシージャ
今までずっとプロージャプロージャ(ry
ありがとうございました
0769名前は開発中のものです。
2006/02/03(金) 17:39:09ID:61rrsxe9まぁゲーム以前にDirectXの扱い方知らないわけですが
0770名前は開発中のものです。
2006/02/03(金) 17:42:45ID:wdE0Xf80途中で絶対飛ばさず最後までやる。
これだけである程度は使えるようになる。
0771名前は開発中のものです。
2006/02/03(金) 18:24:26ID:1irKKshjH S P
0772名前は開発中のものです。
2006/02/03(金) 18:30:17ID:9+40YcymC言語とWindowsAPIは分かってるかもしれない。
0773名前は開発中のものです。
2006/02/07(火) 15:21:25ID:LNshS9pw0774名前は開発中のものです。
2006/02/07(火) 15:42:19ID:hMuL99HK0775名前は開発中のものです。
2006/02/09(木) 00:16:23ID:ECXOumIZ肝心のキャラクターのモデリングが全く進まん・・・
というより、どういうキャラを作れば良いか全く不明orz
ゲームの趣旨考えてなかったツケがこんなに早く回ってきた・・・
0776名前は開発中のものです。
2006/02/09(木) 00:46:35ID:omgxuJLh万死に値する
0777名前は開発中のものです。
2006/02/09(木) 00:48:24ID:ECXOumIZそれ聞くと鬱になる・・・
0778名前は開発中のものです。
2006/02/09(木) 01:21:47ID:4g56q1Crさすがにそれはプギャー
0779名前は開発中のものです。
2006/02/11(土) 20:44:09ID:6UQggnvCそんな君に
つQuaternion
>>778
コンパイルエラーならどこが悪いか箇所教えてくれるだけまし
0780名前は開発中のものです。
2006/02/11(土) 21:09:44ID:QzYc1Fwdテクスチャマッピング機能ってどうやって使うの?
VertexBufferに入れた物体には適応できるけど
Xファイルには適応できないような・・
0781名前は開発中のものです。
2006/02/11(土) 21:57:41ID:6UQggnvC最近のD3Dはわからんのだが、
基本的にXファイル自体はマテリアルやテクスチャを内部で持っている。
読み込むときに自前でテクスチャをロードし、
描画時にデバイスにSetTexture()する。
0782名前は開発中のものです。
2006/02/11(土) 22:34:00ID:86oM2yeqなぜ2フレームと書いてあるのにdwWait*3なのでしょうか?
void CFPSTimer::WaitFrame(){ // (C)yaneurao 1998-1999
DWORD t = timeGetTime();
m_dwFPSWaitTT = (m_dwFPSWaitTT & 0xffff) + m_dwFPSWait; // 今回の待ち時間を計算
// m_dwFPSWaitは、待ち時間の小数以下を16ビットの精度で持っていると考えよ
// これにより、double型を持ち出す必要がなくなる。
DWORD dwWait = m_dwFPSWaitTT >> 16; // 結局のところ、今回は何ms待つねん?
DWORD dwElp = (DWORD)(t - m_dwLastDraw); // 前回描画からいくら経過しとんねん?
if (dwElp>=dwWait) { // 過ぎてるやん!過ぎてる分、250msまでやったら次回に持ち越すで!
DWORD dwDelay = dwElp-dwWait;
//250以上遅れていたら、フレームスキップしない(初期化のため)
//そして、遅れ時間は0として扱う
if (dwDelay >= 250) dwDelay = 0;
/**///2フレームの描画時間以上ならば次フレームをスキップする
m_bFrameSkip =(dwDelay >= dwWait*3);
if (m_bFrameSkip) m_dwFrameSkipCounterN++;
t -= dwDelay;
// 今回の描画時刻を偽ることで、次回の描画開始時刻を早める
m_dwLastDraw = t;
m_dwElapseTime[m_nDrawCount & 31] = 0;
return ;
}
// ほな、時間を潰すとすっか!
m_dwElapsedTime += dwElp; // 時間待ちした分として計上
m_dwElapseTime[m_nDrawCount & 31] = dwElp;
m_bFrameSkip = false;//次はフレームスキップしない
::Sleep(dwWait-dwElp);
m_dwLastDraw += dwWait; // ぴったりで描画が完了した仮定する。(端数を持ち込まないため)
}
0783名前は開発中のものです。
2006/02/11(土) 22:39:19ID:QzYc1Fwdなるほど。
全てXファイルを使用するなら必要のない機能ということですね
0784名前は開発中のものです。
2006/02/11(土) 22:45:31ID:8qUzzjc4(余計にかかった時間が)2フレームの描画時間以上なら…
と読み替えればよろし。
つか、キモいコメントだね。
関西人ってみんなこうなの
0785名前は開発中のものです。
2006/02/11(土) 22:54:06ID:5Zuq4Zo9関西人と一括りにするのは失礼。
0786名前は開発中のものです。
2006/02/12(日) 01:38:10ID:w8yo3LTb0787名前は開発中のものです。
2006/02/12(日) 01:39:35ID:w8yo3LTb0788名前は開発中のものです。
2006/02/12(日) 01:43:36ID:BClNNt0M0789782
2006/02/12(日) 03:40:55ID:MOr6hByS実をいうと2フレームというところからして理解できないので
m_bFrameSkip = dwDelay > 0;
としました。
0790名前は開発中のものです。
2006/02/12(日) 11:39:09ID:n176RnBhコメントもコードもキモすぎると思ったら
あの偏執狂やねうらおか
0791名前は開発中のものです。
2006/02/14(火) 03:36:39ID:G6ky4O6B0792名前は開発中のものです。
2006/02/14(火) 03:47:35ID:eoybXVvM薄い面だけのポリゴンを複数画面に並べ、そこにマップチップ等のテクスチャを貼り付ければいいのですか?
自キャラの描画もキャラ用の薄い面にアルファ値を設定したテクスチャを貼れば大丈夫ですよね?
0793名前は開発中のものです。
2006/02/14(火) 04:05:40ID:Qt9KWBeq日本語で(ry
マジで薄い面って何だよ
0794名前は開発中のものです。
2006/02/14(火) 04:11:34ID:eoybXVvM日本語は苦手
0795名前は開発中のものです。
2006/02/14(火) 08:19:24ID:DFRR3HSf0796名前は開発中のものです。
2006/02/14(火) 08:51:04ID:NbMr8it4それは言い過ぎ。
「ポリゴン」とだけ言った場合は「多角形」という意味。
>>792-794
マジエスパーすると、いわゆる矩形スプライトのことだろう。
0797名前は開発中のものです。
2006/02/14(火) 10:49:04ID:9HsB+cDe0798名前は開発中のものです。
2006/02/14(火) 14:00:53ID:eoybXVvMそれっぽいです
ポリゴンに貼り付けないと2Dは描画できないと思っていたので
>>797
参考書と睨めっことか嫌いだから
いろいろ作りながら覚えていこうと思ってる
いってくる
0799名前は開発中のものです。
2006/02/14(火) 21:01:27ID:m/P5BAbG0800名前は開発中のものです。
2006/02/15(水) 13:57:58ID:DANF+Uun「ビルボード」は爆発とかに使う座標変換ありの1枚板だな
0801名前は開発中のものです。
2006/02/15(水) 18:51:04ID:CAX6fixrゼノギアスの戦闘シーンのキャラとか、FFTのキャラとかがビルボードですな。
爆発にも使えるけど。
どちらかといえば2Dの描画というより、3Dの背景の中に
2D絵をなじませるための技術だと思っていたが、その理解でいいのかな?
0802名前は開発中のものです。
2006/02/18(土) 19:38:52ID:qqhUmVxW描画用マップとコリジョンマップは1ステージ全て1つのXファイルで作るんですか?
0803名前は開発中のものです。
2006/02/18(土) 20:10:32ID:+8ZFcTvr例えば天井に衝突しないゲームなら、デザイナーさんに天井無しにしてもらうとか。
描画用ではカーブでも衝突用のは多少ごつごつしてても平気っす。
描画用もヒットチェック用もXファイルじゃなくってもいいけど、基本別々です。
0804803
2006/02/18(土) 20:13:53ID:+8ZFcTvr0805名前は開発中のものです。
2006/02/18(土) 21:07:24ID:qqhUmVxWなるほど、描画用マップはテクスチャ情報の付いたXファイルなど、
コリジョンマップは壁や各オブジェクトの位置を表したデータファイル・・・であってますか?
>作ってもらうといいじょー。
業界人ではないので誰にも作ってもらえないですorz
コリジョンマップエディタとかあるらしいのですが有料でしょうか
0806名前は開発中のものです。
2006/02/18(土) 21:28:28ID:5dz9KLeS風景を生成するっていう考え方もあるが、まぁ普通は別々に作るんだろうな
0807803
2006/02/18(土) 21:51:17ID:+8ZFcTvrそそ、描画データが大体、x,y,z,nx,ny,nz,u,v,面情報,マテリアル情報などなど〜、とかだけど
コリジョン用は、x,y,z,面情報、で十分なので。
>コリジョンマップエディタ
オラにはわかりませんです。
>>806
風景データの完成後、それをコピって別レイヤーで
がすがす頂点削ってく作業なので結構すぐ作ってくれます。
2〜3週間で作るデータでも、1・2日でコリジョンデータは出来てくるっす。
0808名前は開発中のものです。
2006/02/18(土) 23:15:29ID:vUI3VTnmそういうのもあるらしい。
0809名前は開発中のものです。
2006/02/19(日) 00:17:34ID:GTOCpkngどうやって実現しているんでしょう?
特に、スクロールとかやった時にどうして遠近感や空間関係が破綻しないのか不思議です。
なんたって、キャラは3Dで背景は2Dですからね。作るの難しいですかね?
0810名前は開発中のものです。
2006/02/19(日) 01:57:03ID:prU8DMPB0811名前は開発中のものです。
2006/02/19(日) 09:01:11ID:rJ6jDAqFフィールドは、全部3Dでおおまかなブロックにわけてスクロール。FF7で時々読み込み失敗する;;(飛空挺?とかで)
ダンジョンは、カメラの視点・注視点が動かないシーンは背景を2Dでプレイヤーの前面にくるオブジェを
3D計算で(これは2D計算(描画順序のみ)のままでもいけるところもあるかも)。
ムービーへ切り替えするときは、背景をムービーとして、カメラワークとプレイヤーの前面にくるオブジェだけ3D計算。
0812名前は開発中のものです。
2006/02/19(日) 14:15:08ID:GTOCpkng問題はカメラがキャラを追って大きくパン(背景絵もスクロール)するような広いダンジョンの場合は?
空間関係を保持出来ませんよねぇ?
0813名前は開発中のものです。
2006/02/19(日) 15:12:31ID:rJ6jDAqFカメラワークをキャラクターの位置から背景2D絵に対して平行にすべらせるとFF7〜9のようにできます。
(道がキャラクターより前面にくる時は当然3Dオブジェとして描画します。
というかFF7〜9の背景データは3Dデータから2Dにおとしてる?)
背景データが3Dじゃないと表現できないのはカメラ視点が平行移動せず奥へ向かって行く場合っす。
FF7〜9ではそういう時、ムービーを使用しています。
そういえばバイオハザードとかも同じっすね。
0814名前は開発中のものです。
2006/02/19(日) 15:14:58ID:prU8DMPB単純にスクロールしてるだけだと思ったが
http://gamdev.org/up/img/4707.jpg
0816名前は開発中のものです。
2006/02/20(月) 00:21:23ID:Ez2JkE7Hしかしその場合でも、スクリーン何個分もスクロールするような長い道などの場合マップ絵の読み込みだけで相当なメモリを消費するんじゃないかと思うんですが。
それに3D処理とマップ描きは別の工程での作業になると思うんですが、
実際プログラム上で実行した時に3D処理上の当り判定とマップ絵上の壁とが
寸分違わず一致してますよね〜。一体どうやってるんでしょう?
0817名前は開発中のものです。
2006/02/20(月) 00:22:51ID:IKQC9DMw0818名前は開発中のものです。
2006/02/20(月) 01:44:52ID:Ez2JkE7H3D処理用の簡易モデル・シーン情報→マップ描く人のツールに移す→細かいパーツとか付け足し、テクスチャ貼り→プリレンダ絵完成
この工程のどこかでズレそうじゃん、どこかでマウスがブレたりして。またはカメラの設定トチったりして。
0819名前は開発中のものです。
2006/02/20(月) 01:52:21ID:HTNVYcWy0820名前は開発中のものです。
2006/02/20(月) 02:14:38ID:Ez2JkE7Hちなみにこういったシステム(FF7・8・9/初期バイオハザード)のゲームを作るにはどの程度のプログラムの技術が必要になりますか?
自分はプログラムは組めないので、出来る人を探さなければいけないんですが。
例えばこのスレにいる皆さんなら作れます?キャラモデルやマップ等は全部こっちで用意すると仮定して。
0821名前は開発中のものです。
2006/02/20(月) 02:33:26ID:7NofXH/9出来る人は結構いるけど、あんたに付き合っている暇がある人はいないと思われ。
0822名前は開発中のものです。
2006/02/20(月) 04:31:14ID:kdfJprxL0823名前は開発中のものです。
NGNG技術もさることながら、単純にマンパワーが必要になるよ
FF7〜クオリティ・量のグラフィックデータを自前で全部作れるのならそんな心配無いのかもしれんけど
0824名前は開発中のものです。
2006/02/20(月) 12:13:27ID:oi3Frd4aオラ「でもスクエ二君の家は・・・」
上司「スクエニ君の家はスクエニ君の家!!うちはうち!!」
0825名前は開発中のものです。
2006/02/20(月) 13:24:47ID:ko93Nstz0826名前は開発中のものです。
2006/02/20(月) 15:48:34ID:g7wRkPfK0827名前は開発中のものです。
2006/02/20(月) 19:14:27ID:DhgD3x+IXSIのスケルトンをエクスポートしたいんですが、BASEPOSE とSRTの相関関係が良くわかりません。
BASEPOSE, SRT を4x4行列変換済みメンバーとして、スケルトンがRoot->bone->bone2 というチェーンとし、
rootのグローバル変換行列とジオメトリブレンディングは無視するとして、最終的にbone2に結び付けられたenvelopeというメッシュのローカル変換行列Lを得たいとします。
このとき、↓のようにBASEPOSEを無視してよいのか、
Matrix L = bone.SRT * bone2.SRT * envelope.SRT
それとも↓のようにBASEPOSEと相対的にSRTがあるんでしょうか?
Matrix L = (bone.SRT * bone.BASEPOSE) * (bone2.SRT * bone2.BASEPOSE) * (envelope.SRT * envelope.BASEPOSE)
それとも何か別の考え方に基づいているんでしょうか?
0828名前は開発中のものです。
2006/02/20(月) 19:21:56ID:ZusWQmSSCG技術板じゃないか?
0829名前は開発中のものです。
2006/02/20(月) 19:27:55ID:XpFlk9ztそりゃ、ゲーム作るのに50人とか使えるんだからな。
アマチュアはどう頑張っても10人程度が限度だろう。
0830名前は開発中のものです。
2006/02/20(月) 19:34:52ID:jsb+bV9/カリスマ性と幅広い知識が無いと、50人なんて統制できないんだろね
0831名前は開発中のものです。
2006/02/20(月) 20:11:51ID:hi1jYPiS0832名前は開発中のものです。
2006/02/20(月) 22:32:44ID:bkUHwmA4どのようなやり方がよいですか?
参考になるようなサンプルとかないでしょうか。
環境:VC++
0833名前は開発中のものです。
2006/02/20(月) 22:32:58ID:pF6ek0CcXSIの中間フォーマットdotXSIからゲーム製作などに必要なデータをコンバートするためのライブラリがFTKのようだ
0834名前は開発中のものです。
2006/02/20(月) 22:58:49ID:LyW0l92U以前自分がやった時は、良く分からないまま試行錯誤してたら上手く行った感じに
なっただけなので、もしかしたら問題あるかもしれんが書いてみる。
ソース見ても良く思い出せないけどね。バージョンによっても違うかもしれんし。
基本的に、SRTを階層で乗算していった物がそれぞれのBASEPOSEになるみたい。
なので、アニメーションさせないならBASEPSOEだけ使えば、SRTによる階層での乗算は不要かと。
SRTはFCurveで値を変更できるようなので、アニメーションするならSRTも必要。
FCurveでアニメーションさせる場合、SRTにはFCurveの1フレーム目が入っているようだ。
ジオメトリブレンディングをやるならSRTだけじゃ駄目で、BASEPOSEが必要と思われる。
自分のソース上では、BASEPOSEの逆行列保持して、SRTで動かして元に戻す感じになってる。
自分で書いてても良く分からなくなってしまった。
聞きたい事と全然違ったらごめんね。
0835名前は開発中のものです。
2006/02/21(火) 01:05:32ID:2/rlrMq6どういう風にプログラミングすればいいのでしょうか?
0836名前は開発中のものです。
2006/02/21(火) 02:30:10ID:dgLZBZXY0837827
2006/02/21(火) 13:28:47ID:Ry7crMJu>基本的に、SRTを階層で乗算していった物がそれぞれのBASEPOSEになるみたい。
どもです。BASEPOSEはIKで使うようですね。エフェクターを動かした後、この逆行列を掛けて変換行列を得るようです。
0839名前は開発中のものです。
2006/02/24(金) 03:15:19ID:9TnWIlnrWinMain┬Rendererクラス ・・・レンダラーの初期化と描画開始・終了・Present()
└Sceneクラス ・・・シーンの構築と描画 レンダラークラスからポインタで呼び出される
今のところこんな形になってるのですが、(某DX本の構成)
ここにキャラクターの移動や描画などの処理をまとめたCharクラス
マップのスクロールや描画をまとめたMapクラス
などのオブジェクトを表すクラスを組み込むとしたらどこに入れればいいのでしょうか?
上の構成はぶっ壊してもいいです
0840名前は開発中のものです。
2006/02/24(金) 12:49:41ID:yHhdLc83その先の部分をきちんと書けばちゃんと回ると思うんだが。
0841名前は開発中のものです。
2006/02/24(金) 16:44:36ID:9TnWIlnr描画用クラスに組み込むとおかしくなるし
描画用クラスの外に出すとどうやって描画するかが分からなくて
0842名前は開発中のものです。
2006/02/24(金) 17:07:15ID:yHhdLc83そもそも説明文と図が矛盾してる(レンダラーからシーンが呼び出されるのに
図ではWinMainを介してしか繋がってないように見える)しな。
0843名前は開発中のものです。
2006/02/24(金) 19:48:30ID:9TnWIlnrごめん今こんなものしかない
WinMainからレンダラー呼び出してその中でDirectXの初期化
次にシーンクラスのCreateScene()呼び出してテクスチャとかメッシュとかアニメーションとか設定
WinMain最後にスレッド生成。スレッド内は無限ループ。
レンダラークラスのRenderScene関数にシーンクラスへのポインタ渡して
RenderScene関数内で画面クリア後、シーンクラスのDraw関数呼び出してモデルを描画
その後RenderSceneに戻ってpresent()したらWinMainに戻る
打っててなんかおかしいとおもた
長々とスマソ
0844名前は開発中のものです。
2006/02/24(金) 20:43:19ID:yHhdLc830845名前は開発中のものです。
2006/02/24(金) 21:50:22ID:9TnWIlnrスレッド内で移動処理などしたいのでWinMainにクラス持たせてポインタを渡すことにします
ありがとう
0846名前は開発中のものです。
2006/02/26(日) 21:47:41ID:qag5ydFjコンパイルエラーの嵐
関数ポインタとメモリが絡んでくると毎回酷いことになる
0847名前は開発中のものです。
2006/02/27(月) 08:33:07ID:wV/qPqZGまだ話にならんと思うんだが。
0848名前は開発中のものです。
2006/02/27(月) 16:41:18ID:oEXfl838Class1::test(TASK *t) //TASKはタスク用の構造体
{
・・・
}
この関数をタスクの行動関数に指定してタスクを生成したいんだけど
タスククラスのpTask->TaskCreate(test, NULL, 1, 1)でタスク生成関数に関数testのアドレスを渡しても
「void (* (_closure )(TASK *))(TASK *)' 型は 'void *' 型に変換できない」とかエラーが出る
渡す先はタスククラスメンバ関数の
TASK* TaskCreate(void* Func, void* Release, DWORD Priority, DWORD Type)
クラスのメンバ関数はvoid*型に変換できないの?
0849名前は開発中のものです。
2006/02/27(月) 16:45:29ID:E/UIX170>クラスのメンバ関数はvoid*型に変換できないの?
ムリ。
いや、無理すれば出来るけど。
bind1stで調べてみると分かる、かも?
0850名前は開発中のものです。
2006/02/27(月) 16:46:40ID:oEXfl838void test(TASK *t){/*・・・*/}とか
0851名前は開発中のものです。
2006/02/27(月) 16:47:36ID:oEXfl838更新してなかった
>bind1st
ありがとう、ちょっとググってくる
0852名前は開発中のものです。
2006/02/27(月) 20:12:08ID:BluJBaYXクラスの多重継承を考えると、sizeof(メソッド)は
sizeof(単純な関数ポインタ)+sizeof(オフセット)
が必要になるよ。
0853名前は開発中のものです。
2006/02/27(月) 20:35:03ID:oEXfl838>>852
よく分からんです・・
タスク用のデータエリアのことなら
pTask = new CTask;
TASK* Task = pTask->TaskCreate(行動関数,開放関数,優先度,タイプ); //タスク生成、リスト追加
Task->Data = new データ型;
Task->Data = (void*)データ;
で確保してるのでサイズは大丈夫だと思う
タスクってポインタをガシガシ切り替えて処理するものだと思ってたけど
CじゃなくC++のクラスを使ったタスクシステムを見てみると
どれも継承元で仮想関数使って継承先に処理を記述する処理固定のしかないんだなぁ・・・
0854名前は開発中のものです。
2006/02/27(月) 20:47:17ID:IKST4ZuKあと、関数ポインタじゃなくてboost::function使うと色々できるよ。
パフォーマンスは知らんけど。
0855名前は開発中のものです。
2006/02/27(月) 20:50:42ID:BluJBaYXC++でもポインタの切り替えはできるよ。というかできたよ。
理由は>>852の通りなんだけど、
とりあえずクラスメソッドはvoid*型に変換できないんで
TASK* TaskCreate(void* Func, void* Release, DWORD Priority, DWORD Type)
は
typedef ...(ClassName::*FuncType1)(...);
typedef ...(ClassName::*FuncType2)(...);
TASK* TaskCreate(FuncType1 Func, FuncType2 Release, DWORD Priority, DWORD Type)
のようにする必要がある。
0856名前は開発中のものです。
2006/02/27(月) 21:47:38ID:oEXfl838>Stateパターン
Stateで検索してたつもりがいつのまにかデザインパターン全般のページ見てた
奥が深いね・・・こっち関連の書籍持ってないから今度買ってみる
boostはライブラリをあまり使いたくない派なので迷う
>>855
異なる複数のクラスに対応させる場合、
生成関数をその分用意しないといけないので大変ですね・・
なんでクラスメソッド渡せないんだか・・
デザインパターンに興味を持ったのでStateパターン覚えてからしばらくそっちに走ってみます
0857名前は開発中のものです。
2006/02/27(月) 22:08:46ID:BluJBaYX> 生成関数をその分用意しないといけないので大変ですね・・
> なんでクラスメソッド渡せないんだか・・
まさにここが工夫のしどころで、
いちいち作らないようにする方法はある。
0858名前は開発中のものです。
2006/02/27(月) 22:13:28ID:oEXfl838今思い出したからうろ覚えだけど
もしかして関数テンプレート機能?
0859名前は開発中のものです。
2006/02/27(月) 22:47:19ID:BluJBaYXこのくらいはできて当然だから、がんばっちくり。
0860名前は開発中のものです。
2006/02/27(月) 22:49:43ID:oEXfl838俺物忘れ激しいな・・
C++基礎からやり直した方がいいかも
0861名前は開発中のものです。
2006/02/27(月) 22:53:02ID:NtZAdaLq普通に仮想関数使えば終了だな。キモイキャストの連発ともおさらばだ。
関数ポインタから void* への変換は、メンバ関数に限らず不可。
もしできたように見えたとしても、それはコンパイラの独自拡張だろう。
0862名前は開発中のものです。
2006/02/27(月) 23:23:15ID:BluJBaYXやってみれば分かるけど、仮想関数のみだとキャストしないと無理。
あと、関数ポインタからvoid*への変換は確かに環境依存なんだけど、
boost.function はそれを駆使して実装されてるんで、
boost.function が動く環境ならどこでもできるよ。
0863名前は開発中のものです。
2006/02/27(月) 23:37:54ID:NtZAdaLq単に「タスクシステム」っていうと、メインループがタスクのポインタ握って
ポインタから仮想関数を呼び出すぐらいしか無いと思うんだけど、
何にキャストが要るの?
boost::function が関数ポインタから void* への変換を駆使してる?
どこにそんな情報があるの?
とりあえず現状のソースでは union 使ってるみたいだけど。
http://cvs.sourceforge.net/viewcvs.py/boost/boost/boost/function/function_base.hpp?view=markup
0864名前は開発中のものです。
2006/02/28(火) 00:21:53ID:6zNpXrV2public:
void static funcA(void* se1f)
{
ClassA *self = (ClassA*)se1f;
cout << self->num++ << endl;
}
private:
int num;
};
void call_func(void (*func)(void*), void *arg)
{
func(arg);
}
int main()
{
ClassA *class_a = new ClassA;
call_func(class_a->funcA, class_a);
}
Perlとかに慣れているなら self の存在を許せるよね…
0865名前は開発中のものです。
2006/02/28(火) 00:29:02ID:zCKm/IVQタスクシステムって言うのは
class Task {
public:
void begin_task() { ... set_task(&Task::task1); }
protected:
void task1() { ... set_task(&Task::task2); }
void task2() {}
};
とか、こういうのを指してると思うんだ。
で、コールするべきメソッドを保存するためには、
テンプレートを使わないならキャストする必要があるよと。
もちろん1タスク1関数を遵守してもいいんだけど、これはこれでなかなか便利だよ。
あと、boostの方は間違えた。
関数オブジェクトを保存しているフィールドと関数ポインタのフィールドを見誤ったようだ。
0866名前は開発中のものです。
2006/02/28(火) 00:31:23ID:zCKm/IVQ0867名前は開発中のものです。
2006/02/28(火) 00:31:28ID:aXLiBRlK別にする場合の構成とかどんなもん?
0868名前は開発中のものです。
2006/02/28(火) 03:24:56ID:nWNa1RWoC++でやるならもっと型安全に気を使おう。
そんな古典的な手法を使うならCでやれ。
C++的には
>継承元で仮想関数使って継承先に処理を記述する
その継承先の処理の記述で、
ifやswitchやメンバ関数ポインタやstaticメンバ関数へのポインタを使って分岐するのが、
型安全でカプセル化でスマート。
>861
void *に変換した物は、何も弄らず元の型に戻せば、
正しく復元される(関数ポインタだとしても)って聞いたんだが。
0869名前は開発中のものです。
2006/02/28(火) 09:48:42ID:q2yPrwLQ普通は別にするとおもわれ。
構成なんて漠然としたこと聞かれても困る。
例を示されよ。
0870名前は開発中のものです。
2006/02/28(火) 12:17:07ID:kxpJE7Cjオブジェクトポインタと関数ポインタの間での変換は規格では認められていない。
C の時からそう。
0871名前は開発中のものです。
2006/02/28(火) 12:57:51ID:aEEYZl8lC++でやるならStateパターン+1キャラクタ1クラスでFAだろ。
0872名前は開発中のものです。
2006/02/28(火) 13:39:14ID:kxpJE7Cjその形でどこにキャストが要るのかわからない。
0873名前は開発中のものです。
2006/02/28(火) 21:40:21ID:zCKm/IVQ確かにコンパイラの独自拡張なんだけど、もはや共通拡張と言ってもいいくらい浸透してるみたいだね。
条件付きではあるけれど。
ttp://forums.belution.com/ja/cpp/000/015/67s.shtml
>>871
状態によって処理を変える必要しかないならそれでもいいだろうね。
ただ、例えばタイトル画面なんかの場合は
1)タイトル文字をフェードイン+移動しながら表示
2)サブタイトルを移動しながら表示
3)全体にエフェクトをかける
みたいに状態によって左右されないシームレスな記述が必要になる。
これを扱う方法としてswitchやマイクロスレッドがあるんだけど、
もう一つの方法がこのオリジナルタスク。
オリジナルとはいっても
Codezineのタスクシステム + Move or Drawメソッドの呼び出し先を変えられる
ってだけなんだけど。
>>872
新規クラス Task2 や Task3 を導入したときに問題になる。
0874名前は開発中のものです。
2006/02/28(火) 22:38:49ID:K7Ri/qFO0875名前は開発中のものです。
2006/02/28(火) 23:36:27ID:l+ExwxPFタスクシステムの方を優先して設計するのはナンセンスだと思うよ。
関数ポインタを使って実現したいことは処理の共通化だろうし、それは仮想関数だけじゃなくて
普通に継承元になる側にも関数いれときゃいいし。
継承元のクラスポインタに、派生したいろんなクラスをまとめていれられる。
0876名前は開発中のものです。
2006/02/28(火) 23:47:24ID:aXLiBRlK0877名前は開発中のものです。
2006/03/01(水) 00:51:17ID:CUoSF3s4>状態によって左右されないシームレスな記述
ってのは単に処理をどこで区切ってStateに分けるかの話だろ。
0878872
2006/03/01(水) 00:59:35ID:IPZ1L++y> 確かにコンパイラの独自拡張なんだけど、もはや共通拡張と言ってもいいくらい浸透してるみたいだね。
> 条件付きではあるけれど。
そんなに必死に正当化しなくても、非標準なんだから使わないようにすれば済む話。
「共通拡張」なんて胡散臭い言葉を持ち出すのは混乱の元。
> 新規クラス Task2 や Task3 を導入したときに問題になる。
やっぱりわからない。わかんないのは俺だけ?
何から何へのキャストが要るのか、書いてもらえると分かるかも。
0879名前は開発中のものです。
2006/03/01(水) 01:09:15ID:2CSbAmuSもういいじゃん。
そっとしておいてあげようよ…。
共通拡張の時点で分かるでしょ。
もういっぱいいっぱいなんだよ。
わかってやれよ。
0880名前は開発中のものです。
2006/03/01(水) 01:28:04ID:MsffCk59これは擬似コードなので動かないし、NULLチェックとかもしてないよ。
// 描画系のメソッドは略
class TaskBase {
public:
typedef @ FuncType;
TaskBase() : m_func(&TaskBase::begin_task) {}
void set_task(FuncType func) {m_func = func; /*A*/ }
void update() { m_func(); }
protected:
virtual void begin_task() {}
private:
FuncType m_func;
};
class Task1 : TaskBase {
public:
Task1() {}
protected:
void begin_task() { set_task(&Task1::task1); }
void task1() {}
};
class Task2 : TaskBase {
public:
Task2() {}
protected:
void begin_task() { set_task(&Task2::task1); }
void task1() {}
};
0881名前は開発中のものです。
2006/03/01(水) 02:16:32ID:MsffCk59関数ポインタを使ってしたいことは、処理の共通化でもあるんだけど、
タスクの場合は主に長い処理を1フレーム分に分割することにある。
マイクロスレッドなりスレッドなりを使わないと、どうしてもぶつ切りにせざるを得ないので。
もちろん、templateメソッドみたいに呼び出すメソッドがあらかじめ分かっていれば、
継承元側に仮想関数を追加しておくことはできるよ。
ただタスクシステムの場合、それはほとんど不可能。
>>877
Stateを使うってことは、状態一つに対してクラスを一つ作るってことなのかな?
例えば、>>873にあげた1)2)3)でそれぞれに対してクラスを作るの?
これの代替機能としてはswitchやマイクロスレッドがあげられると思うんだけど、
何でステートパターンにこだわるんだか、俺には分からない。
これだと粒度大きすぎると思うんだけど。
(細切れの関数に対していちいちクラスを作らないといけないってことね)
>>878
> そんなに必死に正当化しなくても、非標準なんだから使わないようにすれば済む話。
> 「共通拡張」なんて胡散臭い言葉を持ち出すのは混乱の元。
一緒に示したソース見た?
その中に「共通の拡張」って表現があるから、それを借りただけなんだけど・・・
この辺は>>868や俺のように間違えてる人が多いから、一応確認しただけ。
これは本題ではないので、こちらからはこれ以上レスしないよ。
あと、>>880に示したプログラムではテンプレートを使ってないので、
@に何を書いてもAでキャストすることになる。
使わない方法があれば、俺も知りたい。
0882名前は開発中のものです。
2006/03/01(水) 02:36:11ID:MsffCk59× @に何を書いてもAでキャストすることになる。
○ @に何を書いてもset_taskの呼び出し時にキャストすることになる。
0883名前は開発中のものです。
2006/03/01(水) 03:14:04ID:IPZ1L++yキャストが要るようになったらプログラムが間違ってるのを疑えよ。
なんで仮想関数で得られる型安全を自ら壊すような「タスクシステム」に
こだわるんだ?そんなシステム要らない。
↓これでいいんじゃないの。
class State {
public:
virtual void update() = 0;
};
class State1 : public State {
public:
State1() : m_update_task(&State1::begin_task) {}
void update() { (this->*m_update_task)(); }
private:
void (State1::*m_update_task)();
void begin_task() { m_update_task = &State1::task1; }
void task1() {}
};
0884名前は開発中のものです。
2006/03/01(水) 04:00:38ID:MsffCk59ようやく伝わったようだ。イメージとしてはそんな感じ。
で、テンプレートを使えば m_update_task 周りの処理をすべて
継承元の xxx<Task1> に投げられますよというだけの話。
例でtemplateを使って無いのは、>>882に説明するため。
0885名前は開発中のものです。
2006/03/01(水) 04:08:48ID:DYhzXIPkState1() : m_update_task(&State1::begin_task) {}
void (State1::*m_update_task)();
void begin_task() { m_update_task = &State1::task1; }
この辺りの記述ははじめた見た
詳細きぼん
0886名前は開発中のものです。
2006/03/01(水) 04:18:04ID:DYhzXIPkコンストラクタとメンバ関数ポインタか
コンストラクタでbegin_taskを関数ポインタに代入して
それが呼び出されれば関数ポインタにtask1を代入するわけか
またひとつ賢くなった
0887名前は開発中のものです。
2006/03/01(水) 04:25:23ID:MsffCk59また分かりにくいかもね。
>>883の例でいくと、
class State1 : State<State1> { ... };
とすれば、m_update_task 周りの処理を
継承元であるState<>で行うことができますよという話。
0888名前は開発中のものです。
2006/03/01(水) 06:34:35ID:FsQhIhltつーかさ、switchでつくりゃいいじゃん。ポインタにしてもいいことないよw
最適化かからなくなるし。
switch( TaskType )
{
case TaskType1: funcType1(); break;
case TaskType2: funcType2(); break;
case TaskType3: funcType3(); break;
default: assert( false /*TaskTypeError*/ );
}
ああ、安全安全。
0889名前は開発中のものです。
2006/03/01(水) 07:51:41ID:LeN+sImJ関数に分けて、特定の状態のときに行う処理がかけることかな。
状態遷移が複雑だったり外部の環境の変化によって遷移の仕方が大きく変わるようなら
Fiberつかったほーがいいけど、適材適所ということで。
キャストとかtypedefとか必要ない俺のつくったタスクシステムのきれっぱしを参考にしてくれ
正直つくったはいいがザコキャラがでてきてうろうろしたり弾幕があったりするようなゲームを
つくらなかったので使いどころがなかった。
// タスクの管理者はlist<TaskManagable*>をメンバに持ち、Run()を順番に呼んでいくのだ
class TaskManagable {
public:
virtual void Run() = 0;
};
//タスクになりたいクラスは class MyEntityTickTask : public Task<MyEntityTickTask>
// … とやってMain()を実装する。ChangeTask( hoge ) で自分のメンバ関数 void hoge() へ状態遷移できるよ
//管理者に登録するのはこのMyEntityTickTaskクラスをnewするやつの仕事だ。当然だね(^ー^b
template <typename T> class Task : public TaskManagable {
public:
Task() { ChangeTask(Main); };
void Run() { (((T*)this)->*m_doit)(); }
protected:
virtual void Main() = 0;
void ChangeTask(void (T::*fp)()) { m_doit = fp; }
void (T::*m_doit)();
};
0890名前は開発中のものです。
2006/03/01(水) 09:15:15ID:IPZ1L++y> キャストとかtypedefとか必要ない俺のつくったタスクシステムのきれっぱしを参考にしてくれ
> void Run() { (((T*)this)->*m_doit)(); }
キャスト入ってるよ。まぁ型安全は使い方で確保されてると言えるけど。
あんた、たぶん VC 使いだな。メンバ関数ポインタの &ClassName:: は
規格では省略できないことになってるから、気をつけてな。
>>884,887
たぶん 889 と似たような形のことだろうな。
これまでに挙がったコードだと template も継承も持ち出さずに
自分でメンバ関数ポインタを宣言(>>883)すれば十分に見えるんだけど、
「 m_update_task 周りの処理」ってのは代入と呼び出し以外に何か有るの?
State の実装がメンバ関数ポインタによる処理に切り替えを必要とするとも
限らないし、これをわざわざ「システム」として組み込んでしまうのは
template や継承(特に自己言及的 template など)おぼえたてで
使いたいだけに見えなくも無い。ほんとでそんな構成に利点があるんだろうか?
0891名前は開発中のものです。
2006/03/01(水) 09:45:30ID:SKz1zCk00892名前は開発中のものです。
2006/03/01(水) 11:08:16ID:LeN+sImJほとんど似たようなコードを置きながらちっともリスペクトしなかったのは俺の不注意だが
そこまで嫌味をいわんでもええやん
0893名前は開発中のものです。
2006/03/01(水) 19:11:17ID:FsQhIhltC++がこんな言語なのはCとの互換性を保っているからだしね。
なんつーか、WindowsのDOS窓でプロテクトモードじゃないと動かないような
プログラムをいまさら作ってるくらい違和感がありますよ関数ポインタ。
0894名前は開発中のものです。
2006/03/01(水) 19:11:48ID:FsQhIhlt0895名前は開発中のものです。
2006/03/01(水) 21:06:02ID:IEMguq9Oあたし、一生あなたについていきます(*・_・)
0896名前は開発中のものです。
2006/03/01(水) 21:06:39ID:CUoSF3s40897名前は開発中のものです。
2006/03/01(水) 21:44:02ID:MsffCk59分かってるとは思うけど>>880はサンプルだし、
実際に使うとなると他にもいろいろと書き加えないといけない。
そうなったときに、継承先クラスの実装とタスクシステムが
分離されてることはいいことだと思うけど。
>>893
もちろん実装として、メンバ関数ポインタの代わりに
boost.functionやらそのたぐいを使うことは十分に考えられる。
そういったことはすでに提案されている。
0898名前は開発中のものです。
2006/03/01(水) 23:16:45ID:1kpkO4CI今はtemplateとstateパターンだなぁ
0899名前は開発中のものです。
2006/03/01(水) 23:24:58ID:DYhzXIPkファイル分割の辺りを飛ばしてたから初めて知った
グローバル変数をクラスにポインタ使って渡してた自分が馬鹿みたいだ・・
0900名前は開発中のものです。
2006/03/01(水) 23:32:08ID:FsQhIhlt0901名前は開発中のものです。
2006/03/01(水) 23:32:30ID:hlrpUZzFいきなりC知らない人間がC++やると碌なことが無い
0902名前は開発中のものです。
2006/03/01(水) 23:38:46ID:qSXqEEUpっていうかぁ、
○ ○ ○ シ ス テ ム 云 々 っ て 馬 鹿 ぁ?
達成すべき処理に対して最適なアルゴリズムで組んでいけば、
それが最強のシステム。「よし○○○導入するぞ?」ってのは、
自分でまともなアルゴリズム組めない思考停止。PG才能無し。
0903名前は開発中のものです。
2006/03/01(水) 23:46:27ID:CUoSF3s4これは ひどい
0904名前は開発中のものです。
2006/03/02(木) 00:14:44ID:DSQKJe+Aそこまで自身がないなら既に完成しているシステムを組み込む安全な方法のほうがいい
0905名前は開発中のものです。
2006/03/02(木) 06:45:23ID:kEb75Hs9自分以外の同業者が何か敵か見下す対象なのであれば
同一のパーソナリティが出す見解としてはあってる。
0906名前は開発中のものです。
2006/03/02(木) 11:14:39ID:An/IP3MAがいしゅつか糞かのどっちかだろ。よっぽど今までに無い
特殊な課題が出てきたってなら話は別だけどな
0907名前は開発中のものです。
2006/03/02(木) 11:59:46ID:0lN5e5iu常に湧いてくるなんて尊敬しちゃいます(><)
0908名前は開発中のものです。
2006/03/02(木) 13:48:40ID:xnVjPOfM0909名前は開発中のものです。
2006/03/02(木) 19:06:30ID:TkjXSKpG0910名前は開発中のものです。
2006/03/02(木) 19:33:56ID:7Bu1OvIgそのとおりなんだが、上で出てるタスクシステムとやらは超絶に危険だろ?w
ツリー構造のタスクシステムをC++で作ったときはリンクリストにしてポインタ使ったけど
アップキャストだけにしてスマートポインタで管理して、タスクを利用する人からは極力
隠蔽するようにしたもんだけどなぁ。
0911名前は開発中のものです。
2006/03/02(木) 19:38:50ID:An/IP3MA0912名前は開発中のものです。
2006/03/02(木) 20:22:45ID:FRBQKYqS100行以上に及ぶ関数やグローバル変数や状態変数の乱立。
内部でスパゲッティーコード組もうがハードコーディングしようが、
最終的に俗世間に評価されればそれが勝ちなんだよ。
一般大衆はコーディング云々なんて気にしない。
面白ければそれでいい。
オナニーはエロ動画だけで十分って事だよ。
まぁ、いいもん作ろうぜ。
0913名前は開発中のものです。
2006/03/02(木) 20:38:34ID:An/IP3MA0914名前は開発中のものです。
2006/03/02(木) 20:40:18ID:e+7b9NqLっていつも思う。
0915名前は開発中のものです。
2006/03/02(木) 20:41:22ID:EQr6DVKB勝ち負けなんて気にせず、
自己満足のための美しい設計に心血を注ぐ者がいても良いじゃない。
0916名前は開発中のものです。
2006/03/02(木) 20:43:53ID:ODhfrfjk0917名前は開発中のものです。
2006/03/02(木) 21:18:05ID:FRBQKYqSでもオレは要求された仕事を期日以内にキチンとこなして女と遊びに行くほうがずっといいからな。
お外で遊びな? まじ楽しいぞ?
0918名前は開発中のものです。
2006/03/02(木) 21:30:25ID:mDiMfB+6俺にはWindowsXPたんがいるからいいもんね・・・
もうすぐもう一人増えるんだもんね・・・
0919名前は開発中のものです。
2006/03/02(木) 21:50:15ID:An/IP3MAhttp://pc8.2ch.net/test/read.cgi/prog/1139744052/l50
0920名前は開発中のものです。
2006/03/02(木) 22:26:24ID:7PybzmE4むしろ糞コードでも良いからそれが何十年も使える世界になって欲しい
0921名前は開発中のものです。
2006/03/03(金) 10:12:47ID:RMA/DLWOえ、いやほんとに教えてください・・・・サンプルでは英字しか無理でしたけど・・・
Irrlichtはやろうとしたけど・・・・でしたので
0922名前は開発中のものです。
2006/03/03(金) 17:43:23ID:Es3EQncu自キャラ、敵キャラはいいとして重力計算とか当たり判定はどこで行うの?
0923名前は開発中のものです。
2006/03/03(金) 17:48:31ID:mnIw+zDn0924名前は開発中のものです。
2006/03/03(金) 18:07:00ID:b9kujG94http://life7.2ch.net/test/read.cgi/jinsei/1140716130/l50
ここで偽善者がオナニー暴れしてます
0925名前は開発中のものです。
2006/03/03(金) 20:40:36ID:K58rYxW9自キャラさんとか敵キャラさんとかが入ってるリストの中に
重力計算さんとか当たり判定さんとか本来実体のないものを
わざわざ実体のあるように見せかけていっしょにつっこむべきだと思う?
まぁ最初なんだからすきにしたらいい間違ってるのがわかったらその時なおせばいいよ
0926名前は開発中のものです。
2006/03/03(金) 21:45:17ID:0OTmGa8a思う。
0927名前は開発中のものです。
2006/03/03(金) 22:42:51ID:o73IJu/Mってのが基本的なタスクシステムのキモの一つなわけで
実体の有無(画面に表示されるかどうかって意味だよな?)はあまり関係ないんだな。
ただ、当たり判定や重力計算を独自のタスクで組むと、それを適用したいキャラを
リストからいちいち探さなくちゃいけないしあまり効率がいいとは言えない。
関数の内容によってリストを別けるとか解決策はいくらでもあるが
そこまでして使うものか?とも思う。
0928名前は開発中のものです。
2006/03/03(金) 23:00:14ID:Es3EQncu欲張りだから最初から失敗が嫌
とか言っても一発で成功したこと一度もない・・・
コンパイルの度に”必ず”ひとつはエラー出す
タスクとしてリストにぶっ込みたいんだけど色々問題があって
>>927
「リストからいちいち探さなくちゃいけない」
この辺でずっと悩んでた
タスクリストの一番最初に入れるのはもちろん無理だし
一番最後に入れるとタスクリスト内のデータをまた最初から検索しなおさなくちゃならないから単純に処理2倍だし
各タスクの行動関数に組み込むと再利用性がうんこ
0929名前は開発中のものです。
2006/03/03(金) 23:07:35ID:LreP13W+なんでタスクリストに入れたいの?
「タスク」とか「タスクリスト」の意味が曖昧なまま話しても無駄っぽいから
もっと実のある話にしたければ次スレ立てて
「タスクで組む」の意味を具体的にしてから話すことだね。
0930名前は開発中のものです。
2006/03/03(金) 23:09:42ID:fF4cU66H重力計算クラスはどんな機能が必要で
外からはどんなインターフェースが必要なのか。
0931名前は開発中のものです。
2006/03/03(金) 23:11:40ID:o73IJu/M実行順優先度とか設けてないの?
入れるなら最初か最後でしょ。
優先度ごとにリストを設けておけば総なめしなくても済むし
一本のリストで全てをまかなおうと考えない方がいいよ。
0932名前は開発中のものです。
2006/03/03(金) 23:13:51ID:YtzA4e+Q適応したい処理の対象のリストを、フレーム毎に作成すればいいんじゃね?
検索の約一兆倍スマートでクールだと思うよ??(当社調べ)
0933名前は開発中のものです。
2006/03/04(土) 11:27:18ID:N+C0gx8b0934名前は開発中のものです。
2006/03/04(土) 14:05:42ID:ja9F3fLO0935名前は開発中のものです。
2006/03/05(日) 02:39:49ID:UHXFHf4y0936名前は開発中のものです。
2006/03/05(日) 05:38:38ID:YPNEIoPdプログラマのとこか?
0937名前は開発中のものです。
2006/03/05(日) 12:16:19ID:n3bvOOgL1pixelずつの移動であれば移動する場所の座標で当たり判定をして
ヒットしていれば移動しない、ヒットしていなければ1pixel進むでいいですよね。
けど、通常の3倍で進むような場合は3pixel進んだ場所の座標で当たり判定をして
ヒットしていれば移動しない、ヒットしていなければ3pixel進むではよろしくないです。
3pixelは進めなくても2pixelは進める可能性があるからですが、
こういう通常の3倍で進む場合は1pixel進む処理をx3してやるのが普通なんでしょうか?
それともほかに良い方法がありますか?
0938名前は開発中のものです。
2006/03/05(日) 12:58:26ID:5Th9ilrN真っ当に考えれば、n pixel進むためには、
n 回ループで 1 pixel ずつ判定するしか方法はないと思われる。
状況によっては、先に n pixel進めてみて
移動不可だったら (n-1) pixelを試すという逆順のほうが効率がいいかも試練が。
0939名前は開発中のものです。
2006/03/05(日) 12:58:30ID:ZGr9k1wh何ピクセル埋まったかを計算してその分戻せば?
0940名前は開発中のものです。
2006/03/05(日) 14:07:05ID:cQK4mU/uぴったり止まるなら>939が丁寧な方法で>938が簡易だな。
0941名前は開発中のものです。
2006/03/05(日) 18:42:16ID:n3bvOOgL>>939 まさにそれですね。
ジャンプして天井にぶつかったり
落下して地面に着地した時、
キャラクターの移動速度を上げたときに
挙動が変だったのがこれで直りそうです。thx。
0942名前は開発中のものです。
2006/03/05(日) 20:55:44ID:UHXFHf4yいや全部。 仕事でプログラマとか実務側の方をやってると
全部がだいたいそのとおりなので笑える。
笑えないのは現在進行形の場合だな。
0943名前は開発中のものです。
2006/03/05(日) 23:50:36ID:VVgrQx5R0944名前は開発中のものです。
2006/03/07(火) 13:47:15ID:/9MR8SBK0945名前は開発中のものです。
2006/03/07(火) 13:54:24ID:ZvqJ1rtZ0946名前は開発中のものです。
2006/03/07(火) 14:05:02ID:gwpzJjwD0947名前は開発中のものです。
2006/03/07(火) 17:59:12ID:FUu2poXAけど買えなかったorz
0948名前は開発中のものです。
2006/03/07(火) 20:37:37ID:BkDgmlhw縦,横,チップサイズ \n
番号,番号,番号,番号,番号 \n
番号,番号,番号……
とかなってるマップの読み込みをスマートにできないかな
暗号化とかもまた意味不明
0949名前は開発中のものです。
2006/03/07(火) 21:07:51ID:/Dd4UB8zとってもスマートなのだが。
暗号化?
ぐぐれよ
0951名前は開発中のものです。
2006/03/07(火) 21:40:39ID:FUu2poXA0952名前は開発中のものです。
2006/03/07(火) 21:58:02ID:BkDgmlhw0953名前は開発中のものです。
2006/03/07(火) 22:01:07ID:P11agiDo0954名前は開発中のものです。
2006/03/07(火) 22:14:57ID:FUu2poXAで次スレ
0955名前は開発中のものです。
2006/03/07(火) 22:58:17ID:BkDgmlhw早速やってみた
変換ツール作りの段階でコンパイラにコンパイルエラー連射されると困る
0956名前は開発中のものです。
2006/03/08(水) 01:38:07ID:FOxUDukTバイナリをテキストに変換するのを作るのに2時間かかった
マップ以前に今後について考える必要があるかも
0957名前は開発中のものです。
2006/03/08(水) 09:37:07ID:cf7g5b6+例えばperlで>>948のCSVをバイナリ化するならこう書ける。
open(IN, 'map.txt');
while (<IN>) {
chomp($_);
my @linedata = split(/,/, $_);
foreach my $data (@linedata) {
$out .= pack("s", int($data));
}
}
close(IN);
open(OUT, '>map.dat');
binmode OUT;
print OUT $out;
close(OUT);
0958名前は開発中のものです。
2006/03/08(水) 10:00:00ID:FOxUDukT短いなぁ
ちょっとそっち関連の勉強でもしてみる
0959名前は開発中のものです。
2006/03/08(水) 22:10:22ID:/wiAUAS30960名前は開発中のものです。
2006/03/10(金) 23:11:01ID:eoGMdw8Pタスク構築していろいろやってみたんだけど、デバッグ中にタスク削除辺りでエラーが出る
WinMain.cpp - エントリ。タスクやキャラクラスの宣言
CTask.cpp - タスクシステム
CChar.cpp - キャラクラス。タスククラスを継承。全キャラクタの継承元クラス。
CUser.cpp - 自キャラ管理。爆発クラスの呼び出し。 キャラクラス派生
CExplosion.cpp - 爆発クラス。一定時間経過で開放。
CRenderer.cpp - DirectX
ChipPoint.h - テクスチャ座標配列
クラスCUserがカーソルキーによる移動時に一定間隔でCExplosionをnewしてタスクリストに追加、
CExplosionが一定フレーム爆発し続ければメンバ関数Proc内で
CTask::TaskKill(TASK* t)にthisポインタ渡して開放待ち状態に移行
TaskKill内では渡されたタスクのタスク用デストラクタを実行してそのタスクのStatusメンバにステータス列挙体のSTATUS_KILLを詰め込む
その後にCTask::TaskExecution()を実行してTASK_KILLのタスクをCTask::TaskDelete(TASK* t)に渡して開放したいんだけど、
そのTaskExecution()内のswitch文でTASK::Statusを参照するとエラーが出る
長々長々とスマソ。ソースは「とりあえずやってみっか」的でかなり雑
0961名前は開発中のものです。
2006/03/10(金) 23:25:25ID:0u3ISKgKで、何だ?
「暇人の皆さん、このとりあえずやってみっか的ソースをデバッグしやがれ。」
って事か?
0962名前は開発中のものです。
2006/03/10(金) 23:51:07ID:6klj+UjHソースを上げるスレッド
ttp://pc8.2ch.net/test/read.cgi/gamedev/1005038280/
0963名前は開発中のものです。
2006/03/11(土) 00:34:44ID:fYcMiC+y(1)(2)(3)の順に読んでね、お兄ちゃん。
for(TASK* i=Top->Next; i!=End; i=i->Next) ← (2) 次のi->Nextは開放後の不定値になり
{
(中略)
switch(i->Status) ← (3) そして、どかーん☆
{
case STATUS_KILL:
TaskDelete(i); ←(1) ここでiの実体を開放した場合、
break;
};
}
0964960
2006/03/11(土) 00:49:40ID:ojp9Bp1Nすまんかった。
>>963
おお、なるほど
オブジェクト側で何かやらかしてるのかと思ってたから
タスク実行ループは疑いもしなかった
実行できました。ありがとうございます
0965名前は開発中のものです。
2006/03/11(土) 01:09:54ID:xs4HFJgg0966名前は開発中のものです。
2006/03/11(土) 03:07:50ID:CNVjlctO0967名前は開発中のものです。
2006/03/11(土) 04:58:54ID:HaVUH+Mi0968名前は開発中のものです。
2006/03/11(土) 05:18:19ID:HaVUH+Mi例えば
class map_data
{
public:
BYTE chip_x,chip_y;//チップのインデックス
};
というクラスがあり、これをそのままサイズ分ファイルに書き込みます。
このクラスはマップファイル用に使われるので実際はマップの編集作業に大変時間を取られます。
しかし、このクラスに何かの変数を追加する必要が生じまして
class map_data
{
public:
BYTE chip_x,chip_y;//チップのインデックス
char flag[4];//
};
こうなったとすると、クラスのサイズの違いから読み込み位置にズレが生じてしまい、
前回頑張って作ったマップのデータが意味の無いものになってしまいます。
これを回避するために上手い方法は無いでしょうか。
今はファイル読み込み関数を旧式、書き込み関数だけを新しいものにして、
一旦新形式でセーブしてから読み込み関数を新形式にする方法と、
あらかじめchar reserved[1000]という余分なスペースを確保し、
追加分の変数のサイズだけ引いていくという方法でやっていますが面倒です。
0969名前は開発中のものです。
2006/03/11(土) 08:29:22ID:r0/M++6p0970名前は開発中のものです。
2006/03/11(土) 08:37:41ID:/5hGWtyv0971名前は開発中のものです。
2006/03/11(土) 09:11:12ID:czh0rJIG0972名前は開発中のものです。
2006/03/11(土) 13:21:52ID:3b41TJWIhttp://live19.2ch.net/test/read.cgi/ogame/1142050870/
0973名前は開発中のものです。
2006/03/11(土) 14:29:54ID:OQA38ARhプロパティシート?プロパティテーブル?プロパティセット?そんな感じのやつ。
それができないようなデータならreservedを設けるしかないな!
0974名前は開発中のものです。
2006/03/11(土) 15:30:10ID:CNVjlctOいま時だとXMLとかでもいいかもしれず。
0975名前は開発中のものです。
2006/03/12(日) 02:10:41ID:v/iGtfpN0976名前は開発中のものです。
2006/03/12(日) 10:32:49ID:9Xx2pFM60977名前は開発中のものです。
2006/03/12(日) 10:37:21ID:bZfGY06EMMOFPSで常時一万オーバー接続で快適に稼動させるには、
どのあたりから手をつけr
0978名前は開発中のものです。
2006/03/12(日) 10:53:06ID:FjM9fEPE0979名前は開発中のものです。
2006/03/12(日) 11:07:49ID:bZfGY06E>まずはIPv6が標準プロトコルになるまで待つ。
では、その日を夢見てゲ製をサボリ、マターリ惰眠を貪ろうかと思います。
本当にありがとうございました。
0980名前は開発中のものです。
2006/03/12(日) 13:28:50ID:zIFbhKP6IPv6になれば速度上がるの?
0981名前は開発中のものです。
2006/03/12(日) 16:22:43ID:1FvRGjG/IPv6が標準になるころには光接続も標準になるだろうし、1万人で遊ぶのも
なんとかなりそうな気ガス。
10年後くらいか。
レス数が950を超えています。1000を超えると書き込みができなくなります。