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

このエントリーをはてなブックマークに追加
1名前は開発中のものです。
ゲームプログラミング全般の質問スレッド。
扱う話題のダイナミックレンジはやや広め。包容力高め。
他の初心者質問スレとの棲み分けを探りつつ
これからもマターリと活用しておくれ。
 
■過去スレ
【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
2名前は開発中のものです。:04/03/06 01:26 ID: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/
3名前は開発中のものです。:04/03/06 14:28 ID:dSl4ykZE
       。 ◇◎。o.:O☆οo.
       。:゜ ◎::O☆∧_∧☆。∂:o゜
       /。○。 ∂(*゚ー゚ )O◇。☆
     /  ◎| ̄ ̄∪ ̄∪ ̄ ̄ ̄|:◎:
    /    ☆。|..  新スレおめ  .|☆
  ▼       。○..io.。◇.☆____| 。.:
∠▲―――――☆ :∂io☆ ゜◎∂:.
4名前は開発中のものです。:04/03/06 16:00 ID:IZnhr4O3
windowsでアクションRPGを作ろうとしています。
2Dで作りたいのですが、その場合の最適な方法を教えて
下さい。
DirectXのスプライトやテクスチャを使うよりひょっとして
GDIを使った方が早いとか・・その辺どうなのでしょうか?
プログラミングに関してわりと初心者なので、ご助言よろしく
お願します。
5名前は開発中のものです。:04/03/06 16:08 ID:XiMT98gx
>>4
DirectXとC/C++で作る。
描画まわりを自分で組むのは面倒だし、
よくわからないので誰かのライブラリを使わせてもらう。
誰のライブラリを使うかは自分で探す。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

sakki_time = ima_time;

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

※こういった質問はここでよろしかったでしょうか? よろしくお願いします。
言語はCもしくはC++です。
上げさせていただいてもいいでしょうか?
82名前は開発中のものです。:04/04/16 18:03 ID:ApfI3JPr
>>81
D3Dのマニュアル
8381:04/04/16 18:15 ID:6nIx9Yzb
>>82
申し訳ありません D3Dとは何かの略でしょうか?
検索してみたのですが 海外の会社ばかり引っかかるようです
フルネームを教えてくださいませんでしょうか?
お手数をおかけしますがよろしくお願いします
84名前は開発中のものです。:04/04/16 18:23 ID:ApfI3JPr
>>83
Direct3Dだよ。

基礎知識のページに
ジオメトリやトランスフォーム、ラスタ化ルールとか
入門に必要な情報はみんな書いてある。
8581:04/04/16 18:43 ID:6nIx9Yzb
ありがとうございます!! Direct3Dですね
MSのサイトが引っかかりました。
ttp://www.microsoft.com/japan/msdn/academic/Articles/DirectX/01/

基礎知識のページとはここでいいでしょうか?
あとDirect3Dのヘルプにも詳しいそうですね。
86名前は開発中のものです。:04/04/16 19:29 ID:ApfI3JPr
>>85
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/DirectX9_c/directx/graphics/programmingguide/gettingstarted/gettingstarted.asp

ここだけど、3Dトランスフォームとかの文章がなくなっちゃってるね。
DirectX7.0迄のマニュアルを落としてきて参照するのがいいかと。
8781:04/04/16 20:07 ID:6nIx9Yzb
>>86

ありがとうございます。
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の基本の情報を知りたかったのでこちらは本当に助かりました。
本当にありがとうございます。
8881:04/04/16 20:15 ID:6nIx9Yzb
CMAGAZINEの 2000年 1月号にDOOMの仕組みと
2002年 6月号に3Dダンジョンの作成と表示の基本アルゴリズム(DOOMも絡む)
がありますね

これを求めたいと思います
他の人の参考になれば。
89名前は開発中のものです。:04/04/16 21:26 ID:1fUHdakN
>>81
似非3DならダンジョンマスターとかWizardryとかそっち系のほうがいい気がしないでもない
90名前は開発中のものです。:04/04/16 22:18 ID:CYG69g6n
>>89
その手のも作っては見ますが、升目式ダンジョンではなく同じような感じの道が
ないようにしたいわけです。
なんとなくそらで道を覚えられるみたいな感じに出来たらと考えていますので。
91名前は開発中のものです。:04/04/16 23:40 ID:bAbJcDxy
>81
キャノンからでたRenderWareの分厚い本。
3Dエンジンを作るにあたって生じた技術資料を適当にまとめて
「プロご用達!」などとうたって1万前後で販売!
CDにはRenderWareが入ってるが、これを使ったソフトを配布してはならないという罠。
クラリオンに聞くと「学習用ですので」。氏ね。
9281:04/04/17 00:32 ID:KupmHoyY
>>91
それってプロ御用達と学習用と矛盾してますな。誰が見てもわかるところに
これを使ったソフトの配布禁止と書かれていて、学習用と書かれているのでしょうか?
(だったらこんなに怒るわけないよな……)
とあるソフトのマニュアル的なものなんでしょうねえ

そういう3Dプログラミング物多いですよね 以外と。
93名前は開発中のものです。:04/04/17 01:28 ID:a3IXbRjM
>>81
3Dプログラミングってどう言ったレベルを想定してるか分らないが
自前実装って言うならラスタライズやら必要だよね?

"コンピュータグラフィックス 理論と実践"

辺りで良いんでないの?12000円と手頃だし。
特定ハードに依存(API等)しない
3Dの数学的理論、3Dの工業的理論(汎用的なコンピューター理論)
を身に付ければ、自前実装はスグできるようになる。

その前に、実装実機の理解は必須だと思うけど。
94名前は開発中のものです。:04/04/17 03:02 ID:mkUkAsvi
>>93
この本ってさ、1つの話題に対しての密度薄すぎねぇ?
技術の名前だけのってて「はぁ?こりゃなんも説明できてねぇよ」
ってのが多々あるぞ。
式出したらせめて各変数の意味ぐらい書いとけってのが多々あってムカツク。
95名前は開発中のものです。:04/04/17 05:17 ID:a3IXbRjM
>>94
自分のレベルに合わない本は、皆そう感じる物じゃない?
それに、自分の望むチャプターのみで、更にそれが根ほり葉ほり事細かな内容ってありえないでしょ。

DirectXのhelp読んで、
>1つの話題に対しての密度薄すぎねぇ?
>技術の名前だけのってて「はぁ?こりゃなんも説明できてねぇよ」
>式出したらせめて各変数の意味ぐらい書いとけ
何て言い出す人間の大半は
プログラムとC++と3Dプログラミングの基礎を持ってから読もうねって、感じの人間が多いと思う。
それと同じかな…?って思うけど…

違うなら、不満や不足に感じる部分は、他の本や他の情報源、
そして自分の頭で解決ってなる物でしょ?
幾ら何でも、答え頂戴、全部教えて、クレクレって方針はありえないでしょ。

普通に数学の基礎とハードの基礎とプログラムの基礎を持って読めば
十分な内容でしょ、12000円程度の価格なんだし。

96名前は開発中のものです。:04/04/17 07:53 ID:Le5gnz+v
>>94
あんた序文や前書きちゃんと読んでるか?
俺はこの本は持ってないが、
同系統の「Real-Time Rendering」だと
「各トピックについて深く知りたい場合は、
参考文献を充実させたのでそちらを参照してくれ」
ってちゃんと書いてあるんだが。
97名前は開発中のものです。:04/04/17 09:41 ID:VEtZ9nxQ
>>95 >>96
はてさて、どちらが正しいのやら。
>>95の方が読んだ事無いように見えるけど
98名前は開発中のものです。:04/04/17 16:07 ID:a3IXbRjM
>>96
>同系統の「Real-Time Rendering」
両方もってるが、全然同系統じゃないぞ。
Real-Time Renderingの方は原本の奴で英語だけど。

コンピュータグラフィックス 理論と実践は
主にはCGをコンピューターで扱う原理を解説してる。
点を定義してそれらを結んでピクセルを塗る原理(ライスライズ)とか
つまり、普段はハードやらAPIが処理してる低レベル部分の理論的説明が主。
つまり、3Dソフト自体を開発したり、
DirectX使わないでWindowsでポリゴン自力描画(WinAPIは使うけど)実装したり
(勉強で昔やった)って勉強が出来る。

Real-Time Renderingはその名の通り、もうダブルバッファ前提で
いかにリアルタイムで処理時間を稼ぐとかの技術が主にある。
しかも、参考文献ってさ、文献として上がってる
本の著者と名前が載ってるだけだと思うが?

コンピューターCGの本と3Dプログラムの本、同系統では無いと思うけど?
99名前は開発中のものです。:04/04/25 12:00 ID:dZ+uD0u1
戦闘シュミレーションゲームつくるのに
Cは向いていますか?
またいいツールとかありませんか?
100名前は開発中のものです。:04/04/25 12:06 ID:JYGTOjaq
どういう物かはわからんが言語はまず関係ないと思った方がいいぞ
101名前は開発中のものです。:04/04/25 12:14 ID:dZ+uD0u1
ということはCをちゃんと使えるようにさえなれば
作れると言うことですか?
今勉強中ですが、Cってゲーム作れるのか?
と不安になってきました。
絵の表示の仕方がいまだにわかんないし・・・
102名前は開発中のものです。:04/04/25 12:17 ID:JYGTOjaq
逆にいえばその程度でつまずくなら(失礼)Cにこだわる必要ないんじゃないの?
絵を表示するコードが1行の命令で、画面の初期化もらくちんって環境は
世の中にたくさんあるよ。

Cの利点は何でもやろうと思えば細かいことは出来るというだけで
その利点もハードガリガリアクセスする環境ならともかく
Winとかだとほとんどメリットないね
103名前は開発中のものです。:04/04/25 12:29 ID:dZ+uD0u1
そうですか・・・
ちなにみ皆さんはこういうゲームを作るときは
どの言語を使ってるんですか?
104名前は開発中のものです。:04/04/25 13:14 ID:JYGTOjaq
確かに言語によってと喰い不得意はあるものの
結局使い慣れた物が一番だと思う

最近はスクリプト系も結構あるから言語になれて内人はそっちがいいかな
俺はやはりC/C++を長くやっていたから言語体系が近いjavaとCだな
C++で中途半端なオブジェクト指向やるくらいならjavaいったほうがいいし、
シンプルにガリガリ叩くときにはCって感じ
javaだと画像表示やらシステム部分に時間をかけないでゲームの処理のみに
専念できてる感じがいい
Cとかはもちろん必要コード量が多くなるのでライブラリ整備が必須になって
変にシステムをいじってばかりでゲームに専念できないことも多い^^;

>>103がさわれそうな環境はC以外になにかあるの?
画像表示からうまくできてないということはDIBやらDirectXから出来るようになるには
かなり時間かかると思うから他を勧めたい
105名前は開発中のものです。:04/04/25 13:34 ID:dZ+uD0u1
親が自営でC++のプログラマやっているので
もっとも勉強しやすい環境にあるのはCだと想います。

こだわりと言うわけではありませんが、
できればCで作りたいと思っています。

>画像表示からうまくできてない
まだ勉強中なのでそこまで達していなのかもしれません
一応C入門の本は1冊読んだのですが・・・
106名前は開発中のものです。:04/04/25 14:07 ID:vDhsPj0U
「高校受験したいんです。小学校の課程は修了しました」
みたいなもんだな。

CでやるとしてもまずはコンソールじゃなくWindowsプログラミングやらんといかんし。
まーいっそコンソール&glutって手もあるが。
107名前は開発中のものです。:04/04/25 14:22 ID:JYGTOjaq
そもそも言語が分かってさらにGUIまわりも分かっていても
ゲームプログラムが全く出来ない人もたくさんいる

ゲームに必要な知識と、そのプラットフォームで絵を出すとか
システムに必要な知識は全く別物なわけで

逆にスタンドアロンのゲームは作れるけどウインドウシステム上での
ゲームは作れないという人もいる

今のちみの状態は分からないことが多すぎかと
言語自体も本読んだというレベルなら表面上のものだけだと思うので
ポインタガンガン使えるというレベルまで言ってないと思われ

一番重要なのは目的がゲームを作ることなのか、それともC言語を
勉強したいのかってところだよ

昔はC言語&ゲーム作りたいってことが多かったと思うけどこれは
生産性を上げつつマシンスペックが低かった時代これしか選択肢がなかっただけ
8bit時代BASICでゲーム作って遅かったのでしかたなくハンドアセンブルへ
そして16bitになりメモリが多少裕福になってC言語へって人は多いはず

言語が目的ではないんだよ
それにプログラマは複数の言語が使えるのが普通
1つの言語で今後もいくとは思えない
108名前は開発中のものです。:04/04/25 14:52 ID:dZ+uD0u1
とりあえず今ある知識でゲーム作ろうというのが、
かなり無謀だったみたいですね。
もちろんゲーム作成が目的ですが、
今は置いておいて、Cをがんがん使えるようになろうと思います
109名前は開発中のものです。:04/04/25 15:36 ID:RwxVe3k8
まずCをしっかりできるようにして、
次にC++をいくらかかじって、
あとはDirectXに進めばOK。

このQ&Aってもう何度もされてるよね。
ゲームプログラミングのまともな入門サイトor本がないということだろう。
どうにかならないもんかね?
110名前は開発中のものです。:04/04/25 15:47 ID:JYGTOjaq
昔はパソコンでのプログラム=ゲーム作るだったからな
それほど山のように雑誌はあった

ベーマガ、MSXFANなど読みやすくて分かりやすいシンプルな物がないからね
あとは個人レベルで作る物と商業レベルとでできあがる物が違いすぎるというか

でも昔から初心者向けと上級者向けはあってもその間の中レベル向けが
ほとんど存在しないと言う問題もあったよ

たとえばC言語は分かって絵も描画できる、でも具体的にゲームで必須な
垂直同期がなんなのかとかラスター割り込みがどうとかそういった物は
なかなかいいものはなかった

DirectXやるときC++よりCでやったほうが楽な気がする
111名前は開発中のものです。:04/04/25 15:58 ID:+MyYZ79o
楽というか
綺麗な使い方が出来ないと思うC++
112名前は開発中のものです。:04/04/25 16:18 ID:itt2Cin5
綺麗な使い方ってどんなの?
DirectXやったことないけど、呼び出すだけだからどっちでも一緒じゃ?
113名前は開発中のものです。:04/04/26 09:29 ID:YvjKmIIw
CだとCOMを間接的に呼ばなければならないので、
綺麗な使い方には絶対にならない。
114名前は開発中のものです。:04/04/26 15:22 ID:AM2u3eHS
>>113
いや、そういうことじゃなくて、アレだろ?
C++なんだけどC風に組むとかそんなんだろ。多分。

でも、C++風に組んだ方が楽だと思うけどね。俺は。
115名前は開発中のものです。:04/04/28 01:45 ID:LxpA+NNA
>>111
潔癖主義かつ無能なら何を使っても汚く感じるだろう。
116名前は開発中のものです。:04/04/28 15:15 ID:ELYXrsLP
いや、C++は特別だろ。
117名前は開発中のものです。:04/04/28 20:35 ID:brIWsk8J
俺はC++でDirectX使ってるが、デザインはうっとりしてしまうほど綺麗にできてるよ。
なにが汚くなる可能性があるのか具体的に言ってみろばかー
118名前は開発中のものです。:04/04/28 20:38 ID:YnOaqFHo
一人よがり
119名前は開発中のものです。:04/04/28 20:52 ID:brIWsk8J
思わずモニタにティンコこすりつけたくなっちゃうくらい
清純可憐で微妙なエロスの漂う穢れのないコードかけてるっつーの
120名前は開発中のものです。:04/04/28 23:03 ID:qRKYM2ci
じゃぁ見せろ
121名前は開発中のものです。:04/04/29 00:07 ID:klVfh8nk
>>116
特別ですね。
言語レベルで厳格な貞操帯を装着しないと、猿のようにオナーニを
いえ独り善がりな汚いコードを書いてしまう無能には「C++は特別」です。
特別汚いコードを書ける言語です。彼等にとっては大きな問題です。
貞操帯を装着しなくても問題の無い一般人にとっては瑣末な問題です。
122名前は開発中のものです。:04/04/29 01:29 ID:ZbXlsRAe
平和なやつらだ。C#とかDとか試してみたことないんだろうな。
123名前は開発中のものです。:04/04/29 03:54 ID:w6BRdvWr
Dは処理系がひとつしかないし、バグバグだからなぁ
124名前は開発中のものです。:04/04/29 04:02 ID:tELycjco
class CCharacter : public CEntity, public CRenderNode, public CCollisionNode {};

CEntityは自律行動を行うクラスで主にAIの更新を行う仮想関数Update()を持つ。
CRenderNodeはレンダラに登録され描画を行う仮想関数Render()を持つ。
CCollisionNodeはデフォルトの当たり判定を実装してあって衝突を検出したら仮想関数Collide()を呼び出す。

関連性のない3つのクラスからの多重派生ですがこれは邪道でしょうか?
また、みなさんはこの3つの要素をどの様にクラス化してますか?
ご意見お聞かせくださいませ。
125名前は開発中のものです。:04/04/29 04:54 ID:ffNyJU4j
>>122
平和な奴だ。糞汚いコードを書いてばかりの低脳に
Java、C#、Dを試させてみたことがないんだろうな。

言語仕様上の規定(貞操)が厳格であるために
クルクルパーな悪性のハックは多少は減るが
やっぱりおかしなコードを書くんだよ。

馬鹿に付ける薬は無い。言語変えても駄目な奴は駄目。
126名前は開発中のものです。:04/04/29 05:01 ID:dU1CdeTe
>>124
俺の場合、

class CCharacter : public CEntity

CRenderNode,CCollisionNodeはCCharacterのメンバ

理由は、描画リソース、コリジョンはいらないキャラのいるから。
例えば、ジェネレータとか。

とある理由で、CEntityをメンバにした事もある。
127名前は開発中のものです。:04/04/29 05:08 ID:klVfh8nk
>>124
邪道・正道にはとやかく言及しないが
「〜Node」な2つの基底クラスの間で名前衝突が起きないってのが
ぶっちゃけあり得ない。背後にぐちゃぐちゃなメソッドの群れの気配がする。
128名前は開発中のものです。:04/04/29 08:15 ID:0gA9laqu
>>124
肝心なのはその上位で、CCharacterのインスタンスの集合を管理しているクラスが
こいつをどういう風に扱うかにあると思う。
誰がどうやって生成して、どういうリストに組み込まれて、誰がメソッドを呼び出して、
誰がどうやって破棄している?
129名前は開発中のものです。:04/04/29 09:54 ID:r5N/wC7K
>>124
俺はちょっと違うなCharacter以外はCharacterのメンバにする。
ちょっと>>124は機能とオブジェクトをいっしょにしてるのがよくなさげ。
継承で考慮するのはオブジェクト指向の説明でよく出てくる
犬と猫は哺乳類で・・・云々の話だけでいい。
もしEnemyなんてのが出てきたら、Characterから継承するって感じの使い方かな。

EntityやRender、Collisionなんてのは明らかに
Characterが所有しちょるものなのでメンバでいいと思う。
Characterより上の方のクラスに入れるかもしれないものもあるね。描画とか。

まあ、クラスのまとめ方が、複数のクラスの処理を一括してやろうと頑張りすぎてて、
かつ、これから継承するものの違いまでカバーしようとしている感じがする。正直うまくない。
まあ、処理で考えるなら、
衝突の検出なんてのは関わるもの同士によって必要な情報が全然違うから
一括処理なんて必要ないならしないほうがいいと思うよ。(仕様変更あると思うしw)
逆に描画なんてのはどれも同じ処理になるはずじゃね?
Characterもしくはその基底クラスがRenderなんて関数をもってればそれでいいような気がする。

AIクラスなんていったら、結構隔離できるクラスのような気がするが
実は他のクラスとの関連が一番多くなるクラス、また、他のクラスとの関連も一番特殊になるクラスだと思う。
何せAIの判断材料に他のクラスの情報が確実に必要になるからね。
AIってのはCharacterそのものになると思うんだけどどうだろうか?
例えばCharacterから範囲10以上に近づいたら、なんてやったらAIにCollisionのデータを使った衝突の検出が必要になるよね?
こういう処理自体をライブラリにするのはいいと思うけど、それに必要になる材料はもろにクラス同士の設計の関連になるわけで略w
130124:04/04/29 13:08 ID:tELycjco
>>126
CCollisionNodeをメンバにするのは考えましたが、
CRenderNodeをメンバにしてしまうと自身で描画コードを持てないので
描画情報を登録して後で一括描画してもらうって形ですよね。
この場合ちょっと複雑な事をやりたい場合にCRenderNodeに手を加えるハメになりそうですがどうでしょうか?
2Dなら描画形態は限られてくるのでメンバに持ってしまうかもしれませんが。
131124:04/04/29 13:09 ID:tELycjco
>>127
〜Node系は特定の機能を保有する事を保証するインターフェイスのような物なので今のところ名前の衝突はないですが、
拡張した場合に仰るとおりのぐちゃぐちゃなメソッドの群れになる可能性は大いにありますね。
132124:04/04/29 13:09 ID:tELycjco
>>128
生成は各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);

なんだか鬱設計ですね。
133124:04/04/29 13:09 ID:tELycjco
>>129
>>ちょっと>>124は機能とオブジェクトをいっしょにしてるのがよくなさげ。
>>EntityやRender、Collisionなんてのは明らかに
>>Characterが所有しちょるものなのでメンバでいいと思う
コリジョンや描画をメンバにするのはある程度納得出来るのですが、
自身の行動をメンバに委譲するってのはちょっとイメージが沸きません。
状態のみを委譲してそれを受けて自身の行動に変化をつけるのでしょうか?
たぶん違うぽ(つд`)

ゲーム内に登場するオブジェクトの殆どはCCharacter派生クラスだと思うんです。
確かに画面には表示されないステージ管理クラスや当たり判定を行わないスコア表示部分などはありますが、
それらは本当に限られてくるんじゃないでしょうか。
共通のインターフェイスやリソースを含んだCCharacterを定義して全てのキャラクタをそこから派生させた方が、
より汎用性があるかなーと思った訳です。
134名前は開発中のものです。:04/04/29 15:51 ID:r5N/wC7K
>>132
管理クラスって作った奴が思うほど役に立たないことが多いから
もうちょっと設計考えて見た方がよくね?

>>133
>自身の行動をメンバに委譲するってのはちょっとイメージが沸きません。
どう組んでるのか詳細までは知らないけど、
結局、プロペラ付けたら空を飛んで欲しくて、車輪付けたら道を走ってほしいんでしょ?
ならそういう使い方でいいじゃない?

>共通のインターフェイスやリソースを含んだCCharacterを定義して全てのキャラクタをそこから派生させた方が、
>より汎用性があるかなーと思った訳です。
それはいいんだけど、継承を継承らしく使おうよって話なんだけど。
別にこう↓組んでも組めるっちゃあ組めると思うよ。
class CCharacter : public CEntity, public CRenderNode, public CCollisionNode {};
ただわかりづれぇって一点を除けばw
135名前は開発中のものです。:04/04/29 18:18 ID:0gA9laqu
>>132
とりあえずそのノリなら漏れはついていけるから安心していいよ
邪道かどうかは別として、管理される側が自分を管理する側を知っているっていう
状態は改良できるとこだと思う
136名前は開発中のものです。:04/04/29 18:20 ID:K2EIDtC0
おまえらそんな議論は学校いってるうちにすませとけや
137名前は開発中のものです。:04/04/29 20:30 ID:klVfh8nk
>ゲームプログラミング相談室【Part6】
              ~~~~~~~~
問題は何もない。続けて良い。
138名前は開発中のものです。:04/04/29 21:45 ID:0gA9laqu
邪道かどうかは別として、衝突判定が特別扱いされているのが気になる
なんでentity間のやりとりの一種として扱わないの?
139名前は開発中のものです。:04/04/30 02:06 ID:zWQ1T1uk
>>130
スマン。やはり、CRenderNodeがどういったものか、理解せずに
答えたので、見当違いだったかも。

CRenderNodeは描画機能?をもっていて、描画する対象のインスタンスではない。
て事かな?
因みに俺はインスタンスを含むと思っていたので、あくまでも、メンバ(参照用のポインタ)という扱い。
(キャラと描画物が1対1ではないという事)

とあるミドルウェアでは、大概のクラスが、シーングラフノードの派生。という構造もあったし、
そういうのも面白いとは思うよ。
140名前は開発中のものです。:04/04/30 02:41 ID:TdoOcGaP
これっ
141124:04/04/30 04:19 ID:r3mzBY0g
>>134
>>管理クラスって作った奴が思うほど役に立たないことが多いから
全AI更新→全衝突判定→全描画
こんな感じにUpdate()やRender()ってのは一括して呼ばれるのが普通だと私は思ってます。
誰かが管理して順番に呼び出した方がスッキリしているような気がしますがどうでしょうか?

管理クラスがない場合って生成されたEntityのUpdate()はどうやって呼ばれるのだろう。
各Entityを木構造のノードにして子or兄弟のUpdate()を連鎖的に呼び出すのか、
それともリストをグローバルで持ってメインループか何処かで呼び出す?
誰かに管理させた方が不用意にノードにアクセスされないだろうしこれが普通かなーと
思ってたんですが一般的ではないんですかね。

>>結局、プロペラ付けたら空を飛んで欲しくて、車輪付けたら道を走ってほしいんでしょ?
この部分の話の流れとしてはCEntityから派生せずに
メンバとしてCEntityを持ったほうがいいよって解釈でよろしいでしょうか?
実際に移動を行う処理やアニメーションを行う処理なんかはAIと分離すべきだと思うのですが、
AIの部分をメンバに委譲して且つ自分ではUpdate()を持たないとなると
自分自身は何も行動を起こせないただの入れ物になりますよね?
うーん。

>>それはいいんだけど、継承を継承らしく使おうよって話なんだけど。
それが引っかかってたので質問した訳です。そしたらその他の部分でボロが出まくる出まくる(;´Д`)
CRenderNodeやCCollisionNodeをメンバに持つってのはいいんですが
CEntityをメンバに持つメリットというか意味が理解できないのです。
142124:04/04/30 04:33 ID:r3mzBY0g
>>135
>>邪道かどうかは別として、管理される側が自分を管理する側を知っているっていう
>>状態は改良できるとこだと思う
でもリスト構造とかってそういう物ではないんですか?
ああ、ノード自身が管理クラスに登録するってのがマズイ訳ですね。
その点CEntity以外をメンバとして持った場合は
renderer.Add(this);
はアリですよね。
143124:04/04/30 04:35 ID:r3mzBY0g
>>135
>>邪道かどうかは別として、衝突判定が特別扱いされているのが気になる
自分の中では一括処理ってのが根底にあったので特別扱いになってます。
全ゲームオブジェクトの行動が終わってから衝突判定を一括で行うのでどうしても
管理クラスに自分を登録して後で判定を実行する必要があったんです。
Update()の中で衝突処理も行うとすればAI処理の一部として実装できますし、
自由度は増すと思いますがこれはゲームの規模や構造にもよりますよね。
144124:04/04/30 04:38 ID:r3mzBY0g
>>139
すみません、説明不足だったようですね。描画対象ではないです。
CRenderNodeはインターフェイスです。基本的にvirtual void Render() = 0;が定義してあるだけで、
レンダラがこれを任意のタイミングで呼び出します。
派生クラスはRender()を実装して1つもしくは複数のモデルをデバイスに対して描画してます。
145名前は開発中のものです。:04/04/30 05:47 ID:iUVDJkHq
>>141
>管理クラスがない場合って生成されたEntityのUpdate()はどうやって呼ばれるのだろう。
>各Entityを木構造のノードにして子or兄弟のUpdate()を連鎖的に呼び出すのか、
ん?処理の順番って基本的にこうやらないとまずくないか?
だって、親子関係では親から処理を実行していくようにしないと矛盾がおきないか?
子がワールド座標を欲しがるとき、親がすでに正しい位置に動いてくれていないと
子のワールド座標はバグるはずだけどどうよ?

>CEntityをメンバに持つメリットというか意味が理解できないのです。
俺はEntityクラスはキャラクタの行動を制御するものだと思ってたんだけど
実はただのAIクラスなの?
146135:04/04/30 12:37 ID:LSXN/0+O
>>142
管理される側が管理者のインスタンスを握っていて、
自分の登録と削除だけしかさせてもらえないならいいけど、
そうなってはいないでしょう?管理者を管理するクラスのために用意してある
メソッドにも自由にアクセスできるようになってしまっているはず。
インスタンスが無駄にグローバルになってるとか、
privateになっているべきメンバがpublicだったりするような程度でマズイです。
ヘッダのインクルードもクロスしてるでしょう。
そういうのはできるだけなくしていったほうがいいと思うよ。

>>143
シューティングゲームをつくってるのかな?
この衝突判定は「何に」当ったたのかみたいなことは分からなくてもいいの?
引数で衝突相手をもらうとしても、 Collide(const CollisionNode&) にならざるをえないし
これでは大抵は困ると思うけども
147124:04/04/30 19:52 ID:r3mzBY0g
>>145
管理クラス内にリストを持って実行順位毎に実行させるのと(現状はこれ)、
木構造にしてルートのUpdate()を呼んでやるのってのは実質的に同じだけど
木構造の方が何かと便利だよって事でしょうか。
何にせよルートノードは全ての子から見えるわけですよね?
インスタンスを晒さずに特別なアクセス関数を作るにしても
結局管理クラスと同じような存在になっていまうと思うんですがどうでしょうか?

>>実はただのAIクラスなの?
Entityは毎フレームUpdate()が呼ばれ続けるただのAIクラスって認識なので
EnemyはCEntityから派生させている訳です。
状態遷移や座標の更新、子entityの生成などをUpdate()内で行ってます。
148124:04/04/30 19:59 ID:r3mzBY0g
>>146
管理される側がインスタンスを握っているってイメージでは無いんですが、
管理クラスはシングルトンになっててほぼ全てのゲームクラスから見えてます。
単にリストのノードってのであればノードがリストのインスタンスを
知っている必要はまったく無いですが、
個が主体となるEntityでは知らないと何も出来ないですよね?
隠蔽さえ出来ればいいのであれば管理者のインスタンスを隠蔽して登録、削除は専用の
グローバルな関数経由で行うってのでも現状よりはマシなのでしょうか。

はい、シューティングです。
現状ではまさに Collide(const CollisionNode&) これですね。
CollisionNodeに相手のポインタを仕込ませているので
そのポインタ経由で相手の情報を得てますがやっぱりマズイでしょうか?
149名前は開発中のものです。:04/04/30 22:20 ID:iUVDJkHq
>>147
>管理クラス内にリストを持って実行順位毎に実行させるのと
この管理クラスって結局Updateを毎回読んでやるただそれだけのクラスなんだよね。
はっきりいっていらないんじゃないかなぁ。ってこと。
正直、完全自己完結処理な物体ぐらいしか恩恵が全くといっていいほどないじゃん。
一度管理クラスを捨てて1から考え直してみたらどうかな?

>Entityは毎フレームUpdate()が呼ばれ続けるただのAIクラスって認識なので
Entityクラスを継承してCharacterクラスができてるのはなんか
オブジェクト指向的にわかりにくくないか?(C++の機能としてできるって意味とは別にして)
基本に戻って犬と猫は哺乳類でってところから考えると、
キャラクタはAI(脳みそ)でってなってちょっと変だ。
キャラクタは脳みそをもっていてって考えた方が綺麗に組めるんじゃないかな?

>>148
>管理クラスはシングルトンになっててほぼ全てのゲームクラスから見えてます。
こりゃグローバル変数と何も変わらないよ。
これが駄目だとわからないとなると、ちょっと修行が必要。
ちょっと面倒だけど、引数から渡すように改善できないかな?
150名前は開発中のものです。:04/04/30 23:35 ID:h3JIWfFc
前にも引数わたしの話がでてたけど、実際やってみるとかなりしんどかったぞ

例えば、引数を渡した関数から、他の関数を呼ぶときは同様に引数を渡さねばならない。
その関数から他の関数を呼ぶときも(以下略)
リファクタリングする度に、引数付き関数が増えていく。

さらに、引数がいらない関数から、引数がいる関数を呼ぶ必要がある時は、
呼び出し元を辿って全てを引数付き関数に変更せねばならない羽目に。
結局気づいてみると、ほとんどの関数が引数つきに。

一本の大きな関数で書ききるなら行けるが、
そうでない場合は、地獄を見ることに……


実際、引数わたしで上手く行っている人の話が聞きたい。
151名前は開発中のものです。:04/04/30 23:46 ID:FlQn5mKE
>>150
>例えば、引数を渡した関数から、他の関数を呼ぶときは同様に引数を渡さねばならない。
>その関数から他の関数を呼ぶときも(以下略)
>リファクタリングする度に、引数付き関数が増えていく。

漏れもハマったことあるな(w
152名前は開発中のものです。:04/05/01 00:08 ID:AwZfI0KO
まぁ、この辺はバランス感覚というか取捨選択になるでしょ。
何でもかんでもメッセージパッシングでやればパフォーマンス落ちるのと同じで。
 
膨大な数のインスタンスを高速処理せねばならないエンジン部に近いなら
美しさに伴う冗長性を嫌って汚いハックに走らざるを得ないし。
153名前は開発中のものです。:04/05/01 00:11 ID:AwZfI0KO
s/美しさ/OO的美しさ/
154名前は開発中のものです。:04/05/01 00:20 ID:Jz0Md+j7
>>150
構造体で渡していくらか防げるかも。
でも、俺は引数増えても気にしないほうだなぁ。
DirectXがああだからしょうがないって言えばそうなんじゃない?
155名前は開発中のものです。:04/05/01 04:02 ID:HtCFg7B3
>>150
綺麗か汚いかじゃなくて、何を言いたいのかを考えてインターフェイスの仕様は決めるべき。
まして2chの名無しがうるさく言っていたからなんて理由では(ry

その参照の元が、そのインスタンスの一生のうちに変わる可能性があるということを示唆
するために、毎回参照を渡すようにしなさい。

その参照の元が、そのインスタンスの一生のうちに変わる可能性がないということを示唆
するために、コンストラクタで受け取り自分のメンバに格納しておくようにしなさい。

どちらが美しいとかどちらが汚いとかではない。
156名前は開発中のものです。:04/05/01 04:56 ID:HtCFg7B3
>>148
>個が主体となるEntityでは知らないと何も出来ないですよね?
管理者のインスタンスで何をしたい?他entityの検索とかかな。

>現状よりはマシなのでしょうか
インスタンスを生成した人がその人の好きな場所に登録できるのがいちばんよいよ。本当はね。

>CollisionNodeに相手のポインタ
どういうクラスへのポインタ?
157124:04/05/01 06:39 ID:bkNOTeqK
>>149
そうですね。実際にコード化してみて比較しながら考えてみます。

>>キャラクタは脳みそをもっていてって考えた方が綺麗に組めるんじゃないかな?
理想はそうかもしれませんが実際キャラクタが自分の手足に命令を出したほうが
コード的に自然な作りになりませんか?
頭脳をメンバとして持った場合、親(キャラクタクラス)経由で手足クラスに命令を出す
となると複雑になりませんかね。

>こりゃグローバル変数と何も変わらないよ。
変わらないですね。
生成&破棄が頻繁に行われるオブジェクトや状態が変化するものに関しては隠蔽すべき
だと思うんですがシステムで唯一無二の存在であろう管理クラスくらいはグローバルでも
いいと思うんですがどうでしょうか?
管理クラス的なものはそんなにポコポコ作らないでしょうし。
158124:04/05/01 06:42 ID:bkNOTeqK
>>150
実際それをやって幸せになりました?
159139:04/05/01 06:50 ID:9Tu48i71
>>144
ああ、そんな気はしてたが、
virtual void Render() = 0;が定義してあるだけ。か。
俺ならCGameObjectてなクラス作って、メゾットにしちゃうか。
Update()も同様に。

CRenderNodeという名前は、紛らわしいね。tree構造を連想させられる。

管理クラスは、俺も用意してる。
シングルトンで、ファクトリパターンクラスの派生。

作ってるものも同じ。シューティング。
AIは用意してないけど、その辺りを用意すれば、アクションゲームもOK。
ただ、AIをハードコーディングしようとは思わないが。
ありものを作るなら、大抵、コリジョン判定、条件判定の組み合わせが違うだけだから。
160124:04/05/01 06:58 ID:bkNOTeqK
>>156
>>管理者のインスタンスで何をしたい?他entityの検索とかかな。
そうですね。
Entity間のやり取りでも管理者をかませた方が不正アクセスをチェック出来たり
デバッグ用のアクセスログ吐かせたり延滞メッセージ的な通知とかも出来そうだし。
仲介役が居ることのメリットはあるんじゃないかと思います。

>>どういうクラスへのポインタ?
ここで言うところのCCharacterですかね。
この部分は正直変な事になってると思います・・・。
161124:04/05/01 07:22 ID:bkNOTeqK
>>159
CGameObjectを管理するクラスがあってそのクラスがレンダラを持ってるんでしょうか?
例えば管理クラスが全ゲームオブジェクトのUpdate()を呼んでからレンダラの参照なんかを
Render()に渡してあげるとか。

AIはハードコーディングしてしまうかも。
部分的に再利用可能な形にする事もできるしちょっとした色付けは外部ファイルから
入力してあげれそれで十分かなーと。
162139:04/05/01 07:48 ID:9Tu48i71
>>161
実際、今作ってるものには、CGameObjectというクラスはないんだけど、、。

CGameObjectもしくは、CGameObjectManagerが、必要なタイミングで
(生成時、初期化時、視界内に入ってきたとき等々)
に、描画エンジンのmanagerを使って、描画オブジェクトを生成。と。

で、擬似コード
app::Update(frame)
{
描画manager->Update( frame );
GameObjectManager->Update( frame );
}
と。
描画機能と、ゲーム(CPU)的な機能は分離してます。
163139:04/05/01 07:53 ID:9Tu48i71
言葉足らずだったかな?
要するに、CGameObjectは、レンダラ機能はもたず、
レンダラがもつ描画ノードの参照を持ってるだけ。
update()時も、描画用のセットアップをしているだけ。
164名前は開発中のものです。:04/05/01 08:16 ID:Jz0Md+j7
>>157
>頭脳をメンバとして持った場合、親(キャラクタクラス)経由で手足クラスに命令を出す
>となると複雑になりませんかね。
どうして?変わらないと思うけど。
手足クラスが何やるか知らないけど、頭脳と手足が認識できる構造なら
どういう処理にしろクラスにしちゃった方がわかりやすいじゃん。

>システムで唯一無二の存在であろう管理クラスくらいはグローバルでも
>いいと思うんですがどうでしょうか?
駄目だよ。グローバル変数が駄目な理由も理解してないな。
システムで唯一無二のものを直接コードに入れちゃうってことは
そのクラスはそこでもう身動きがとれなくなっちゃうってことだよ。
どこでもどんなタイミングでもアクセスできちゃうし、
一番怖いバグが出るパターンだよ。
165名前は開発中のものです。:04/05/01 10:28 ID:W4jVRbBS
>>158
なりませんでした
概念だけは美しいが、コードは美しくなく汚くなっただけ
なんだかC言語で、OOやったときのような気分
166名前は開発中のものです。:04/05/01 11:23 ID:Jz0Md+j7
>>165
なんでそう見た目だけにかき回されるのか激しく疑問。
いくらコードが美しくたって概念が糞なら糞。
>>155のいう通りだろ。
167名前は開発中のものです。:04/05/01 11:31 ID:W4jVRbBS
むしろ、実装してみると、概念の方があなたの言う「見た目」に見えてくる
>>150みたになるのを防ぐ方法が挙げられなければ、
スパゲッティなコードになることを回避できない。
168名前は開発中のものです。:04/05/01 11:33 ID:W4jVRbBS
>むしろ、実装してみると、概念の方があなたの言う「見た目」に見えてくる
わかりにくいな

むしろ、実装してみると、概念にかき回される、と言いたい
169名前は開発中のものです。:04/05/01 11:42 ID:Jz0Md+j7
>>167
じゃあ構造体でわたせば?(これで解決するよね?)
170名前は開発中のものです。:04/05/01 11:53 ID:HtCFg7B3
>>160
>仲介役が居ることのメリットはあるんじゃないかと
なにもできないわけじゃないなら、管理される側からは管理している側が見えないように
しておいたほうがよい。管理する側の何かを変更をしたい時に、
管理される側にはその変更によって何も影響がないということを確信をもって取り組むことができる。
そのメリットの方が仲介役と管理者がいっしょにいることより大きいと思うよ。

もしも仲介役が必要ということなら仲介役クラス、というかインターフェイスをつくって
entity生成時に持たせてあげるようにしたらいい。

>>164
>グローバル変数が駄目な理由も理解してないな。
グローバル変数は、そのクラスが変更されたとき、膨大なコードの全体に対して
影響が及んだかどうかチェックして問題がないことを確信がもてる精神力が
あるのなら使える。ぼくは精神力に自信がないのでシングルdをさらすことはせず
必要とされる単純な処理だけをstaticメソッドとして公開してるyo
171名前は開発中のものです。:04/05/01 12:28 ID:HtCFg7B3
まぁ最初はリソースやコンテクストをいちいち引数渡しする形でデザインしておいたほうがいいんじゃないか
そのクラスのそれ以外のメソッドがリソースやコンテクストなしでも動けるなら、そのほうが。
んでクラスの全部のメソッドがそのリソースやコンテクストなしでは動けないということが判明したら
コンストラクタでもらうようにしては。
172139:04/05/01 12:31 ID:9Tu48i71
>>167
俺の場合、「やばい!」と感じたらw
とりあえず、クラスにして渡す。

作業してて「これやばいな」と感じたら、そのまま突き進まず、
別の回避策を考える事にしてる。絶対可笑しな部分があるから。
173152:04/05/01 13:27 ID:AwZfI0KO
>>166
というか155は抽象的極論なので一体何が言うとおりなのか理解不能です。
この際言葉遊びは捨てて(というか面倒くさいので)美しさ=概念的合理性と
解釈てしまいますが・・・・確認なんですが
こういうものを追求することは当然なのでありますが、これらが常に計算機側の
特性とマッチするわけでない、ということはお互いの共通理解として宜しいですよね。

ゲームの場合、わりと頻繁に この部分が絡むので論争に発展するのだと思います。
現実(ハード特性)との不整合を冷酷に示すパフォーマンスアナライザを恨めという
以外ありません。
174152:04/05/01 13:35 ID:AwZfI0KO
まぁ、ただ今読み返すと、ここで議論にあがってるのは
純粋に設計上の不備の部分の話なのかなぁ、とも思うので
173の内容は無粋だな。却下。
175名前は開発中のものです。:04/05/01 13:44 ID:Y5IhbaZz
ロジックとハード特性の不整合というより、ロジックと言語仕様の不整合、かな。
176152:04/05/01 13:48 ID:AwZfI0KO
>>175
そんな感じですな。美しさ=記述上の美しさ、という意味合いなら
やっぱ173は筋違いやね。
177名前は開発中のものです。:04/05/01 14:04 ID:4cYeRpR0
いや、俺は>>173の言ってることは当然のことなので悪いとは思わない。
ゲームにもよるが、ノードの数が物凄く多くなればキャッシュヒット
やら何やらの問題がボロボロと表出することがあるので、途中で
精度犠牲にして走査回数抑制する方向でロジックを修正することあるし。
最悪、内部データ構造から洗いなおすハメになることもあるし。


178名前は開発中のものです。:04/05/01 14:15 ID:T8UuVfk+
純粋にパフォーマンス上の話だと
手荷物にするか置き勉にするか、状況によっては相当違ってくるよね。
179名前は開発中のものです。:04/05/01 14:29 ID:Jz0Md+j7
>>173
>美しさ=概念的合理性
え?じゃあ、なんで俺にレスつけんの?
俺は
>>165
>概念だけは美しいが、コードは美しくなく汚くなっただけ
っていう言葉に対してレスつけたんだけど。
引数で渡すことに関しては賛成ってことでいいんでしょ?
180173:04/05/01 14:50 ID:AwZfI0KO
概念=抽象モデルという話なら、>>173
抽象モデルが糞なら(結果としてそれは)糞という発想は極端だなぁ
という、やや無粋な話。

抽象モデルとして説得力のある・人の直感的に分かりやすい代物であっても
それが常にハードウェア特性との親和性を伴うわけではないならば
何が糞で何が糞でないのか、は一概には決め付けられないだろう、という話。

これは詭弁ガイドラインに抵触している気がするので、>>174で取り下げた。
181名前は開発中のものです。:04/05/02 00:05 ID:GnjcB1ex
スクロール処理に関して知恵をかしておくんなさい

1.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)に移動すると
先の上で説明したような状況になったときに、どう他のプレイヤーを描画したらいいのか悩んでます

考えているつもりですが、意味不明になって悩んでしまいます

全体的な処理としては、メインのループがあって、そこで、くるくるまわして描画処理をしています。

キーボードのイベントや、マウスイベントや、ネットワークからのイベントは、別のスレッドでキューにいれて、
上のメインを回しているスレッドから読んで描画に関する処理に影響させています。

長くなってしまった上に、意味不明なことを書いているようなきがするんですが、
よかったら知恵を貸してください。
182名前は開発中のものです。:04/05/02 07:16 ID:ewEdZS/b
>>166みたいな、単なる貶し系の文章が書きたいだけのやつが一人いるんだよね。
それが気に入らないから俺しばらく常駐してみてるんだが。
183名前は開発中のものです。:04/05/02 11:23 ID:8zjGYCSW
>>181
>そいつらの動きが入ると意味不明になってしまいました。
どう上手くいかないのかわからないんだが、
とりあえず、スクロール処理の部分って
プレイヤーの現在位置から見える範囲を決めてるわけだから
他のプレイヤーってこの処理に関係ないんじゃないの?

>>182
>>182の内容が貶し系なわけだがw
184名前は開発中のものです。:04/05/02 14:39 ID:YvKUw6Rv
>>181
 文章が長い割に、必要な情報が欠落している。
他のプレイヤーやキャラとはなんなのか、説明をちゃんとしろ。
185181:04/05/02 15:03 ID:GnjcB1ex
>>183
>>184

もうちょっとまとめてみました

プレイヤーと動かない対象(床と動いてないキャラなど)
にかんするスクロールは問題ないです

自分がスクロールしている最中に、
画面内に動く対象がいると、スクロールがうまくいかず、
飛んだみたいに見えるわけです
自分が(10,10)→(10,11)に移動し、
動く対象が(12,12)→(12,11)に移動したら、
2セルぐらい飛んだように見えるんです

また、自分が止まっている時に
画面内に動く対象がいても問題なく動いています

結果:
自分がスクロールしているときに
画面内の動く対象の描画位置を計算するルーチンがおかしい、
または、そんなルーチンが動いていないから、
飛んだように見える

あぁ、なんか解決したような兆しが見える・・・
186名前は開発中の者です。:04/05/02 16:53 ID:VrUs0Xi6
背景に張り付いてるキャラクターが、主人公と逆に動いた場合、
倍の速度で離れていくのは、普通のことなのではないでしょうか。
ドラクエやイースもそうなってるはずですよ。

(あまり関係有りませんが)
セルという言葉を使ってるようですが、RPGツクールでいうところの
「チップ」のことでしょうか。小さい四角のことをセルというのは
PCエンジンぽいですね。でべろかなんかいじっていた人なのでしょうか。
187名前は開発中のものです。:04/05/02 17:07 ID:BsWZXbD2
>>185
「飛んだように見える」と言われても
188練習帳著者:04/05/02 17:21 ID:Bla7cnMs
>>185

スクロール時のキャラクタ描画を「現在のスクロール量(ずらして
描画しているピクセル数)を減じた座標」に対して行うようにすれ
ばよいのでは? わかりにくければ、方眼紙に表示領域とスクロー
ル領域を描いてみて、1ピクセルずつスクロールさせるとどうなるか、
なぞってみてください。
189181:04/05/02 17:30 ID:GnjcB1ex
>>186
おっしゃるとおりですね。
倍速ではなれていくことを表現したいと思っています。
現状ではキャラがスクロールするというより、
飛んでるというかんじで、なんでかデバッグ中です

セルという言葉は、距離を表現するつもりでつかっています。
プログラム中では1セル中にはりつけるタイルを
チップという名前をつけています
ゲームプログラムは今回が初めてで、
詳しいこともわからず独善的に作っています
だから言葉も適当です
適切でなければ、以後、脳内で置換します
190181:04/05/02 17:35 ID:GnjcB1ex
>>187
そうですよね・・・。
適切な表現ができていないですよね。

>>188
すばらしいアイデアですね。
早速方眼紙にかいて試してみました。
なんか、自分のルーチンの間違いが見えてきた気がします。
サンクスです。

こーやって書いて実際に試してみるのがとても大切ですね
191181:04/05/02 17:55 ID:GnjcB1ex
自分の間違いがわかりました。

スクロール処理に問題があり、
>>188さんのアイデアで解決しました。
ありがとうございました。

次は、デバッグ中にわかった問題を解決していこうと思います。
自分が(10,10)にいて、動く対象が(12,12)にいて、一旦描画したとします。
その後、次の描画処理までに動く対象が(12,11)、(12,10)と移動した場合、
2セル動いているので、スクロール処理が想定している
ルーチン中で判断できず、飛んだようにみえていました。
自分の処理の中では必ず1セルしか動かないようになっていました。

これは現在作成しているプログラムで、ステップ実行などをしている際に、
動く対象が1セルずつ移動しているが、
実は2回移動して2セル動いてしまっている際に起こっているようです。

今はステップ実行などを行わない限り、こういった状況にはならないわけですが、
いずれさまざまな問題で発生する可能性があります。

で、解決案として以下を考えています。
@放置、トンでもいいじゃないか
A軌跡を事後に計算して描画処理をさせる

@でいこうと思っていますが、みなさんならどうされますか?
192名前は開発中のものです。:04/05/02 18:01 ID:tlpacHil
微分する
193181:04/05/02 18:07 ID:GnjcB1ex
微分して、軌跡に近いセルに描画ですか
いいアイデアですね
194名前は開発中のものです。:04/05/02 23:24 ID:imw4lXsM
>>181
処理構造に問題があるんじゃないの?

移動は、そのセルとやらが何ピクセルの大きさか知らないが段階を踏んでるんだろうね?
つまり、32ピクセル x 32ピクセルの大きさなら
移動は、瞬間移動?
それとも8ピクセル程度づつスライドして滑らかに描画してる?
背景のスクロールもしかり、セル単位で瞬間移動描画してる?

というか、スクリーン描画座標と
背景セル上での座標がつじつま合ってれば、そんな問題は出ないでしょ?
どっかに構造的、発想的な問題があるんでしょ。
195181:04/05/02 23:43 ID:GnjcB1ex
>>194

スクロールは、1回の移動あたりが1セル(16ピクセル)
1セルあたりの移動時間を500m秒
描画時に16ピクセル*(現在時間−移動開始時間)/1セルあたりの移動時間
としてスクロール表現のためのマージンを計算してずらす値にしています

>>どっかに構造的、発想的な問題があるんでしょ。
ありました。
自分がスクロールしている最中に、動く対象が動いた場合、
座標計算が元の位置のまま計算していたので、おかしかったです。
この問題は>>188さんのアイデアで解決しました。
196名前は開発中のものです。:04/05/03 00:42 ID:3nJi6lN4
>自分がスクロールしている最中に
処理は人によって自由だけど、
普通は自分(主人公キャラでしょ?)は、MAP上を移動していて
スクロールは別処理でしょ。
つまり、スクロールがどうなってようと
キャラ(主人公だろうが、違う移動キャラだろうが)はMAP上を移動するって処理で問題でないと思うけど?
移動したMAPのセルの更にそのスクリーン座標でキャラ管理でもしてるの?

キャラのMAP上の座標(セル) ->(スクロールしてようが)-> その描画スクリーン座標って処理をかませれば?
197名前は開発中のものです。:04/05/03 02:17 ID:/mbgxFmW
cかc++でdirectx使ったシューティングゲームのプログラミングを
基礎から完成まで詳しく解説してたサイトがあったんですけどお気に入りを謝って消してしまって見つかりません
そこのサイトの手順にしたがって学習していくと初心者にもとてもわかりやすくかったのに…
ソースファイルをコモンファイルとかに分割する方法まで詳しく解説してくれてたサイトで
CとC++とdirectxの基礎をまなびながらシューティングゲームを作るサイトでした

gooで色々検索しましたがなにしろヒット数が多くて探しきれなかったです

もしこのようなサイトをご存知でしたらご一報お願いします
198名前は開発中のものです。:04/05/03 02:30 ID:1qvBqI8L
あきらめろ
199名前は開発中のものです。:04/05/03 07:03 ID:pFjTwflE
Game Programming Gems 4 を読んだ人はいますか?
1とか2があればそれほど必要ではないですか?
200名前は開発中のものです。:04/05/03 07:52 ID:Egjl2fAk
>>198
まじでお願いします
201名前は開発中のものです。:04/05/03 07:59 ID:knX8BTK6
>>200
そのサイトに書いてあった言葉思い出してgoogleに突っ込んで
検索かけてみるしかないでしょ?

それより、気にするべきは再発防止だね。
お気に入りを消してしまったから、わからなくなりましたなんて
2度もやったら恥ずかしすぎて俺なら死にたくなるね。
人に知られたら、もう、2度と社会に出れないね。
永遠の負け組確定。

お気に入りの保存の仕方は覚えた?
202名前は開発中のものです。:04/05/03 08:12 ID:hQjA8AGn
>>199
俺は注文したよ。まだ届いてないから何とも胃炎が。
原書のほうは(邦訳版よりは)安いんだし。買っとけ。
203名前は開発中のものです。:04/05/03 15:40 ID:BkQwHd8z
>>201
アドヴァイスありがとうございました
お陰で見つかりました

ちなみに探してたのは
http://rina.jpn.ph/~rance/index.html
このサイトです
204名前は開発中のものです。:04/05/03 16:03 ID:rLHaxHTb
ネットワークゲームを作りたいのですがお勧めの本を教えていただけませんか。
探したところネットワークゲームを作るための書籍が少ないように感じましたので
書き込みました。ちなみにDirectPlayを使おうと思っています。
やはりTCP/IPとかのゲーム以外でのネットワークプログラミングという形で探したほうがいいのでしょうか。
アドバイスお願いします。
205名前は開発中のものです。:04/05/03 19:38 ID:nurq1E+4
資料はあるだろう
まともなサンプルは見たこと無いが
206名前は開発中のものです。:04/05/03 19:43 ID:Omwokgo9
>>181
そもそも、根本的に位置の管理方法が間違っていると思う。

プレイヤーやその他の移動するキャラクターの位置は、
背景スクロールにかかわらず、背景全体が収まる座標で持てば良い。
もちろん背景は、動かないとして計算する。

そして、実際の画面に出す時に、プレイヤーや他のキャラクターの位置を
画面内の表示位置に変換する計算式、表示する背景の領域を求める計算式、
を用意して、それぞれの表示位置を決めれば良い。
207名前は開発中のものです。:04/05/04 03:34 ID:VBEMEzQB
JavaやC#に慣れていると、
C++での開発が効率悪くてかなわない。
DirectXを用いたゲーム開発では、
いまだにC++が主流だしやむをえず。
208名前は開発中のものです。:04/05/04 05:59 ID:ErnoVSSx
スーパーファミコン用シューティングゲームのプログラムに携わった人いる?
209名前は開発中のものです。:04/05/04 06:58 ID:DaOo4sBx
>>207
そんなに変わるか?
オブジェクト指向言語だし、たいしてかわんねーよ。
何やって使ってんだよ。
210名前は開発中のものです。:04/05/04 07:20 ID:d02V5Vdq
>>207
>>209
まぁまぁ
211名前は開発中のものです。:04/05/04 09:08 ID:/pFqq6k/
まぁ、結構変わるね

結局ゲームで多用するリスト系とかはこれら中間言語系は得意
ポインタでガシガシやりよりバグでないしね
コンパイル時でエラーだしてくれるのでCより実行時でのチェックが少なくて負担は減る

ぶっちゃけC++はオブジェクト指向風味を取り入れたCでしかないと思われ

俺も深くjavaとかc#に触る前まではあんまり変わらんと思ってたけどね
212デフォルトの名無しさん:04/05/04 09:49 ID:ZcLCAYsw
SSE がもうちょっとレジスタ本数増えて
ベクトルの基本演算くらいサポートしてくれたらなぁ・・・
頂点シェーダレベルのことができるサブプロセッサがCPU側についてくれたらよいのに
213名前は開発中のものです。:04/05/04 10:05 ID:RR4igFmH
無駄に難しくてよいと思っている

何もかもアセンブラでもよろしい



怠け癖がつくと最終的には
「寝ッ転がりながら頭に概要を思い浮かべるだけで勝手にソース書き上がるようにしてほしい」

などと言い出しかねない
214名前は開発中のものです。:04/05/04 13:07 ID:UhuIoZ4M
簡単、難しいていうより、注意力便りなのは嫌。
人間、ミスする生き物だし。
人的ミスが入らないように自動化出来る部分はすべき。
215名前は開発中のものです。:04/05/04 14:58 ID:fBBUT8Xb
より具体的に言うなれば、
メモリ内のデータフロー、ロジックフローを
きちんと把握、利用できることが重要なのであって、
それに関わるコンピューター寄りの知識は
速度を重要視しない限りは必要無いんだよな。

環境に頼って手抜きしようとする人間は、
複雑化したデータフローなんて追えなくなってあぼーんするだけ。
でも環境に依存しようとしない人間は
脳内で可能な限り動きを構築してから実際にコードに落とすんで、
コンピューター寄りの本来の目的と直接関係しない部分は排除した方が都合がいい。

自分でデータを細かいところまで管理する環境を少しでいいから経験しないと、
メモリ上のデータをどう扱ったらいいのか学習しにくい。
学習初期に
「メモリ上のデータはライブラリが管理してくれるから俺はデータ突っ込むだけー」
なんて覚えたら洒落にならん。
確かにデータは突っ込むだけなんだが、
何も考えてないとすぐに商品が整頓されてないコンビニみたいになる。
学習初期に最も重要視すべきは管理能力だ。
結局、若いうちは無駄だと思うことも多少はやっといた方がいいってこった。

管理能力がしっかりしてきたら、最近の超高級言語に触れてもいいと思うな。
その方が開発効率いいもん。
216名前は開発中のものです。:04/05/04 15:50 ID:DaOo4sBx
>>215
いや、さすがにそんなところは
必要ないって言えばない部分だろ。
アセンブラ組んでた俺でも最近は絶対いらないって確信もって思うぞ。
217名前は開発中のものです。:04/05/04 16:39 ID:xC5TcH9e
>>216
現在は開発する上では必要ない事でも、知識としては知っておいた方が
良いことって、あるじゃない。
218215:04/05/04 22:27 ID:fBBUT8Xb
>>216
俺もアセンブラほどの学習は要らないと思うよ。
C/C++ でそこらのアルゴリズム本の内容を自分で実装できる程度で充分。

> 必要ないって言えばない部分だろ。
言えばない部分だな。
219デフォルトの名無しさん:04/05/04 23:02 ID:ZcLCAYsw
レイとトライアングルの交差判定ルーチン
SSE化したら笑っちゃうくらい速くなった
アルゴリズム全く換えてないのにC+FPUで書いたものより
20倍平均速くなった

SSEで内積だすのいちいちマンドクサかったけど
当たり判定が20倍速くなったっつーのはでかいので満足
220名前は開発中のものです。:04/05/06 06:47 ID:lM4J9+bg
何がひでえって、ライブラリ頼りな奴!
メーカーで言えばIO Interactiveみたいな

MFCで楽に組めるんだから最適化なんて面倒でしてらんないよーん

みたいな感じで思い浮かべてもらえると分かりやすい


だからっつってN64みたいな職人芸的コーディング必須!
んな環境はノーサンキューだが。
221名前は開発中のものです。:04/05/06 07:50 ID:dsRObUy2
仕事干されたハゲが吠えてますが、そっとしてあげてください。
222名前は開発中のものです。:04/05/07 14:08 ID:57ftLVJv
アセンブラでリバースエンジニアリングできる奴はとにかく食うに困らないな。

アンチウィルスで金を稼ぐ会社なら、これができるだけでOKだし
Winnyをイジッて暗号化を解いた奴もこれで金を得、
ウィルス作って人に迷惑かけるのにも役立つから、
まことにもって有用な言語だな

食うには困らんが時間は不自由するがね
223名前は開発中のものです。:04/05/07 15:15 ID:2CVAEUtd
>アセンブラでリバースエンジニアリング

ハァ…
224名前は開発中のものです。:04/05/07 15:39 ID:LKHXe0/4
2Dのアクションゲームを作っています。

 2つの長方形同士の衝突判定を行いたいのですが、それぞれが回転しているので
頂点のXY座標の大小で判断すると言う手法が使えません。

 法線の内角外角を使うとか、行列を使うとか、3D制御に近い手法が有ったような
気がするのですが、平面限定で高速化する手法はないでしょうか?
225名前は開発中のものです。:04/05/07 15:49 ID:vcA11uZ8
正確な判定方法と高速化は別問題。
高速化したければおおよその判定後、厳密な判定を行えばいいだけの話。
226名前は開発中のものです。:04/05/07 16:05 ID:UAroqB1G
>>224
AABB、OBBをキーワードにgoogleで検索してみ。

ちなみに「頂点のXY座標の大小で判断すると言う手法」は
一言で言えば2DにおけるAABB同士の衝突判定だーね。
OOB同士の衝突判定の適用対象を絞り込むためにAABBを
使うのも当然可。
227名前は開発中のものです。:04/05/07 16:05 ID:UAroqB1G
s/OOB/OBB/
228追記:04/05/07 17:55 ID:UAroqB1G
>>225
>正確な判定方法と高速化は別問題。

正確かつ高速であればより良い場合が多いわけだが、別問題とはこれいかに。

>高速化したければおおよその判定後、厳密な判定を行えばいいだけの話。

「だけ」か?高速化手法は何も一つではないんだが。
229224:04/05/07 20:42 ID:fOYveHqs
うーむ、やっぱり行列なのですね〜。

D3Dをいじっていた頃の苦い思い出が〜

とりあえず、行列で頑張ってみます〜、何か突然ひらめくかもしれないし。

Thanksです〜
230225じゃないけど:04/05/07 21:07 ID:AD11pjLw
>>228
>高速化手法は何も一つではないんだが。
効果があるのは225の方法しか浮かばないんだけど?俺は。
他に2つも3つも方法があったっけ?
231224:04/05/08 00:28 ID:tC9ANaFq
まてよ、2つが回転していると考えるから複雑になるんであって、
どちらかを座標系の基準にしてもう一方を相対角度、相対座標で考えたら
sin、cos、tanだけで片がつくのかな…
232226:04/05/08 00:51 ID:Uo5OKKLo
>>231
うん。例えば辺と辺の判定をするときに
どちらか一方を基準とする(軸とする)座標系に
投影してやると計算を単純化できるのと同じ要領。
233226:04/05/08 00:53 ID:Uo5OKKLo
>計算を単純化できる

ワリ。ここは嘘。
234名前は開発中のものです。:04/05/08 01:19 ID:aaHhGMRi
>>231
3Dのコリジョンである方法だったような、、。
自前で組んだ事がないのであれだが、、。
対象のローカル座標系に持っていくとかなんとかだったような。
235名前は開発中のものです。:04/05/08 01:47 ID:Uo5OKKLo
>>230
高速化手法は「前処理の近傍探索」だけではないだろ。
まぁ、たしかに重要なファクターではあるが、局所分布の
状態によって(ゲームによって)最適な実装は変わるなど、
汎用的究極的単一的解決方法はひとつではない単純ではないため。一言で片付けるのは単純化。


2Dアクションや格闘ゲームならベタな方法幾何計算の最適化
だってあるし、時間軸方向のキャッシュ・諸計算の
SIMDや外部プロセッサによる並列化など、状況に応じて
いろいろある。
236236:04/05/08 01:50 ID:Uo5OKKLo
↑誤送信。

>>230
高速化手法は「前処理の近傍探索」だけではないだろ。
まぁ、たしかに重要なファクターではあるが、局所分布の
状態によって(ゲームによって)最適な実装は変わるなど、
汎用的究極的単一的解決方法があるわけでもない。
一言で片付けるのはやや単純化に過ぎる。

2Dアクションや格闘ゲームならベタな方法幾何計算の最適化
だってあるし、時間軸方向のキャッシュ・諸計算の
SIMDや外部プロセッサによる並列化など、状況に応じて
いろいろある。
237226:04/05/08 01:56 ID:Uo5OKKLo
何度も御免。寝る寸前で酔ってるもんで。勘弁してください_| ̄|○

>>230
高速化手法は「前処理の近傍探索」だけではないだろ。
まぁ、たしかに重要なファクターではあるが、局所分布の
状態によって(ゲームによって)最適な実装は変わるなど、
汎用的究極的単一的解決方法があるわけでもない。
一言で片付けるのはやや単純化に過ぎる。

2Dアクションや格闘ゲームならベタな方法があるし
他にも幾何計算の最適化、時間軸方向のキャッシュ
諸計算の SIMDや外部プロセッサによる並列化など
状況に応じていろいろある。

寝る。
238名前は開発中のものです。:04/05/08 15:27 ID:/Hn+kYM5
リアルタイムのオブジェクト共有を実現したいのです.
共有の仮想空間にあるオブジェクト(クラスのnewしたもの)を作った場合,
つまり,例えば黒板に図形を書いた場合,
相手も自分もその図形を移動や塗りつぶしたり,拡大とか縮小とか可能にしたいんです.
でも,物理的に不可能なことは出来ないようにしたいんです.
(相手が移動してるのに,自分が削除してるとか)

常識的に考えれば,制御権のようなものを厳密にやり取りして,
特定ユーザに制御を委ねていくしかないと思います.
でも,シリアライズみたいにして,簡単にオブジェクトを転送すると,
サーバで差分を判断して・・・みたいな手法はないのでしょうか?

これって,ネットワークゲームで,例えば,ボスが攻撃されたら,全てのクライアントでの
ボスのパラータが変化するのと似ていると思うのですが,
ネットワークゲームではそのあたりをどのように扱っているのでしょうか?

参考になるような,サイトでも本でも(英語でも)ありましたら,教えてください.宜しくお願いします.
239名前は開発中のものです。:04/05/08 18:51 ID:0//jLLOq
>>238
C/Sモデルにしてサーバーで管理すればいい。
240名前は開発中のものです。:04/05/10 00:36 ID:g89ZL7xT
えと、質問です。
class GameObject
{
Camera camera;
Map map;
}
class Map
{
MapField field;
MapObject object;
}

こんな感じのクラス構成になっているんですが、
fieldやobjectの描画にはview frustumが必要なわけです。
そのため、cameraのポインタがgameobject>map>field>tree...
と、殆どのクラスに知られている状態です(汗
しかし引数として毎フレーム渡すのも速度、綺麗さ共に、、、
これを改善する知恵をお貸しください(;´д⊂)

#チョト前に同じような質問があるぽいですが、c++をイマイチ理解していないため
#多重継承を当然とした議論には付いていけない(´Д`;)ヾ
241名前は開発中のものです。:04/05/10 00:54 ID:bzGWAz8g
>>240
大域変数に「現在描画中のカメラ」というものを設けて、パラメータ取得はアクセサ経由で行えばよいのでは?

そもそも一般的なテクニックとしては、被写体がカメラを知っているという構造よりも、
カメラが被写体を知っているという構造が好まれます。被写体登録時にどのカメラで描画されるかを
(enumなどで指定して)、それ以後、被写体はカメラの詳細については感知しないという実装になります。


意味わかりますか? なんにせよ、もう少し情報が欲しいところですなあ。
242名前は開発中のものです。:04/05/10 01:24 ID:uqinqgft
>>240
多重継承は使わなくていいと思う。

>そのため、cameraのポインタがgameobject>map>field>tree...
>と、殆どのクラスに知られている状態です(汗
これはこれで正解だと思う。
>>241のカメラの方が物体を知っているっていう設計でもいいけど。
仮にカメラ、またその関連のものを引数で渡さずに、
グローバルインスタンスとして用意しちゃうと
カメラインスタンスと描画する物体のインスタンスとの関連が
すげーわかりにくくなっちゃうと思うよ。

引数は多くなっちゃうけど
突然どこかで内容を変更された変数に悩む事が無くなるから
こっちの方が俺はいいと思うけどね。
243名前は開発中のものです。:04/05/10 01:59 ID:OddJ+Pqz
>>240
>多重継承は当然とした議論

そんなことは決してありません。誤解の無いように。
まぁ、私なりに噛み砕いて説明させてもらいますと

ヤバイ。多重継承ヤバイ。まじでヤバイよ、マジヤバイ。
多重継承ヤバイ。
まず乱用。もう乱用なんてもんじゃない。超乱用。
乱用とかっても
「friendクラス20個ぶんくらい?」
とか、もう、そういうレベルじゃない。
何しろ無限。スゲェ!なんか節操とか無いの。クロスリンクとか何?名前重複とかを超越してる。無限だし超乱用。
しかも病み付きになるらしい。ヤバイよ、病み付きだよ<<以下略>>
244名前は開発中のものです。:04/05/10 02:09 ID: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 再生のアプリ等を作成する場合にはなんらかの
著作権問題などが発生するのでしょうか?
これについてなにか知っている方はいませんでしょうか?

質問の内容がひどく抽象的で申し訳ないのですが
知っている方がいましたら宜しくお願いします。


245名前は開発中のものです。:04/05/10 02:27 ID:UtYtnSiL
>>244 こことか? http://www.openswf.org/
246244:04/05/10 02:57 ID:AwWht2q3
>>245
ありがとうございまつ。
なんとなくそこでプレイヤーのソースが落とせそうな雰囲気があるような
ないような(汗 ・・・

ライセンスがどうこうの部分が怖いので翻訳ソフト買ってから出直してみます。
情報有難うございました。
247名前は開発中のものです。:04/05/10 20:43 ID:FfmNag7E
また初心者が>>241みたいなのを読んで騙されてあとで心配になって
レスするようなことがありませんように。
248名前は開発中のものです。:04/05/11 00:12 ID:bxfdcVbA
>>247
心配ならば、あなたの意見を書いてみてはいかが?
249名前は開発中のものです。:04/05/11 08:30 ID:LGS9vROR
>>247
俺も聞きたいね。
250名前は開発中のものです。:04/05/11 15:01 ID:v+m1DaIB
>>247
俺漏れも

>>240
無意味なフレームが始まらないうちにCameraや他のへんな名前がついたクラスを
それぞれ具体的にどういうデータのまとまりとして捉えているのか詳しく説明しておいておくれ
251名前は開発中のものです。:04/05/11 17:53 ID:t+MGq8Dm
そんなに変な名前なのか、チョトショック、、、
GameObjectはそんなに意味ありません。一番上位の物って言うか、、
Cameraはカメラのpos,dirを持っていてsetするとgluLookAtでそっち向いてくれます。
Mapはそのままマップのクラスです.
MapFieldはハイトマップです。quadtreeによりカリング、簡略化をして自分を描画してくれます。
MapObjectはマップのオブジェクト(メッシュ)の集まりです。(書かけ)

、、、えーと毎フレームポインタ渡します;;
252名前は開発中のものです。:04/05/11 21:08 ID:2A/hZ94M
OpenGLだよなぁ?
マトリクススタック使えばいいやん。
253名前は開発中のものです。:04/05/11 21:49 ID:+QOcSIS7
>>251
命名の仕方は別にいいと思うよ。
俺もこんな感じだけど。

わけがわからないものはGameObjectだけかなw
そんなに意味ありません。って自分でも言ってるしやっぱり意味無いんだよw
254名前は開発中のものです。:04/05/12 00:45 ID:BAYSJTEJ
>>240
殆どのクラスで知られる必要のあるものが、その通り殆どのクラスからアクセスできる
ようになっていることは何もおかしなことではないと思う。

もしも視錐台を参照することだけが殆どのクラスで必要で、
カメラの位置を変えることは必要ないなら、視錐台を読み取るメソッドだけを
staticにしてやって、カメラの位置を変える限定的なクラスにだけ
Cameraを引数で渡すようにしてもいいんでは?
255名前は開発中のものです。:04/05/12 02:55 ID:zyRW5yeg
カルドセプトのようなボード・カードゲームにおいてCOMのプログラミング
としてはどういったアルゴリズムなんですか?
256名前は開発中のものです。:04/05/12 04:08 ID:eA7QhGH1
>>255
どんなゲームでも人間と同じじゃないかな?
基本は、今の状況を見て、次の行動を判断する。
ってところだから。
稀に、インチキ臭いのあるけどw
257名前は開発中のものです。:04/05/12 06:29 ID:KGYWW9wS
>>255
オーソドックスなところでチェスとか麻雀を参考にしてみては。
資料が見つかりやすい。

読むにあたっては、初歩的な統計学やグラフ理論の知識が
要る場合があるかもしれんが、その辺苦手なら入門本の
一冊でもあれば十分。あとはチクチクやってれば何とかなるから。
258名前は開発中のものです。:04/05/15 17:09 ID:dpJnmqJq
キャラのアニメーションの質問なんですが
1つあたりの絵の使用時間はどのようにすべきなのでしょうか?

アニメーションを作るツールだと単純に時間を用いて
ウェイトをとっていますが、同じ方法なんでしょうか

もしくは、フレーム数を用いるのでしょうか?
259名前は開発中のものです。:04/05/15 18:27 ID:gPBAj94c
好きなように実装すべし
260             :04/05/16 10:24 ID:1hAhUILx
前に、回転する2つの2D面の衝突判定ってあるけど、俺のやり方
1.物体の半径を求めておく
2.まずは半径を使って円同士の接触判定をする
3.円同士であたってれば、ラインごとの判定
 四角形同士なら、全ての辺同士の判定をする。
 だから、判定回数は最大で16回。
261名前は開発中のものです。:04/05/16 11:52 ID:/kpE25cx
それって片方がもう一方に完全に入ってるとミスらない?
262名前は開発中のものです。:04/05/16 13:37 ID:IC4HysZi
>>258
どっちでも可能。
263名前は開発中のものです。:04/05/16 21:07 ID:Ygi0R2jO
>>260
四角形の辺ごとの判定の前に
四角形同士の判定を入れると>>261が解決すんのか?
264名前は開発中のものです。:04/05/16 22:37 ID:/6128CQM
>>260
四角形同士の判定をするために4辺の判定をしてるんだから
4辺の判定をするために四角形の判定が必要だったらいみねぇよ
265名前は開発中のものです。:04/05/16 22:38 ID:/6128CQM

263へのレスね
266名前は開発中のものです。:04/05/17 02:56 ID:oiA5Z1My
回転してる四角形のようだぞ
267名前は開発中のものです。:04/05/17 07:37 ID:itFQ+twD
>>266
そうか、回転してるんだっけ。
じゃあ、>>263は意味がねぇな。すまん。

ううむ、難しいなコレ。
俺なら諦めちゃうな、このやり方。
それか、片方の四角形のローカルに一度もってきて
(四角形のローカルにもってくると、片方の四角形は原点を中心とする〜略w)
そこから、もってきた四角形の辺の始点終点でローカルにある四角形の範囲の計算をしてから〜略
ってなるかな。結構、面倒だね。
268名前は開発中のものです。:04/05/17 11:51 ID:u8OQabWl
>260
お願いだから図に書いてくれー
オブジェクトはどんな形だ? 正六面体?
軸はどこだ? オブジェクトの中心か頂点か、面の中心か?
変な妄想してしまって収集がつかない。

269名前は開発中のものです。:04/05/17 12:18 ID:itFQ+twD
>>268
こんなのいちいち図に書いてたら話が進まないよw
軸や中心なんか話の問題にならないと思うけどな。
270名前は開発中のものです。:04/05/17 16:23 ID:A2tOSBQ0
多角形同士の判定でいいじゃん。

多角形Aの頂点が多角形Bの中にあるかどうか、
多角形Bの頂点が多角形Aの中にあるかどうか調べる。

内外判定は適当に線分を外に引いて、辺と交差する回数でチェキ
271名前は開発中のものです。:04/05/17 17:05 ID:MlZuRqOh
>>269
要するにOBB同士の衝突検出っつーことで一般的な話だから
OBB collision detection でぐぐれば図とか出るかもかも。
272名前は開発中のものです。:04/05/17 17:58 ID:MlZuRqOh
ごめん。>>269じゃなくて>>268だた。
273260:04/05/17 19:00 ID:RxL4Iwuq
>261
ミスるな。
2D面がそこまで速く移動しなければ問題にならないけど。
あれは、ワイヤーフレームの接触を判定する方法だな。
面が完全に中に入ってるかまで検出するには・・・。
ラインに、表と裏の情報を持たせて、
裏から出した法線が、相手のラインと接触するかを求める方法がある。
274名前は開発中のものです。:04/05/17 21:17 ID:bco6q7UB
>>271 AABBもな
275名前は開発中のものです。:04/05/17 22:19 ID:FXzbejeQ
ジョイパッドでの動作確認をしたいんだけど
キーボードをジョイパッド代わりにできるツールってないかな?
逆はあるんだけど・・・
276名前は開発中のものです。:04/05/17 22:54 ID:4g1lmZuF
無いの(710)なら(奈良)作ってしまえ平城京
277名前は開発中のものです。:04/05/18 00:15 ID:4cLQkCuf
つーか、普通に買って操作感とか確認してみた方がいいと思うが…
278名前は開発中のものです。:04/05/18 22:57 ID:LWDwmFAq
2000YENぽっちぐらい出せよ
279名前は開発中のものです。:04/05/18 23:24 ID:nVXuJDmB
複数のゲームデバイスが繋がってる状態も考慮しといてくれ
280名前は開発中のものです。:04/05/19 03:16 ID:h+b3Kx+z
>>275
ジョイパッドなんて安いんだから素直に買ってきなさい。悪いことは言わないから。

ゲーム作るなら違う種類のを複数持っといて
どれでもちゃんと遊べるか確認しろと言いたいほどだ。
281名前は開発中のものです。:04/05/19 10:28 ID:0nv4ICzh
そういえば、えろげの多くはジョイパッドすら対応してないな。
282名前は開発中のものです。:04/05/19 12:53 ID:NEnS95DB
>>281
ご自身のジョイスティックでおた(以下略
283名前は開発中のものです。:04/05/19 13:21 ID:adXQ/H95
>>281
USBオナホールの方が優先らしいw
284名前は開発中のものです。:04/05/28 04:45 ID:QLfJNzYc
相談です。

自分、パソコンの知識はほとんどありません。
ネットが出来る、2chに書き込めるって程度なもんです。

けど、将来はゲームを開発したい。
で、開発したゲームを家庭用ゲーム機で発売して、
みんなに良い評価をもらえるようなゲームを作りたい、と考えてます。

作ってみたいゲームジャンルは、全てです。
RPGも作ってみたい、アクションも、シミュレーションも、ネットゲームも作ってみたい、と思っています。
企画も作りたいですし、シナリオも書きたい、ドット職人なんてのもいいですね。
とにかくゲームを作りたいんです。

でもまぁ、そんなものは高望み以外のなんでもないことはわかっています。
だから、とりあえずはアクションを作ってみたいと考えています。
これなら、少人数で作ることも可能でしょうし、ゲーム作りの肝も詰まってそうかなぁ、なんて。

そんな俺が学ぶべき知識はどのぐらいあるのでしょうか?
そして、何を学んだらいいのでしょうか?
たぶん、星の数ほどの知識が必要だと思うのですが、とにかくやってみたいのです。
285名前は開発中のものです。:04/05/28 04:52 ID:iKc/Nojx
やる気と時間(大学生相当)がある人なら2年分ほどかな


とりあえず大きな書店にいって入門向けの本をひたすら立ち読みしなされ。
そして自分にあいそうなのを購入。

プログラマ目指してるのかプランナ目指してるのかよくわからんが

現状でプロのプログラマ目指すなら、
C言語、C++、VisualC++6.0、DirectX

あたりをキーワードにして本やら情報を集めればいいかと。
286名前は開発中のものです。:04/05/28 08:54 ID:ULLXse8H
プログラマになりたいなら
最低限の勉強でゲームを作れるようになりたいとか考えてるようでは無理では?
技術の進歩はものすごく早く、次から次へと新しいことを覚えなくてはならないからな
勉強嫌いでは務まらないのがプログラマ
287名前は開発中のものです。:04/05/28 08:56 ID:DUKb1jdd
>>284読む限りでは、ゲーム製作に携わりたいとしか読めないな。。。
漠然とした質問って困る。
288名前は開発中のものです。:04/05/28 09:58 ID:ywAV+H02
別にプログラマになりたいとは書いてないじゃないの

>284
プロ目指してるわけじゃないなら、難しいことなんて何も無いじゃん。
本屋でDirectXの本を何冊か買ってきなよ。
そしたら何からはじめたらいいか分かる。
289名前は開発中のものです。:04/05/28 18:38 ID:yyEXtvd6
>>284
学問に王道なし。

ゲーム作りというのは純粋な知的活動であり、相応の知的能力が求められる。

ひたすら本屋や図書館に通い、ひたすらGoogleにキーワードをブチ込み、
ひたすら数学や英語を勉強する。これが入力。
ひたすらプログラムを書き、ひたすら文章を書き、ひたすら絵を描く。これが出力。
興味を持ったこと、疑問に思ったことは、何でも学び、学ぶだけでなくそれを活用しよう。
自分の周りで起こることすべてに関心を持とう。脳に負荷をかけ、それを常態とせよ。

すべてのことに手を出したいのであれば、時間はいくらあっても足りない。
人並みにテレビを見たりゲームを遊んだりする余裕はもはやないと思え。24時間を管理せよ。
2chは1日数回まで。祭への参加禁止。

短くて半年、長くて10年もあれば、何らかの成果は出ているだろう。

実際的なことについては、まず、入門書の類を片っ端から読み漁るべし。
これはどんな分野に挑戦するときでも極めて有効な手段である。
専門書はいきなり読むには難解すぎるし、入門書は平易だがミスリーディングがありすぎる。
しかし、入門書を何冊もあわせて読めば、偏りを打ち消し、
また、説明のわかりにくいところを他で補うことができる。
290名前は開発中のものです。:04/05/29 18:53 ID:1snUEMHr
今はGoogleあるし、楽だな。
情報溢れすぎ、迷うぐらいかな。
こんな所で聞く必要もなし。
漏れらの頃は、X68000で他人のソース読みまくって、
覚えたもんよ。
291名前は開発中のものです。:04/05/29 19:47 ID:8INIajuj
少なくとも、井の中の蛙になる危険がないってのはうらやましいな。
俺の高校時代なんてまさに盲目だった。
292名前は開発中のものです。:04/05/29 20:45 ID:H034p2Oc
常時接続になってからコンピュータ書籍コーナーに入り浸ることが少なくなったな
293名前は開発中のものです。:04/06/03 02:35 ID:sjW+31p8
格闘ゲームのコマンド判別方法なんですが、
入力履歴とコマンド列群の全マッチをとる方法以外に
効率的な検索方法を教えてください。
294名前は開発中のものです。:04/06/03 02:37 ID:XVtbUixq
>>293 自動羊肉
295名前は開発中のものです。:04/06/03 07:47 ID:+90sbAK/
>>294が王道だけど、全マッチでもいいじゃん。
どうせたいした計算量じゃないんだし。
296名前は開発中のものです。:04/06/10 00:05 ID:EVE2hvMP
>>295
>どうせたいしたゲームじゃないんだしw
酷い人ね!
297名前は開発中のものです。:04/06/10 01:22 ID:5cqiK5gW
>293
いまはメモリが沢山あるから、
コマンドの全分岐パターンを、メモリにいれておけばいいじゃん。
コマンドに、波動拳と、たつまきがあるとして、
まず、下があって、次にコマンドとして継続可能な入力は、
右下か、左下で、
とう具合に。
波動拳なら、
まず、下で、次にコマンドとして分岐可能なのが、
298名前は開発中のものです。:04/06/10 02:40 ID:qBwAR2Yd
自動羊肉ってなんだろう。なんかあるのかな。

まあメモリがあるなら、とりあえず希望道理に動作する処理を作るのがいいかと。
まずパターンマッチで作ってみれば良し。

それで自分で入力して遊んでみれば、いろいろ改善点も見えてくると思う。

SNK系とカプ系でも設計思想が割れてて、なかはこうなってんだろうなぁとかそのうち見えてくると思うよ。ちと古いか。
299名前は開発中のものです。:04/06/10 02:42 ID:qBwAR2Yd
やっぱ相談される方としては、どう作ればいい?といわれるより、こう作ったんだけど
こうできませんって感じのがいいよな。

ヘローワールドくらい出力させられる段階になったら、まずなんか作ってもってこいとオジサンは言いたい!
300名前は開発中のものです。:04/06/10 02:46 ID:cR6g+xdu
struct InputNode {
 InputNode *ipsiron_node;

};
301300:04/06/10 02:50 ID:cR6g+xdu
描き込むつもりはなかったんだけど、間違ってなんか訳わからんのを描き込んでしまった( TДT)スマソ
302名前は開発中のものです。:04/06/10 03:01 ID:/LNWknHX
class HissatsuKomandoHadouken: extends HissatsuKomando{
public:
  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_;

};
303名前は開発中のものです。:04/06/10 03:10 ID:qBwAR2Yd
そこまで自力で出せるなら、それを組み込んで遊んでみるのがいいかと。
もし壁にぶち当たったら、また質問スレにくればいい。
304名前は開発中のものです。:04/06/10 07:50 ID:ccdw5s27
>>298
オートマトンでしょ。
305名前は開発中のものです。:04/06/10 07:59 ID:R4NUZcHA
変数名の最後にアンダースコア使うなんて気持ち悪い。
306名前は開発中のものです。:04/06/10 13:57 ID:Le5pEI7v
おまえらツクールXP買え
307名前は開発中のものです。:04/06/10 22:40 ID:qBwAR2Yd
ツクールでプログラムできるやつってあったっけか。
308名前は開発中のものです。:04/06/10 23:00 ID:Y189To6+
>>307
マルチゲームScripter

内蔵の言語/簡易言語なら
最近体験版が出たRPGツクールXP、ADVツクールシリーズ、
格ゲーツクール、チャイムズクエスト
他にもあるかもシレン
309名前は開発中のものです。:04/06/12 16:36 ID:uX7X340v
>>285
何でVCが6.0なんだ?
ネイティブコードは普通に打てるし.NETでも構わないと思うが。
最近入門書も増えてきたし。
310名前は開発中のものです。:04/06/12 16:55 ID:gvpzCpXg
>>309
よく読みましょう
311名前は開発中のものです。:04/06/13 14:41 ID:zqEFd0SE
DirectX7のDirectDrawで透過処理をやっているのだけど、
落ちてたサンプルをほとんどそのまま使っています。
一通りは理解できて、動作するのだけど、どうしても解からない部分があります。
50%の透過色を得るのに、

※lptemp1=転送先のバッファ
※lptemp2=転送元のバッファ

*lptemp1 = ((*lptemp2 & 0xf7de)+(*lptemp1 & 0xf7de))>>1;

の式で、なぜ「& 0xf7de」する必要があるのでしょうか?

ディスプレイは16ビットの565でやっています。
312311:04/06/13 14:48 ID:zqEFd0SE
すみません。ちょっと言葉が足りませんでした。

「& 0xf7de」でビットマスクをかけているってのは解かったのですが、
これでなぜ正常に色が表現されるのかが解かりません。

よろしくお願いします。
313名前は開発中のものです。:04/06/13 14:55 ID:xISHbvDs
2進の加算では、桁上がりは最大でも1。
各要素のひとつ上のビットを0にしておけば、
加算時の桁上がりが確実にそこに反映される。
それを一つシフトすれば、元の各要素の位置に、
それぞれ足して2で割った値が入る。

隣り合う要素の最下位ビットが失われるので、
最大で1の誤差が生まれるが、演算速度の向上に比べれば
無視できる範囲だろう。
314311:04/06/13 15:45 ID:zqEFd0SE
>>313
なるほど。
加算した時の桁上がりが、別要素の色に悪ささせないために、
マスクをかけているわけですね。
確かにPhotshopで作った半透明画像と、
プログラムで出力してキャプった画像の色のRGB要素が微妙に違っていました。

おかげで胸のつかえが取れました。
ありがとうございました。
315名前は開発中のものです。:04/06/13 15:45 ID:EvZ8h1Zh
勝手に補足。
1 1110 111 1 10 11110b=F7DEh
RRRRRGGGGGGBBBBB

 1111011111011110
+ 1111011111011110
------------------
11110111110111100

11110111110111100 >> 1 =
1111011111011110
316名前は開発中のものです。:04/06/13 15:50 ID:xISHbvDs
>>314
知ってたから答えることもできたけど、
こんなコードをコメントなしで書いてしまうのはお勧めできない。
317311:04/06/13 16:14 ID:zqEFd0SE
>>315
補足ありがとうございます。
視覚的にも理解でしました。

>>316
すみません、以後気をつけます。
318名前は開発中のものです。:04/06/15 15:27 ID:VVOVJCXy
>>311
>落ちてたサンプルをほとんどそのまま使っています

どうでもいいが、そのサンプルの出典(ソースの出自)を書かないのも
あまり誉められた真似ではないな。俺は知ってるが、お前が貼る事に
意味があるので少しだけ待ってやる。
319名前は開発中のものです。:04/06/15 20:00 ID:zNZaMExs

アホ?
320名前は開発中のものです。:04/06/15 20:30 ID:H+leUq8X
アホだな。
321名前は開発中のものです。:04/06/15 20:45 ID:MqAReyL8
スルー汁
322名前は開発中のものです。:04/06/16 13:57 ID:cW2KlvaD
323名前は開発中のものです。:04/06/16 14:05 ID:cW2KlvaD
というのは冗談ですが、この辺の飽和演算系のチョイテクは
回路屋なら比較的サラっと出てくる(出てこなければおかしい)アイディアである。
 
ただし、ゲーム系プログラマに関しては信号処理のしの字も知らないDQNが
普通にのさばっているので、この手のアイディアの提供者は比較的絞られくる。
 
http://www.gamedev.net/reference/articles/article817.asp
http://www.emit.jp/prog/prog_b.html
 
他人へのリスペクトを忘れないってのは大事ですね。
324名前は開発中のものです。:04/06/16 15:34 ID:NZ8+ANNQ
lptemp1でググればズバリが出てきますよ(^_^)v
325名前は開発中のものです。:04/06/16 15:43 ID:Qvbskj5p
>>323
比較的サラっと出てくるのは、そういうコードに触れた事があったり前例があるから。
PCのアマチュアプログラマでも、たとえば上げられたページなんかを見たことがあれば
応用できるようになるだろうよ。
326名前は開発中のものです。:04/06/16 16:08 ID:cW2KlvaD
>>325
今度は何処に争点を置いてるんです?
327名前は開発中のものです。:04/06/16 16:12 ID:4oN7mGs1
その手のビット演算系のテクニックは、古いプログラマならだれでも思い付くだろ
328名前は開発中のものです。:04/06/16 16:31 ID:Y3zAuYuk
>>325
> 比較的サラっと出てくるのは、そういうコードに触れた事があったり前例があるから。

いや、算術演算の加算回路を知ってれば済む話だが。要するにそこは論点じゃあないよ。
汎用知識を個別の分野に適用しよう、というアイディアを思い付くことは素晴らしいし
ネット上で広めた奴には賛辞を惜しまないね。という話だろう。
 
>>327
レス番号を書きたまえ。尤も、お前さんの発言を否定する書き込みは見当たらないようだが。
329名前は開発中のものです。:04/06/16 16:44 ID:Y3zAuYuk
なお、大昔のPC-98用のペイントソフトを逆汗したときの経験だが
ぼかしツールのコードと思われる部分で16bitレジスタによる8bit値
飽和演算処理を見た。おそらく、それ以前の画像処理方面のプロプライエタリな
コードの中でも同様なテクニックが使われていたであろうことは
想像に難くない。
  
こうしたアイディアを発見的に思いつきオープンな場で広く語られる
きっかけを提供した奴らは気の利く奴らであり、相応の評価をしても
バチは当たらないだろう。
330名前は開発中のものです。:04/06/16 17:28 ID:qfS7ZFH2
フリーの物でゲームが作りたくてとりあえずJavaを一通りつかえるようにしました
でもJavaゲームってけっこう叩かれてて…
もう少し技術が身についたら他の物で作ろうと思うんですけど何がおすすめですか?
それともこのままJavaを使ってても充分なものをつくれるでしょうか?
331名前は開発中のものです。:04/06/16 18:26 ID:p3CztuKr
言語は問題ではない
ようはやる気

3Dものならアレだがまずはそのレベルまで言ってないと思うから
Javaで問題になることはないだろうね
332名前は開発中のものです。:04/06/16 18:55 ID:cW2KlvaD
>>330
ABA games とか覗いてみては。参考になると思われ。
http://www.asahi-net.or.jp/~cs8k-cyu/

あと、pure Javaではなくなるけど
JSDLとかJSparrowを使えば良い感じでイケます。
もし不満が出てきたら 

 ・C#+Cg(OpenGL)
 ・C#+HLSL(DirectX)

という富豪的プログラミングも可能です。
333名前は開発中のものです。:04/06/16 19:13 ID:p3CztuKr
まぁ、JNIでjavaからDirectXよんでもいいしな

javaも1.4からは標準でvram直とかDirectDraw使ったりして高速化できるし
フルスクリーン化もほんの数行でできるし通常の2Dベースなら問題ないけどな
334名前は開発中のものです。:04/06/16 20:35 ID:qfS7ZFH2
アドバイスありがとうございます
いろいろ考えるよりもまず作ってみますね
335名前は開発中のものです。:04/06/18 00:18 ID:9WjZIBPx
画像ファイルの形式ってなにを使えばいいんでしょうか?
今は使ってないんですが、将来的に透過情報も使うかもしれないので
PNGとかにしようかと思ったんですが、libpngを使うと思ったより実行ファイルが
大きくなっちゃいまして。
336名前は開発中のものです。:04/06/18 09:54 ID:F29KhlRt
手動でハンドリングするか、独自形式で持てばいい。
A付ビットマップだていいじゃないか。
337名前は開発中のものです。:04/06/18 16:59 ID:xHeZzj8T
>>335
>libpngを使うと思ったより実行ファイルが大きくなっちゃいまして。
 
無圧縮バイナリが200KB程度増えることが障害になるケースが
あるのか疑問だが、もし気になるならlibpngが内部で呼び出してる
zlibを直接呼び出せばいいのではないか。あれは64KB程度だろう。
 
実行環境のHDD容量をハデに使っても構わないなら>>336が云うように
RAW形式にしておけばいいし。どのみち配布時はLZ77派生アルゴで
圧縮するわけだし。
338名前は開発中のものです。:04/07/13 21:07 ID:BtuSWgS+
ガチャフォースみたいなアクションゲームの、ルート検索ってどうやるんですか?
迂回したり、飛び越えたりしたいのだが、どうやってルートを計算したらいいのか分からない。
マス目上にして、2Dシミュレーション+大雑把な高さのようなのにしようにも、障害物の大きさがバラバラ過ぎて、判定出来ない。
目を細かくすれば、無駄に容量食うし、処理も重くなる。
風雲新撰組を見ると、ポイントのようなものがあり、迷ったらとりあえずそこに出るという形になってるぽいですが、あれも何か変。
いいのありませんか?
339名前は開発中のものです。:04/07/22 22:48 ID:960yNB+R
壁ずりするときに必要な2点の壁の頂点座標ってどうやって取得するんですか?
DirectX&VC++使ってます。
340名前は開発中のものです。:04/07/25 04:45 ID:35wXch4G
>>339
正射影を考えればいいんじゃないかな
こことか参考になるかどうかわからないけど
http://www.cam.hi-ho.ne.jp/strong_warriors/teacher/chapter09.html
341名前は開発中のものです。:04/12/09 17:11:37 ID:xa3u+hyT
ホシュ
342名前は開発中のものです。:04/12/11 16:27:00 ID:vgTlHBwt
OpenGLでパーティクルを飛ばすソース作って来いと言われたのですがまったく思いつきません。
誰か教えてください
開発環境は.NETでGSlib使ってます。
343名前は開発中のものです。:04/12/11 16:34:08 ID:811lQTfW
>342
class 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をインスタンス毎に別々の値にすると
花火のようなパーティくるになる

このソースはさすがに理解できるだろ?
あと、マルチポストするんなら、先に質問してほうに断りいれないと失礼だぞ
344名前は開発中のものです。:04/12/11 16:45:12 ID:vgTlHBwt
すいませんマナーなってませんでしたね
初心者なんでそのソースみるとJAVAに見えるんですがどうなんですかね?
345名前は開発中のものです。:04/12/11 17:05:55 ID:811lQTfW
>344
C++です
自分の使用する言語
後、現在OpenGLでどの程度の事までできるのか
などなど、情報が少なすぎる

346名前は開発中のものです。:04/12/11 17:25:03 ID:1OS7WaCz
Javaじゃないのはすぐにわかるだろ
347名前は開発中のものです。:04/12/11 23:20:32 ID:t9QkwRza
すみません、
現在Cにて、シューティングのタスクシステムを構築中なのですが、製作する構造体で悩んでます
今考えているのは

@固有データの性質別に構造体を製作
A構造体を1種類しか作らない
Bプライオリティ毎に別の構造体を製作

多分実装するなら@かAになると思うのですが、
構造体の種類が増えると重くなるとか、不具合は出るのでしょうか?
348名前は開発中のものです。:04/12/11 23:38:46 ID:uYrLB73N
>>342
マルチポストですか
349名前は開発中のものです。:04/12/11 23:39:37 ID:uYrLB73N
>>347
今月のCマガにタスクシステムのってたぞ
350名前は開発中のものです。:04/12/11 23:52:03 ID:t9QkwRza
>>349
おお!
じゃぁ明日Cマガ買ってきて勉強してみます〜
351名前は開発中のものです。:04/12/12 00:37:31 ID:CeTMvWXF
ゲームを作るのにお勧めする、
言語ってありますか?
352名前は開発中のものです。:04/12/12 01:04:00 ID:/zorvY1T
>>351
C++かJavaが一番だとは思うけど、
挫折した(またはしそう)ならHSPが良いかもしれない

知り合いがHSPでゲーム作ってたけど、意外とキチンと出来てるので驚いた
353名前は開発中のものです。:04/12/12 01:10:19 ID:bBuHfoVs
ゲームの規模にもよるけど、JAVAはあまり向かない気がする
354名前は開発中のものです。:04/12/12 01:10:41 ID:CeTMvWXF
>>352
情報ありがとうございます。
C++ってお金かかりますか?
355名前は開発中のものです。:04/12/12 01:26:19 ID:/zorvY1T
>>354
コンパイラと開発環境はBCC使えば無料で揃える事が出来る

出来れば.NETを使った方が良いけどソフト代がン万円・・・・・
学生なら学割で5000円になるけどキーコードの申請に2週間以上かかる

そういえば.NETって評価版があったような希ガス
それと落としてみて使ってみてから決めるのがいいかも
356355:04/12/12 01:30:19 ID:/zorvY1T
ttp://www.kumei.ne.jp/c_lang/bcc/index.html
「猫でもわかるプログラミング」内に
BCCのチュートリアルがあったので張っておきます

連投スマソ
357名前は開発中のものです。:04/12/12 01:32:23 ID:bBuHfoVs
>>355
今はベータ版が無料で使えるYO(VisualC++ 2005 Express)
358名前は開発中のものです。:04/12/12 06:11:00 ID:V4Sj+KDu
>>355
vcToolKit + プラットフォームSDK + DirectX SDK
全部タダ
BCCよりいいよ
359名前は開発中のものです。:04/12/12 06:54:33 ID: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/
学生にしたってなんでこんな金ケチるんだろう・・・。
これからかかる書籍代云々含めたらこんなどころの話じゃないのに・・・。
360名前は開発中のものです。:04/12/12 10:57:25 ID:eeUucuKY
苦労をしたなりに得られるものはあったよ。
書籍も殆どは図書館で済ませているし。
今はD言語+SDLだけど、総合開発環境に染まっていたらこれらの存在を知ることすら無かっただろうね。
総合開発環境も使ったことあるけど、俺は馴染めなかった。
結局のところ、人それぞれ。
361名前は開発中のものです。:04/12/12 11:13:06 ID:vLKNn5Dw
>>359
今はC#や無料のアドイン可能な言語が使えて4000円以下だけどな。

http://www.amazon.co.jp/exec/obidos/ASIN/B0002ERS18/250-8777118-1081041

まあ、.NETは初心者には複雑すぎるだろうからVCToolkitで不満が出たら買う程度の認識で構わないと思うぞ。
362名前は開発中のものです。:04/12/12 12:56:49 ID:gDl4N7ky
>>353
規模というか3Dが、だな
2Dでも規模が大きければJavaや.NETのほうがC++よりはいい

まぁSDL&OpenGLラッパー使えばどうでもいいが
Java3D方面はおいかけていないのでわからない

Javaの利点はあれだ、無料でコンパイラからIDE、データベースを
使った業務プログラムまでこなせるものがひとつの言語で作れるというところだろう
363名前は開発中のものです。:04/12/12 15:16:20 ID:T4tmo/uT
>>355
VS.net学生版登録しましたが,3日で垢とれました。
364名前は開発中のものです。:04/12/12 22:08:28 ID:ECDzMr09
2万でstudent買った一ヶ月後に五千円になりました。
365名前は開発中のものです。:04/12/12 23:03:21 ID:WoF+KpwQ
>>364
毎年更新するよりマシ
366名前は開発中のものです。:04/12/12 23:09:00 ID:B/rSPOKE
独学でプログラムは十分学べるでしょうか?
367名前は開発中のものです。:04/12/12 23:31:47 ID:FwlKHgFV
>366
私の持論ではプログラムは独学で身に付けるものです
368名前は開発中のものです。:04/12/13 00:12:14 ID:H/NM9SWx
ソースを書きまくる
369347:04/12/13 00:54:40 ID:oagD9H4j
>>349
Cマガ買ってきたら解決しました〜
どうもありがとうございました
370名前は開発中のものです。:04/12/13 08:23:09 ID:Bu85fQFn
>>366
むしろ経験上、独学以外で学んで奴にロクな奴はいない

>>360
よかったよかった
紹介した介がある
371354:04/12/13 23:44:03 ID:zV7Kakl+
皆さん本当にありがとうございます。
時間があればこつこつと勉強していきます^^
372名前は開発中のものです。:04/12/14 07:16:46 ID:poGq8Mnc
>>366
みんな独学してます。
専門学校も情報系の学部も、周りに同好の士がいるという以上の意味はたいしてない。

しかも、昔はプログラミングの学習曲線は相当鈍いのが常識でしたが、
今ならやる気さえあれば数年でアマチュア最高峰、下手なプロより上のレベルまで行けます。
この記事の表現に従えば、「高速道路が敷かれた」と。

 インターネットの普及がもたらした学習の高速道路と大渋滞
 http://blog.japan.cnet.com/umeda/archives/001909.html

俺が正統な書物や論文に当たれないまま
授業中にウンウンポリゴンの出し方考えてた頃と比べりゃめっちゃ恵まれてるから、
悩まずとっととやれ。
373名前は開発中のものです。:04/12/14 10:51:03 ID:73CldVQs
初心者がwindowsで2Dシューティングを作るには
どのプログラミング言語orツールが適していますか?
勉強しながら簡単なサンプル程度のものから始めようと思っています。
374名前は開発中のものです。:04/12/14 12:44:42 ID:EyG3+mk4
HSPかVC++
Delphi、Rubyもいいかもな
豆乳、GameMakerという手もあるか
375名前は開発中のものです。:04/12/14 13:10:05 ID:bBZqvcB7
初心者にC++をすすめるのはどうかと
ま、まずは言語自体が初めてなのかゲーム作成が初めてなのかによるが
376名前は開発中のものです。:04/12/14 13:45:31 ID:DDGCo+Mb
>どのプログラミング言語orツールが適していますか?
と聞いてるあたりからプログラム経験は無いと思われ。
そんな>>373にはMultiMedia Fusionを薦めてみる。責任は取らん。
377名前は開発中のものです。:04/12/14 13:52:11 ID:el6KibCx
378名前は開発中のものです。:04/12/14 15:46:14 ID:6EayMZnD
>373
プログラミングがしたいんじゃなくてゲームが作りたいだけなら>377
すぐに画面に何かだして動かしたいならHSP、GameMaker、豆乳
時間はかかっても超本格的にやりたかったらC/C++

ちなみにC/C++はどんなに早くても3ヶ月くらいは
ビットマップ一枚表示できないことを覚悟せよ
個人差や学習効率によってはもっとかかる
挫折者も多い
ちなみに漏れはCがはじめての言語で
結構みっちり勉強してたけど
絵をウィンドウに出すまで半年かかった
でもC/C++だと(ある程度マスターできれば)飯が食える
379名前は開発中のものです。:04/12/14 18:06:21 ID:FapYMSue
>>378
ヲイヲイ、初心者をいじめるなよ。
現実、.netでもCでSDKならSTGの型を作るだけなら
一週間(一日3〜4時間×5日+10〜14時間×2日を目安)でできぞ。
(馬鹿な事言ってるのは分かるけど突っ込まないでね。)
ただ、問題はそこから
アルゴリズムとか、言語の色んな仕組み、その他多くの関数を知らないと
そこから先進めなくなる。
で、一番高い難所は
Visual Studioの使い方だ。これを理解するのに2日掛った・・・。

380>>379:04/12/14 18:19:40 ID: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でも見れるようにしておく。
381>>379:04/12/14 18:37:06 ID:FapYMSue
基本的に、方針として
1.コンソール物をいくつか作ってみる。(main関数だけでいいから)
  ■適当に数回「分岐 if switch 」とか、「ループ」「配列」「文字列」「ファイル操作」とかのサンプルを研究
  で、プログラム板の宿題スレからなんか適当に選んで作ってみる。
2.関数を理解する。
  ■「引数」「関数」「返り値」とかの言葉を調べる。
  1.に同じく、プログラム板の宿題スレ(略
3.Win32APIを泣きながら覚える。
  ■とにかく、記事を読む。Sorceを読む。分からないものも調べる。
   でも分からないものはそのうちどうにかなるさぁと開きなおる。
4.自分だけで(カット&ペーストは使ってもいいが)キー入力と絵の表示を連動する物を作る。

5.あとは、野と成れ山と成れ
382名前は開発中のものです。:04/12/14 19:31:00 ID:6EayMZnD
>381
>5.あとは、野と成れ山と成れ
なんかカコイイw
383名前は開発中のものです。:04/12/14 22:57:59 ID:LLXVByAK
>>379
一瞬、「白紙の状態からC++を理解してSTG製作」を一週間でこなしたのか

とか思ってしまった俺は負け組み


まぁHSPはちょっとやったけど、あれも爆発的に手間が省けるってほどじゃない・・・・・・・
結局システムとか判定は1から作らないといけないし・・・・・・
384名前は開発中のものです。:04/12/15 05:08:46 ID:b6lgozwB
>結局システムとか判定は1から作らないといけないし・・・・・・

それを省いたら××ツクールになってしまう。
385名前は開発中のものです。:04/12/15 10:19:32 ID:HsGZhQ6q
>>384
でも、システムとか判定は種類が違えど、どこかしら似ている部分が多い。
386名前は開発中のものです。:04/12/15 14:08:56 ID:45BomRiK
再利用できる汎用エンジンを自分で作ればいいじゃないか。
387名前は開発中のものです。:04/12/15 14:52:20 ID:L/K/Ntdf
ゲーム開発そっちのけで
オナヌィツールを作るのに夢中になる罠
388名前は開発中のものです。:04/12/15 19:56:57 ID:b6lgozwB
まーわざわざゲームプログラミングやってるって
客観的に見たら、ォナニーにしか見えないだろうとは思う・・w
389名前は開発中のものです。:04/12/15 20:18:31 ID:uxKIR4qz
>388
まぁプラモデルなんかも同じようなもんだろうな
390名前は開発中のものです。:04/12/16 00:31:07 ID:U1q3cJqR
なんだって初めはオナニーだろうさ
391名前は開発中のものです。:04/12/16 00:42:48 ID:GydeynlB
>>390
じゃあ、もう、オナニーでいいよ。
みんなプログラムなんて組むのやめようよ。
392名前は開発中のものです。:04/12/16 01:19:50 ID:U1q3cJqR
391は不思議な頭の構造をしているようだ
393名前は開発中のものです。:04/12/16 07:16:53 ID:I5NiXAvz
・オナニーに似ている
と言っているのに
・オナニーしよう
というのは(*^ー゚)ノ ぃょぅな構造をしているとしか思えない
394373:04/12/16 08:50:59 ID:Ts+btREq
たくさんのご親切なレスありがとうございます。
>>377で作ってみます
395名前は開発中のものです。:04/12/16 09:18:20 ID:7k6UBUX7
まあ、最も無難な選択だ。
396名前は開発中のものです。:04/12/16 11:35:07 ID:nYcbMoQ4
最初はそれでいいと思う
それで限界だと思ったら別のを探せばいいしな
397名前は開発中のものです。:04/12/16 20:11:53 ID:A2FLIb2p
あ、>>395,396は>>391へのレスね。
398名前は開発中のものです。:04/12/16 23:02:01 ID:3yDx983G
あと、最初から欲張らないことだな。
目標は高く持つべきだが、いきなり挑戦するのは無謀。絶対嫌になる。
いきなりチョモランマ登頂を目指すのではなく、まずは天保山辺りから少しずつ進めていく。
399名前は開発中のものです。:04/12/17 01:11:42 ID:cec1JpT9
MFCで○×ゲームとか「クリックしたら動くゲーム」
とかは作れるようになったんですが、自動で動くゲームっていうのが分かりません。。。
http://www.geocities.jp/ball_by_vc/Ball.zip
クリックしたらボールが動く、っていうのを簡単に(60行ほど)作ったんで、
誰か1秒ごとに動いていく、のように書き換えてうpしてください。お願いしますorz
400名前は開発中のものです。:04/12/17 01:28:43 ID:kwb+kcf4
>>399
BallWnd::OnTimerを追加(中身はOnLButtonDownと同じくInvalidateで良い)
メッセージマップにON_WM_TIMER()を追加
InitInstanceの最後にSetTimerをElapse=1000で追加

引数はMSDNなりなんなりで調べれ
401名前は開発中のものです。:04/12/17 23:01:07 ID:phamhyn5
RPG、SRPGなどの、正方形のマスが1単位のフィールドのタイプのゲームでは、
どのようにフィールドを表示するのが普通なのでしょうか。

僕はSRPGを作っていて、僕のは、フィールド1マス分を表示する関数があって、
そこで、地形下地、地形上地、移動範囲、攻撃範囲、キャラ、カーソルと
順番に表示し、フィールド全体を表示する場合は、それを複数回行う方法です。

全てが1マスに収まっている場合はその方法でよかったのですが、
キャラの立つ位置を変えたり、ダメージを受けた時に吹き飛んだりさせたく、
キャラの位置をマスからはみ出して表示させたくなったのですが、
それをやった所、案の定、体が千切れて表示されてしまいました。

ツクールでは、地形サイズが16に対して、キャラが24なので、
はみ出しているのが普通なのですが、どの様に表示しているのでしょうか。
402名前は開発中のものです。:04/12/17 23:09:51 ID:Kqu8dkBQ
フィールドとキャラの描画を分ければいいだけの話じゃ…?
403名前は開発中のものです。:04/12/17 23:11:24 ID:tQoXALVp
フィールド1マスごとでなく、フィールド全体で、
地形下地、地形上地、移動範囲、攻撃範囲、キャラ、カーソル
と表示すればいいんでない。
404名前は開発中のものです。:04/12/17 23:11:42 ID:d+0PjBV1
RPGツクール2000の地形は拡大表示してたはず
405名前は開発中のものです。:04/12/17 23:14:53 ID:Am+j201E
>>401
STGみたいに座標で管理するのはNG?

背景描写して、その上から座標でキャラクターを描写
ゲーム中のキャラの座標は、マスのドット数で割れば出せる

俺だったらこういう風な処理にするけど、SLGは作ったことないからなぁ・・・・・・
誰か創ったことのある人の意見キボンヌ
406401:04/12/17 23:18:07 ID:phamhyn5
>>402
具体的にお願いします。

>>403
速度を早くするために、位置を指定して表示するためにそうしていました。
スクロールの時は、新たに視界に入る分のみ表示、
キャラが移動する時は、前の位置と移動後の位置のみとか。

>>404
キャラもですね。縦横それぞれ2倍に。
407401:04/12/17 23:21:22 ID:phamhyn5
>>405
細かくやれば、正しく表示は出来ると思うのですが、
セルという概念でデータを管理している以上、
それを生かした表示の仕方が無いかなと。
408名前は開発中のものです。:04/12/17 23:31:34 ID:Am+j201E
>>407
じゃぁ、>>402の言うように背景表示してから
キャラ表示すればいいだけの話では?

 / ̄ ̄/
 /   /
/__/こんな風に全ての背景を一気に表示させてから

 / ̄ ̄/
 /('A`)/
/__/キャラを描写して


 / ̄w/
 /('A`)/
/w_/木とか、キャラの上に来るオブジェクトをのっける
409408:04/12/17 23:32:15 ID:Am+j201E
ズレた・・・しかも判りにくいし・・・・・・・
410403:04/12/17 23:44:09 ID:tQoXALVp
>>406
>位置を指定して表示する

そういうふうにするなら、移動後の座標を予測して、その通り道のマスだけを描画するってのは?
どのみちマスとマスの中間にキャラを表示するには、
「1マス分を表示する関数」では表現できないから、
複数のマスを>>408みたいに表示する関数を作ればいいんでない。
411名前は開発中のものです。:04/12/17 23:44:56 ID:INtctKM+
>>408
たぶんだがそういうことをいっているわけではないかと・・・
だってそれはスプライトのプライオリティの設定だけですむわけだし

どっちにしろ抽象過ぎてどうしたいのかがつたわってこない
412401:04/12/17 23:46:18 ID:phamhyn5
>>408
もう一度その方法をやってみます。

引き続き、いい方法を見つけた方が居ましたら、教えてください。
413名前は開発中のものです。:04/12/17 23:49:38 ID:INtctKM+
そもそも2プレーン+キャラ程度なら速度稼ぐためのせこいことする必要ないんじゃないの?
414401:04/12/17 23:53:58 ID:phamhyn5
>>410
移動は、半歩ずつとかは無く、1マスごとに飛び飛びに行われます・・。
一マス移動、前のを消す、1マス移動、前のを消すという感じです。

>>411
確かに文章で説明するのは難しいです。
415401:04/12/17 23:58:14 ID:phamhyn5
>>413
どうなんですかね。確かに見た目で遅いなとは思わなかったですけど。
いい方法が無い場合はそれで行きますが、何かあればいいのですが。
416名前は開発中のものです。:04/12/17 23:59:06 ID:d+0PjBV1
補正値でキャラクタをずらして表示できるようにするか
シナリオ進行時は表示ルーチンを別にする

おそらくマップの論理座標x=1,2,3,....というの指定するだけでそれに対応した位置に
表示してくれる便利なルーチンを作ったんだろうが後から小芝居させるときに不便だと
気づいたんじゃないかな。
キャラクタをグラフィックの座標(0-639)で表示できるルーチンを先に作ってそれのラッパーで
論理座標を指定して表示でいるルーチンを作っていればこんなことにならなかったはず
今から作り直すか論理座標に追加でグラフィックの座標で補正できるようにすればいいと思う

>体が千切れて表示されてしまいました。
ここから推測するに1マス作成してから転送してるんだよね?
で、>>408みたいにするのは面倒だから代案を考えてくれと。
だったら影響があるマス全部に個別に対応するしかない
キャラクタが千切れたらその千切れたもう片方が本来あるべきマスに
描けばいい。
417名前は開発中のものです。:04/12/18 00:02:01 ID:fcL5sLlu
別に処理が軽い分には、問題ないと思うのだが・・・・・

処理軽ければ派手なエフェクトとかガンガン入れても平気だろうし、
低スペックマシンにも優しいし・・・・・
418名前は開発中のものです。:04/12/18 00:05:48 ID:fcL5sLlu
あ、思いついた・・・・

>キャラの立つ位置を変えたり、ダメージを受けた時に吹き飛んだりさせたく、
この処理の時だけ、動いたキャラを表示させないようにして
@から改めて動いたキャラを表示させれば良いんじゃないだろうか

この方法だと、キャラが一番上に表示されてしまうけど・・・・・・
419名前は開発中のものです。:04/12/18 00:14:29 ID:aIR3jZyQ
>>417
SLGならフルフレームでなくてもいいだろうし
マップチップが固定されて2プレーン程度であれば
600MHzクラスのCPU+UMAの統合チップセットでも
60fps余裕で出るぞ

ノーウエイトにしてみればわかるがサイズにもよるが200fps余裕でこえるかな
420401:04/12/18 00:16:54 ID:oq7OWQ9j
連続投稿とか出て書けないです。

>>416
何となく見えてきました。

>おそらくマップの論理座標x=1,2,3,....というの指定するだけで
>それに対応した位置に 表示してくれる便利なルーチンを作ったんだろうが
>後から小芝居させるときに不便だと気づいたんじゃないかな。
まさにです。

>>417
ゲームの制作意欲を残す為に、
常に難しい方法でやるように心がけています。

>>418
グラフィックを綺麗にする為に、マップチップで陸と海の境界線とか、
草と砂の境界線とか、それらを2層目で書くようにし出したんですけど、
足の位置にその境界線が来てしまって、草か水かどこに居るのか分かりにくくなり、
キャラの位置を全体的に上にずらそうと思いこれをやろうと思ったので、
常にやることになります。ダメージを受けた時はその方法でいけますが。
421名前は開発中のものです。:04/12/18 00:19:25 ID:nY+nxo0b
>>418
最後にソートすりゃいいんじゃね?
もしDirectX使ってるならrhwを指定するだけでいいだろうし
SDLならレイヤーに対応してたはず

でもそんな小細工できるならこんな質問しないよな_| ̄|○

>>419
環境がわからんから皆ツッコミが甘くなってるだけじゃないかと・・・・
GDIで>>401の方法だと40FPS出ればいいほうだろ
422401:04/12/18 00:26:47 ID:oq7OWQ9j
>>416
>影響があるマス全部に個別に対応するしかない
まさにここだと思うんですよね。
ずらして書いた後、そこの上に地形を書いたために千切れてしまったり、
逆にマスに上書きしたつもりが、キャラがずれている分消せなかったり。

>>419>>421
fpsの事を教えてください。調べてみると
「動画のなめらかさを表す指標。1秒間に何枚の画像を表示しているかを示す。」
らしいのですが。

ちなみに、C言語、SDKウィンドウズアプリ、イベントトリブン方式
で製作していて、フィールドのサイズは、13X13です。
423401:04/12/18 00:38:29 ID:oq7OWQ9j
かなりいろんな意見が聞けて勉強になりました。
それらを参考にもう一度やってみます。
うまく行きましたら、ご報告します。
みなさま、ありがとうございました。
424名前は開発中のものです。:04/12/18 01:09:32 ID:aIR3jZyQ
>>421
DirectDrawでのbltを基準にして考えていた
だからRiva128以降で16bppなら余裕かと思っていたが
GDIでも同じね
DDB使えばDirectDrawより早い

>>422
あーfpsわからないか
その考え方で合っているんだが、ゲームはWinのイベントドリブンで
考えるのはよしたほうがいいぞ
メインループでがりがり毎回描画するアクション系の考え方で
そのなかで独自のイベントを作っていったほうが・・・

どっかにSTGとかならメインルーチンの雛形ころがっているはずだから
それ参考にしてみるといいよ
425名前は開発中のものです。:04/12/18 02:23:17 ID:fcL5sLlu
('д`)ノ<先生、質問です

DxInputでパッドの入力処理を製作してるんですが、
bool型で各ボタンの状況を判断する方法以外で、何か良い方法は無いでしょうか?
426401:04/12/18 05:54:22 ID:oq7OWQ9j
1マスの全てを表示するのを全体に行うというのを、
地形を全体に、移動範囲を全体に、キャラを全体に、に変えました。

後の処理のやり方としては、キャラがずれてかかった分のマスをチェックして、
その分も追加して表示する、という案を使うと思います。
やり方は単純ですが、ずれチェックがかなり難しそうです。

ひとまず眠いので寝ますが、今日中に出来ると思います。

>>424
僕のやり方は、基本はメッセージループなんですが、
メインループの見易さ、細かさも取り入れたやり方をしています。

メッセージだと、その時に関係ないルーチンに当たったり、
グローバル変数だらけになったりして、メインだと、やや重くなりますが、
そこを両方とも解決できないかと編み出しました。
当然、アクション系では使いにくいやり方なのですが。
427名前は開発中のものです。:04/12/18 16:20:14 ID:nRcDUE9K
>>425
意味がわからんが、
ゲーム的には、
・押した瞬間かどうか: bool
・離された瞬間かどうか: bool
・押してからどれだけたったか: int
も実装しておくとらくだが
428401:04/12/18 20:45:34 ID:oq7OWQ9j
ずれチェックがどうしても重くなってしまいました。
仰っていた通り、全部表示してしまった方が効率がよさそうです。
通常時はずれられないようにして、スクロールの時とかには、
高速の従来バージョンで表示できるようにし、
戦闘など特別な時にのみずれられるようにします。

しかし、まだ問題がありました。
キャラの足が地形の境界線に掛かり、どの属性の地形にいるか分かりにくい事です。
そもそも、キャラの位置を全体的に上にずらして、境界線が絶対こない所に
足の位置が来るようにしようと思い、この質問をしていたのですが、
先ほど結論に達した、通常時はずらさないに反してしまいます。

解決方法として、一番楽な、その部分には目を瞑る方法、
少ないずれチェックで済む、上にだけずれている時の表示関数を作る方法、
ずれている時も全表示でなく位置を指定して表示できる、
ずれ方を半マスに限定して、キャラを半マスずつ表示する方法を思いつきましたが、
逆に位置関係が分かりにくいなどの弊害が起こる事も考えて、
一番楽な、目を瞑る方法で行きたいと思います。

ここらの部分を納得して先に進むことが出来ます。
みなさま、ありがとうございました。
429名前は開発中のものです。:04/12/18 21:09:54 ID:fcL5sLlu
>>427
成るほど!

じゃぁ、そのやり方で構造体作り直してみます!
ありがとうございます〜
430名前は開発中のものです。:04/12/18 21:13:56 ID:aIR3jZyQ
ようはハイドライドの森みたいな描画やりたいわけね
あんなの速度的にも軽い軽い
8bitマシンでさくさく動いていたし、ノーウエイトにすると早すぎたしね
内部の作りはSTGと同じにしていたとか聞いたことがある希ガス

半キャラ単位で描画してもいいし、Y軸基準で描画してもいい
あの程度でいいのなら100MHzでもさくさくかも
431401:04/12/18 22:04:34 ID:oq7OWQ9j
>>430
やった事がないのですが、このゲームですか?
スクショが乗っていて、何か見た事があるゲームではあるんですけど。
http://www2.plala.or.jp/yasinoue/oldgame/hyd1_1.html
432名前は開発中のものです。:04/12/18 22:17:10 ID:q7rx8BU3
>431
うわ、懐かしい
漏れがやったのはファミコン版のハイドライドスペシャルだけど
433名前は開発中のものです。:04/12/18 22:37:17 ID:BHPEV/eq
>>425
列挙子で

FREE 押されてない
PUSH 押した
PULL 放した
HOLD 押しっぱなし

を作って分類すると楽かも。
434425:04/12/18 22:46:42 ID:fcL5sLlu
>>433
早速その方法も試してみます〜
435名前は開発中のものです。:04/12/19 06:16:39 ID:DRqhJ+eh
スミマセン
D3DXMATRIXで、左右反転させるような関数って無いですか?
436名前は開発中のものです。:04/12/19 06:27:39 ID:DRqhJ+eh
スミマセン

D3DXMatrixRotationYで180°指定してやったらできますた

もうちょっと自分で確かめてから質問するようにします・・・・・・
スミマセン
437名前は開発中のものです。:04/12/19 09:51:38 ID:K0ZRB1bT
質問系のスレッドで質問させていただいたのですか、運悪くご返答を頂けなかったので
このスレッドで質問させてください。

今開発されてるスクウェア・エニックスのファイナルファンタジー12って
技術的にはかなり凄いんですか?
もぐりでも頑張ればグラフィック以外は再現できるレベル?
なんか戦闘がリアルタイムで、しかも地形の形状を戦闘に利用できて
かつ主人公以外は完全に自動で行動させられるらしいですけど。
プログラムの中さえ分かれば、自分でもどうにか再現できるレベルなのか。
皆さんはどう思っておられますか。
438名前は開発中のものです。:04/12/19 10:08:28 ID:7IrxQaSK
>437
プログラムわかんない人に説明すると長くなるので短く漏れの意見
設計はすごくしっかりしてるんじゃないかと思う
439名前は開発中のものです。:04/12/19 10:33:30 ID:bc/DHSmt
ttp://moon.cyberfront.co.jp/title/pc/halflife2/
ここのムービー見れ。

最高峰の物理エンジンとAI使ってるから。
FF12?ナニソレ?ってくらい凄いよ。

漏れはFPS系酔うから買ってないけど、
友人宅で見た時は鳥肌立った。
440名前は開発中のものです。:04/12/19 11:04:56 ID:WMy/66MH
>>439
Half-life2は2.4GHzのメモリ256M、VRAM32M以上レベルの高性能であのグラフィック。
FF12はCeleron300MHz、メモリ32M、VRAM8M相当の低性能であのグラフィック。

…釣られた?w
441名前は開発中のものです。:04/12/19 11:13:00 ID:7IrxQaSK
グラフィックはプログラムだけじゃ語れないからね
FFのテクスチャのクオリティはすごいと思うよ
小さくて制限の多いなかで、すごくいい仕事してると思う
素人さんはそれにだまされて「PCでFF以上のグラフィックって難しいですよね」
とか言いはじめるくらいだから
少し脳内補間が効いてるっぽいところもあるけど
多分>437もその口
442名前は開発中のものです。:04/12/19 11:13:24 ID:2VUgMi4z
>>440
グラボでいうと
Radeon最新とRivaTNTだからな。
443名前は開発中のものです。:04/12/19 11:25:18 ID:VXomDsbq
>>437
FF12のゲームシステムをツクールで再現したいという話か?
444名も無き冒険者:04/12/19 11:43:55 ID:bc/DHSmt
>>440
アルゴリズムの話に何でグラフィックやらハードの差が出てくるんだ?


・・・あ、釣られた?w
445名前は開発中のものです。:04/12/19 11:50:22 ID:bc/DHSmt
名前間違えた('A`)

つまり、>>437の言う

戦闘がリアルタイムで、しかも地形の形状を戦闘に利用できて
かつ主人公以外は完全に自動で行動させられる

システムなんてそんな敷居の高いものじゃないから、頑張れば
それなりのものは出来るんじゃね?
446名前は開発中のものです。:04/12/19 12:12:07 ID:WMy/66MH
>>444
じゃあお前、アルゴリズムさえ知っていたらPC98やX68000時代のマシンでHalf-life2やFF12を実装できるってのか?
…あれ?釣られた?w

俺が言ってるのは

>最高峰の物理エンジンとAI使ってるから。
>FF12?ナニソレ?ってくらい凄いよ。

Half-life2もFF12も似たり寄ったり、どっちも限られた環境を追求してあのグラフィックを作ってるんだから比べられるもんじゃないって事だよ。
447名前は開発中のものです。:04/12/19 12:30:09 ID:bc/DHSmt
>>446
>>437がグラフィック以外はって書いてるのに何でグラフィックの話持ち出すんだ?
あくまでアルゴリズムの話だぞ。

喪前さんは、ゲーム全体の話をしてるようだが・・・

448名前は開発中のものです。:04/12/19 15:24:24 ID:DRqhJ+eh
>>446
釣りだと思うけど、十分いけると思うぞ
と書き込みそうになったorz

確かにグラフィックが無理だし、物理エンジンも走るかどうか微妙だな・・・・・
スマソ吊ってくる
449名前は開発中のものです。:04/12/19 15:33:27 ID:DRqhJ+eh
マジレスすると>>437の言ってる事は
アルゴリズムが理解できて
尚且つ数学も理解できて無いと_

でも技術的には
結構ありふれた物使ってるのじゃないかと思われ
450名前は開発中のものです。:04/12/19 15:37:31 ID:WMy/66MH
>>447
話題が二転三転してないか?
お前が>>439で書いてるのはほとんどグラフィック関係だけじゃん。

物理エンジンはグラフィックに関係してないのか?
アクションゲームのAIをロールプレイングゲームのAIと比べられるのか?

俺が突っ込んでるのは「PCとPS2でそもそもジャンルが違うHalf-life2とFF12を比べられるわけないだろ、釣りか?」
って事なんだが。

お前にとってHalf-life2のアルゴリズムはFF12より凄いらしいが、真・三国無双と初代ドラクエだとどっちのアルゴリズムが凄いの?w
451名前は開発中のものです。:04/12/19 15:56:57 ID:DRqhJ+eh
>>437
連レスだけど・・・・・・
モグリじゃ再現はまず不可能
モグリでも再現できるようなら、
同人ゲームでそういった3Dをバリバリ動かすようなゲームが溢れてるはず

グラ関係等での制約もあるんだろうけど、
今の所そこまで高度な処理をするようなゲームは殆どない

こんな回答で良いのだろうか?
452名前は開発中のものです。:04/12/19 16:23:23 ID:yaeQpsCQ
前線に出たがるタムリン(ヒーラー)
453名前は開発中のものです。:04/12/19 17:25:18 ID:bc/DHSmt
>>450
はいはい、クマ-(AA略

アルゴリズムって言葉を調べてね。
454名前は開発中のものです。:04/12/19 18:31:41 ID:bc/DHSmt
あー。公式のムービーはプロモーションか。


ttp://www.4gamer.net/store/movie/HALFLIFE2_E3_2003.lzh

こっちを見ればわかるだろ。
455名前は開発中のものです。:04/12/19 19:02:26 ID:P175sgFg
国内だと低スペックの奴が、文句言いまくるからなぁ。
3Dですら、連中にとっては高スペックらしい。
456名前は開発中のものです。:04/12/19 19:36:37 ID:WMy/66MH
>>453-454
池沼か?
>>437はそもそもFF12がグラフィック以外なら素人に作れる物なのかを聞いてるのに、何でHalf-life2が話題に出てくる?
全く関係無いだろ?
457名前は開発中のものです。:04/12/19 20:02:30 ID:bc/DHSmt
>>456
読解力ってものが無いのか?

>>437
戦闘がリアルタイムで、しかも地形の形状を戦闘に利用できて
かつ主人公以外は完全に自動で行動させられる
技術が凄いのか?って聞いてるんだろ。

だから参考にするならHalf-Lifeを見ろと言ったわけ。


おまいさんは、ただFF12をけなされたと勘違いして脊椎反射で噛み付いてるだけじゃないか。

そりゃ総合的に見ればはFF12もかなり凄いって事くらい解るよ。
458名前は開発中のものです。:04/12/19 20:27:21 ID:yaeQpsCQ
既存のゲームの名前を出さずに考えるとどーなん?
459名前は開発中のものです。:04/12/19 20:31:14 ID:4xsPTOj3
ピンキリじゃないかね。
地形を戦闘に利用することが出来るようにすること自体は
そんな難しくないだろうけど、それを使ってゲームを面白くするシステムを考える方が難しい。

自動行動だって簡単な物はすぐ出来るだろうけど、「頭がいい」って言えるような
学習も備えたやつを作ろうとすると多少手間がかかる。
460名前は開発中のものです。:04/12/19 21:03:48 ID:P175sgFg
シミュレーションだけど、PC-88時代から大戦略などで地形を戦闘に利用することは出来た。
RPGでは英雄伝説のAIは、敵のHP情報などを使用して、割と頭の良い行動が出来た。

>>459の「学習を含めた」、というのは恐らくないだろうから(保存メディアの必要領域が
大きくなるから)、そんなに高度なものは作られていないと思う。
461名前は開発中のものです。:04/12/19 21:16:32 ID:+EamBMW/
>>460
以前どこかのRTSがやってたと記憶するんだが、
現在の状況を元に次の行動を決定する過程で
パーセプトロンと同じモデルを使っていれば
記憶に使う容量は学習が進んでも増える事はない(重みが変わるだけ)し、
SLGの分野では(類似した物が)そこそこ使われてる気がする
462名前は開発中のものです。:04/12/19 21:24:33 ID:P175sgFg
へー、凄いなぁ。
勉強になります。
463名前は開発中のものです。:04/12/20 00:43:20 ID:rMlKdZvO
何故にパーセプトロン限定、相互結合型も入れておいて下さい(A`)
てかNNがゲームに使われてるなんて話聞いたこと無いんだが、本当なの?
本当ならすげー嬉しい。
464名前は開発中のものです。:04/12/20 00:53:06 ID:rMlKdZvO
なぜにパーセプトロン限定?
あとNNをゲームに使ってるなんて話は聞いたこと無いんだけど、それ本当?
知ってたらネットワーク構造とかも含めて教えてホスィ(A`)
465名前は開発中のものです。:04/12/20 00:54:11 ID:rMlKdZvO
書き込みミスってたかと思ってたら出来てた。。。
466名前は開発中のものです。:04/12/20 00:58:26 ID:7rZTeKhR
研究目的に作られたゲームならいくつか見たことあるけど
商用ゲームに使われてる事例は知らないし、
さすがにまだないんじゃないか?
467名前は開発中のものです。:04/12/20 01:01:51 ID:7rZTeKhR
ごめん、調べてみたらあったわ
Renderware A.I.にニューラルネットマネージャがあるね。
曰く

「ニューラルネットワークは、一般に予測、分類、データの関連付け、概念化、およびフィルタリングに使
用される、高性能な統計分析データ構造」

実際に使った事例があるかどうかは知らないけど…
468名前は開発中のものです。:04/12/20 01:38:22 ID:NwRcaupm
わおほんとだ。ありがと。
事例はともかく、ミドルウェアに一応置いておく位には使えるのか。

涙が出そう。NNって完全に窓際族扱いで。。
469名前は開発中のものです。:04/12/20 03:11:33 ID:cqrg6fzo
NNってそんなにマイナーじゃないんでは?
Gems2の3.14にはColin McRae Rally2.0では多層パーセプトロンをつかってるって記述があった。
470名前は開発中のものです。:04/12/20 03:24:30 ID:tkuWKnTl
パターン認識の分野ではSVMやらが脚光を浴びてNNはもうブームが去った感じもしてしまうけど
ゲームの分野ではまだまだ未開拓に近いのでは<NN
471名前は開発中のものです。:04/12/20 15:35:20 ID:hImEK0ED
VC6にて、海賊をモチーフにした2Dな全方位シューティングゲームを製作しています。
現在、背景にポリゴンを用いて海面の揺れ処理を表現しているのですが
このコードでは、なんというか・・動きが変なんです。

gameFunctions.cpp内DrawSea関数で波の動きを制御しています。
ここの伝播処理部分にもっと施すことがあるだろうとは思うのですが、
具体的にどうすれば良いのかが、恥ずかしながら分かりません。

参考になるウェブサイトや、アドバイスなどを頂けたらと思います。
よろしくお願いいたします。

http://prisira.s59.xrea.com/20041219.zip
472名前は開発中のものです。:04/12/21 00:02:34 ID:KKJvDASb
>471
だから動作環境ぐらい書け
473名前は開発中のものです。:04/12/21 00:23:26 ID:YOOEfiig
>>471
そのままでも結構上手く動いてると思うけどね。
とことん凝るなら波動方程式で検索してみるといいよ。
474名前は開発中のものです。:04/12/21 00:27:21 ID:w8c1Lm3U
>>473
いやこれはマズいだろ。
一見動いてるように見えるけど、たまたま波の伝搬で誤差を打ち消し合ってるだけで
伝搬をさせないとエネルギーの誤差が蓄積してどんどん振幅が増して大変なことになる罠
波動方程式に基づいて計算するのが無難かと
475名前は開発中のものです。:04/12/21 00:31:11 ID:9lMiERGt
波動砲丁式
476名前は開発中のものです。:04/12/21 01:37:47 ID:sch2axpx
>>472
すいません、動作環境ってどれを書けば良いんでしょうか?
とりあえず使用しているDirectXSDKは9.0です。

>>473-474
御助言ありがとうございます。
波動方程式について調べてみたのですが、
数式では私には大変難しくよく理解ができませんでした。

それから色々ググっていたら、恐らく私が目指すべきに近いと思われるjavaアプレットを見つけました。
http://hp.vector.co.jp/authors/VA012735/applet/dropimg.htm
しかも大変ありがたいことにソースも公開されていました。
しばらくこのソースと睨めっこして、波動をマスターしたいと思います。

・・・これも何だか難しいですね。
477名前は開発中のものです。:04/12/22 09:45:46 ID:vEPXp48K
>>471のソースをコンパイルしてみると、sprite.cppのBeginSprite()で、
”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を入れてみるとコンパイルは通りましたが・・・。

みなさんはそのままでコンパイルが通ったようなので、どういった環境の違いに
よるものか悩んでいます。とりとめもなく書きましたが、何かわかる方、ご教授ください。
お願いします。
478名前は開発中のものです。:04/12/22 14:41:37 ID:quiBQpLd
SDK付属の英語の Document(Help) 読んでるか?
日本語Help って 9.0 と 2004(December) しか無かったような

対応したバーションの Help 読んでるなら
コードを書いた奴の環境とバーションが違っているんだろ
479名前は開発中のものです。:04/12/22 18:58:33 ID:JZkoDinq
>>478
×2004(December)
○2004(October)

ちなみにmsdnじゃOctber 2004って綴り間違えてる
             ↑
480名前は開発中のものです。:04/12/22 21:59:05 ID:VEp0024I
SRPGを作っているのですが質問です。
オーソドックスな視点の2Dのゲームなんですが、
このタイプで高さを表現する良い方法はないでしょうか。

それを行う為に、今マップの坂を、以下の絵の様に、草、茂み等の下地の地形に、
崖の絵を合成する形で表示しているのですが、余りしっくり来ません。
http://gamdev.org/up/img/2160.png
(http://hp.vector.co.jp/authors/VA020046/
のMACKさん作の素材で、それを少し改変しています)

下地の地形をベースに、影の付け方を変えて坂を表現するという方法を
考えましたが、そういう素材は見つからず、
下地を取り込むと、坂を自動的に作ってくれるツールがあるのかもしれませんが、
グラフィックに詳しくなく見つけられませんでした。

これに沿った方法で、または別の方法で、
高さを表現する方法がありましたら教えてください。
481名前は開発中のものです。:04/12/22 22:35:59 ID:qTuprgSw
ゼルダの伝説 神々のトライフォース
ttp://www.nintendo.co.jp/nom/9811/p04/zelda031.jpg
が参考になるかも。
482480:04/12/22 22:49:44 ID:VEp0024I
>>481
ありがとうございます。参考にさせていただきます。
自分もゲームでそういうのが使われていないか攻略本を見て探したんですけど、
ドラクエ6、ツクール4に少しあるぐらいでなかなかないんですよね。
483480:04/12/23 00:24:56 ID:zeGMsZ0H
もう一度ググって見た所、もこもこペイントというのを
見つけましたがこれでいけそうです。ありがとうございました。
484名前は開発中のものです。:04/12/23 01:31:56 ID:vYKn4Xgr
>>478,479
旧バージョンのヘルプを見てしまっていました。
あらためて2004(October)のヘルプで確認し、納得できました。
ありがとうございました。
485名前は開発中のものです。:04/12/23 14:33:36 ID:R6w3o4WD
>>425

enum{
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型配列にする。

僕が以前格闘ゲームを作成したときに使用した方法です。
486名前は開発中のものです。:04/12/23 14:59:30 ID:rYMlNBD2
トリガーキーとかいう言葉すら知らないんだろうな。
487名前は開発中のものです。:04/12/26 18:12:17 ID:xK7O99x1
ゲーム作るならDirectX勉強しろーみたいなこと言われたのですが、
PSとかPS2,game cubeのソフトは、DirectXなるものが使われているんでしょうか?
488名前は開発中のものです。:04/12/26 18:29:15 ID:JxCJBP69
>>487
コンシューマでDirectX使ってるのはXBOXだけ
489名前は開発中のものです。:04/12/26 19:23:21 ID:z6k4KEYj
>>487
それを言ったのは誰だ?
WindowsやXBOXのプログラマが言ったならともかく、PS2やGCのプログラマに言われたなら軽くあしらわれてるぞw
490名前は開発中のものです。:04/12/26 19:27:18 ID:U7hutUIm
(Windowsで)ゲーム作るならDirectX勉強しろー
491名前は開発中のものです。:04/12/26 21:10:46 ID:PcH7Hb9Y
>487
まぁあながち間違いではない
右も左も2Dも3Dもその他もろもろもわからない香具師はとりあえずDirectXでも勉強しとけ
DirectXを通してグラフィックハードウェアがどういうものなのか知ることもできるし
3Dの勉強もできるし
ただDirectXにはD3DX系なんかの便利な関数やクラスの中身を
まったく理解せず使ってたらだめだろうな

プロットフォームが変われば使用するライブラリも変わるが、
しっかりとした知識を持っていればすぐ対応できる

逆にライブラリが変わったくらいで、すぐに対応できないような香具師は現場では使えない


492487:04/12/27 14:22:37 ID:c4eg2dH6
DirectXにしろPS、DCにしろ、言語はC++ですよね?
なんか、いまはC#だとか言ってるんですが。。。
493名前は開発中のものです。:04/12/27 15:16:06 ID:DotxQdES
とりあえずC/C++やっとけ
それが出来ればC#もあまり苦労せずに出来るようになるから。
(逆は案外難しい)
494名前は開発中のものです。:04/12/27 16:44:29 ID:FkSCbusX
案外というか、C#はいろんな機能提供してくれるからC#から入ると自分で
基本的な部分の仕組みを作る、というか考えるということが出来ない気がするなぁ。
495名前は開発中のものです。:04/12/27 18:05:01 ID:+zVJFTQh
>>492
あー、そいつ典型的なWindows専門プログラマだよ。
エロゲの会社にでも勤めてる奴?
XBOX2以降だったらC#が使えるようになるかも知れんが…
496名前は開発中のものです。:04/12/27 18:13:48 ID:PyUvd91V
ガベージコレクタだとか実行時型判定だとか、
最近の言語はプログラマの負担を減らす代わりに
CPUの負担を増やしてるからゲームには不向きだなぁ
497名前は開発中のものです。:04/12/27 18:37:27 ID:7gyZFTAp
動作速度はゲームの種類によりけりだけど、
わざわざランタイムを入れてもらわなければ動かないという方が致命的。
498名前は開発中のものです。:04/12/27 19:54:05 ID:VQkgEWr2
>>497
DirectXだって、ランタイム入れてもらわなきゃならんだろw
499名前は開発中のものです。:04/12/27 19:57:07 ID:P9U2f31C
2重のランタイムってのが許せない
500名前は開発中のものです。:04/12/27 20:15:49 ID:+zVJFTQh
このゲームをプレイするには拡張の周辺機器を買わなければなりませんよりはマシだけどな。
501名前は開発中のものです。:04/12/28 04:21:29 ID:eZh/IZfo
バージョン別ランタイムの普及率が知りたい・・・・
502名前は開発中のものです。:04/12/29 21:26:24 ID:y6PUZTMC
>>477
ID3DXSpriteインターフェースがDirectX9の前期と後期で変わってるっぽい
BeginのほかにDrawも変更食らってるのを確認済み
ID3DXSpriteインターフェース使って2Dライブラリ組んでた俺としては最新版は使えねぇ・・・
拡大縮小や回転が使えなくなっててもう最悪だった
2D作るのに気軽に使える環境を返してくれYO!
あと同じメジャーバージョンなのにインターフェース変えるなYO!
503名前は開発中のものです。:04/12/29 22:33:22 ID:QlZN4+1J
ライバルがいないから、仕様変え放題やりたい放題だ。
504名前は開発中のものです。:04/12/30 00:08:24 ID:KnybJ9RY
>>502
だから、拡大縮小回転は使えるって
全部Matrixで指定しる
505名前は開発中のものです。:05/01/07 21:15:47 ID:PnxhwrgV
質問質問。
今、2Dのアクションゲーム作ってるんだけど、
オブジェクト(敵や特別な地形)とオブジェクトとの当たり判定っていつやればいいの?

今は水平方向に動かすときと、垂直方向に動かすときにそれぞれ全オブジェクトとの当たり判定やってます。
ちゃんと動くけど無駄が多すぎな気がする・・・
506名前は開発中のものです。:05/01/08 00:24:20 ID:Mfb5U7xY
普通は、動かす動かさずに関わらずに毎フレームチェックするものだと思いますが。
507名前は開発中のものです。:05/01/09 14:51:26 ID:vGUkFhnG
>505
比較的軽い計算で、これは絶対に当たっていないって条件が判定できるものは判定する
ってやってるとは思うけど一応
508名前は開発中のものです。:05/01/09 16:01:21 ID:8Mf88qbF
>>505
Quad Tree
Oct Tree
509505:05/01/10 03:04:03 ID:pQUwlE+5
>>506
すいませんすいません、毎フレームごとにチェックはしてます。
ただ、その1フレームの中でさらに二回やっているんです。
具体的には、オブジェクトAがあって、
A.x += velX
って感じの水平方向の移動後と、
A.y += velY
って感じの垂直方向の移動後。
他オブジェクトと当たっていた場合は位置補正してます。

>>505
・・・やってないかもしれない。
矩形での当たり判定のみなのでこれが一番軽いかな、と手抜きを(汗
X座標やY座標でソートして明らかに外れているオブジェクト達との
判定はしないようにしたんだけど、オブジェクトの数が少ないと
かえって時間がかかっちゃいまして。。。

>>505
8分木は名前だけ知ってたけど、4分木は初めてです。
8分木の2次元版?って感じですか、どうやら。
どう実装すればいいのかよくわかりませんが、これをキーワードにちょっと
調べてみようと思います。

みなさんありがとう!
510名前は開発中のものです。:05/01/14 03:51:03 ID:i3bZFA1f
アクションRPG作ろうと思っているんですが
敵の思考ルーチンをプログラムする際に
参考になりそうなおすすめサイトがあれば教えてください。
511名前は開発中のものです。:05/01/15 00:22:48 ID:Q+iKu070
>510
サイトじゃなくて書籍だけど
「定本 Cプログラマのためのアルゴリズムとデータ構造」
512名前は開発中のものです。:05/01/15 00:27:16 ID:rN3ku86Q
>>510
サイトじゃなくて書籍だけど
「ゲーム開発者のためのAI入門」

A*ならgamdev wikiにもあったような・・・・
513名前は開発中のものです。:05/01/16 22:59:35 ID:CY/+3klI
2次元配列をゼロクリアしたいのですが簡単な方法ないですか?
今はfor分の二重ループで1つずつ代入しています
使用環境はVC++です
514名前は開発中のものです。:05/01/16 23:01:24 ID:NpLjrdXw
memset
515名前は開発中のものです。:05/01/16 23:23:24 ID:CY/+3klI
>>514
うまくいきました。ありがとうございます。

使用前
  for (int i=0; i<3; i++)
  {
    for (int j=0; j<3; j++)
    {
      map[i][j]=0;
    }
  }

使用後
memset(map, 0, sizeof(int)*9);
516名前は開発中のものです。:05/01/16 23:26:51 ID:IXkeSk7x
sizeof(map)じゃダメ?
517名前は開発中のものです。:05/01/16 23:42:36 ID:CY/+3klI
>>516
なるほど!全体を指定してしまったほうが手っ取り早いですね。
うまくいきました。ありがとうございます。

改良後
memset(map, 0, sizeof(map));
518名前は開発中のものです。:05/01/17 02:12:10 ID:Q4YWdrDN
なんか、ほほえましいな。自分が若かった頃を思い出す。
>>513は、もっとガンガレ!!
519名前は開発中のものです。:05/01/17 02:42:31 ID:jWBtbAdV
callocって無かった?
520名前は開発中のものです。:05/01/17 07:52:36 ID:6lEx3rdP
ZeroMemory(map, sizeof(map));

でもいいね。
521名前は開発中のものです。:05/01/18 01:05:52 ID:7XkOXKh6
忘れるな。
memset は string.h
ZeroMemory は windows.h
522名前は開発中のものです。:05/01/19 16:17:57 ID:ZQyRJ79S
むしろZeroMemoryは中身memset
523名前は開発中のものです。:05/01/19 18:28:10 ID:aRH3B+4H
さらにインライン展開されて、関数を呼ばずにストリング転送に変換される。
524名前は開発中のものです。:05/01/23 04:37:44 ID:LheYkhaz
525524:05/01/23 04:52:12 ID:LheYkhaz
なんか違ってた
526名前は開発中のものです。:05/01/28 12:13:19 ID:7PgE831H
ファミコンのラディア戦記みたいなアクションRPGを作りたいけど
イベントの処理やデータの管理(セーブ機能をつけたい)などを
どう実現していいやら検討も付きません。
どこかに参考になりそうなソース付きのアクションRPGをDL出来るところは無いでしょうか?
ちなみにVC++とDirectXで作っててキャラ&敵の表示、あたり判定、攻撃、マップの移動などは出来てます。
527名前は開発中のものです。:05/01/28 17:50:53 ID:IiB3r9BB
>>526
暗号化と、バイナリモードのファイル入出力を習得すればできる
大事なのは考えることだ
528名前は開発中のものです。:05/01/28 18:07:56 ID:DhbqYSB9
別に暗号化する必要もないし、バイナリファイルである必要もない。
大事なのは「他人にいじられないようにする」という勝手な用件を脳内で作らないことだ。
529名前は開発中のものです。:05/01/28 19:29:59 ID:IiB3r9BB
>>528
よく意味がわからないんだが、どういうことだ?
530名前は開発中のものです。:05/01/28 20:52:13 ID:KA8jG9qB
イベントもセーブもどう弄られ様とかまわねーっつーことじゃないの?
弄られることで自分が不利益被らないなら、どーなっても良いんじゃないのかな。

大事なのは考えることだ
だけど、余計なことは考えなくて良い
531名前は開発中のものです。:05/01/28 21:19:33 ID:ZJQyR3uN
>>526
イベントが発生する時は、何かしらのアクションやシグナルがあるから、
それらをifやswitchとかで監視する。(他にも方法はあるだろうけど)
ボスが死んだらイベントが発生する、とか色々イベントを試していれば、おのずと形が見えてくると思う。
まぁ俺の言ってることは>>527、530と一緒で、とにかく試行錯誤したほうがいいよw
532名前は開発中のものです。:05/01/29 03:56:50 ID:hwmUiymu
>>526
何が分からないのかよく分からないからもっと具体的な質問をしてみな。
データセーブはファイルの入出力さえできれば簡単だろ。どこができないの?

イベントについては、最高の理想を言えば、ごちゃごちゃプログラムで泥縄式に
作るするんじゃなくて、シナリオ記述言語(スクリプト)みたいなのを自分で
勝手に考えて創って、それを読み進めるプログラム(=ゲームプログラム)を
作る…という感じにすると美しいぞ。
533名前は開発中のものです。:05/01/29 06:10:59 ID:dcHY39ty
>>526
>勝手に考えて創って、それを読み進めるプログラム(=ゲームプログラム)を
>作る…という感じにすると美しいぞ。

多分、526にはその技術が無いから、想像もできんのだよ。
イベントは、まず、イベントマップというのを作る。
これは、画面を表示するマップに重なっているイメージだ。
そんで、そのイベントマップに、イベント番号などを記録する。
すると、マップの。X=5.Y=6の地点で、イベントマップにイベント番号があれば、そこでイベント発生だ。
イベントは、メインルーチンと並列に実行されるようにせねばならない。
たとえば、勝手に上に歩いて、キャラクタが「勝手に足が動いたんだ」というセリフを出すイベントだとしたら、
その歩いてるときにも、ゲームの全体の進行を止めてはならない。
534526:05/01/29 09:16:02 ID:7YDq9IjJ
お返事ありがとうございます。

データの管理:まとめてメモリを確保して、セーブが必要なデータはそのメモリを使う。セーブする場合はそのメモリを保存する。
イベントの管理:イベントのデータが入ったファイルを用意して必要なイベントファイルを読み込んでおき、そのデータに応じて処理をする。

書き込む前に色々調べて上記のような処理で実現するのがいいんじゃないかとは思ったのですが、
教材になりそうなプログラムやサイトが見つからないのでここに書き込みをしました。
質問べたですみません。

シナリオ記述言語(スクリプト)をつくる技術はありませんが、イベントマップ方式?はできそうです。
イベントマップとはRPGツクールのイベント処理と同じ考え方ですよね。
体験版があるみたいなのでちょっといじってみようと思います。
535名前は開発中のものです。:05/02/07 22:00:54 ID:lJKKg9iL
クイックセーブ(何処でもセーブ)ができるシステム組むのって大変だよね。
でもこれが作れたらかなりの腕だと思うよ。
536名前は開発中のものです。:05/02/10 07:15:16 ID:wT+Y0IFB
>>535
場合によるだろ。
はじめからあらかじめ計画してあって
プレイヤーが今そこにいるための情報がすべてまとまっていれば
ファイルに書き込むだけで終わりだろ。

逆に何も考えずにただゲームを作った後で
どこでもセーブしたいとかいいだしたら地獄絵図だが。

システム組むのって大変だよね。
じゃなくてちゃんと計画できてなきゃそもそも不可能であってやるべきじゃねーことだろ。
537名前は開発中のものです。:05/02/10 15:17:17 ID:pqZJazXR
これが正解

大規模なシステム組むのって大変だよね。
作れたらかなりの腕だと思うよ。
538名前は開発中のものです。:05/02/10 16:57:44 ID:UHlpW5jj
まずはきちんとした設計を。
539名前は開発中のものです。:05/02/10 20:56:02 ID:R7En7PQ7
クイックセーブをシリアライズですまそうなんてぬかすなよ
540名前は開発中のものです。:05/02/10 23:29:01 ID:m8YDuGMo
理由を述べよ。
541名前は開発中のものです。:05/02/18 07:16:25 ID:NdgimZZ6
今DirectX9.0 SDK Update (Summer 2003) + VC++.netで
DirectXをプチプチと勉強しているんだけど、2体のポリゴンキャラクター同士の全ポリゴン判定?フル当たり判定?
をする場合どうやってやってますか?
自分が思いついたのはVertexBufferとIndexBufferを使ってLockするして判定する方法です。
でもこれだと速度的に心配なので他の方法ないかと思ってエロイ人が集っていて板違いじゃなさそうな
ここに相談しにきました。(;´Д`)ハァハァ
542名前は開発中のものです。:05/02/18 08:38:07 ID:I2CSa8I2
普通は衝突判定用の簡易オブジェクトを作るもんだと思うが…
543名前は開発中のものです。:05/02/18 09:00:28 ID:NdgimZZ6
・でもそれだとメッシュによって精度が落ちちゃうんですよ。
・勉強という事で何かいい方法がないか知りたいんですよ。(;´・ω・`)
544名前は開発中のものです。:05/02/18 09:11:40 ID:5R+gyy4l
簡易オブジェクトでぶつかってるやつだけ詳細にチェック
545名前は開発中のものです。:05/02/18 15:37:57 ID:JUukIzID
Lockせずにnewしてそこに置いとけばいいんじゃない?
546名前は開発中のものです。:05/02/18 20:15:52 ID:SyUoLxbM
>>544
それも思いつきました。
でもたくさんのメッシュが一度にぶつかるとやっぱりきついかな?って思いまして。

>>545
むむ!?(;`・ω・´)もっと詳しく説明やここよめアホってなサイトお願いします!
547名前は開発中のものです。:05/02/19 06:29:08 ID:UXB8Jg0C
>>546
たくさんのメッシュを一度にぶつけないでください(マジレス)
衝突判定に銀の弾丸はないのです
548名前は開発中のものです。:05/02/19 06:41:03 ID:O2/kCUDX
>>546
当たってるかどうかだけなら重くはならん。
ほかに何か求めたいのか?角度とか。
549名前は開発中のものです。:05/02/19 07:07:27 ID:j8BXkcXy
>>548
角度や摩擦など求める予定ですが、その前にLockして判定する以外
の方法を教えてくれたらと思っています。

簡易オブジェでぶつかっているやつだけLockしてフルチェックさせる方法でも
たくさんのオブジェクトが密集してしまうと結局は簡易オブジェクトなしでフルチェックする
場合とあんまり変わらず処理に影響してしまうので。
550名前は開発中のものです。:05/02/19 07:08:58 ID:T6zgD8Th
4つぐらい重なったら核爆発が起きるようにしてはどうか。
551名前は開発中のものです。:05/02/20 10:22:20 ID:Mw8d2O0L
>>550
えぇ!そんなぁ・・・。(´Д`;)
552名前は開発中のものです。:05/02/21 18:17:21 ID:b2LRiS8s
>>549
ゲームが作りたいなら全メッシュ衝突判定なんて考えない。簡易オブジェクトを使う。
それでも超重くなるとしたら設計が悪い。たくさんのオブジェクトが密集しまくる設計にしないでください。
553名前は開発中のものです。:05/02/23 00:55:24 ID:4mRmpQC+
D3DXVec3TransformCoordをヘルプで読んだのですがいまいち分かりません。
これはグローバルな座標変数をローカルな座標変数に変換するのですか?
あと似たような名前の
D3DXVec3Transformとの違いもD3DXVec3TransformCoord が理解できないため分かりません。
どなたか教えてください。お願いします。
554名前は開発中のものです。:05/02/23 05:48:21 ID:lVuNeIQF
以下の関数はDirectXヘルプを読んで、私がコーディングしたものです。
これらを見ても関数の意味が分からないようでしたら、ベクトルと行列の基礎をしっかり勉強してから再挑戦することをお勧めします。

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;
}
555名前は開発中のものです。:05/02/23 05:49:38 ID:lVuNeIQF
VECTOR3F* D3DXVec3TransformCoord
( 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;
}
556名前は開発中のものです。:05/02/23 05:53:24 ID:lVuNeIQF
すいません型を以下のように直しておいてください。

VECTOR4F → D3DXVECTOR4
VECTOR3F → D3DXVECTOR3
MATRIX44F → D3DXMATRIX
557名前は開発中のものです。:05/02/23 07:07:45 ID:5jBEcMCA
なんと独りよがりな
558名前は開発中のものです。:05/02/23 14:56:55 ID:9pm4uh9q
D3DXVec3TransformとD3DXVec3TransformCoordの違いが多分分かりました。
559554:05/02/24 17:48:31 ID:9BALKx7J
>557
少しでも質問者の疑問に答えられれば良いなと思って書いたレスを、「なんと独りよがりな」という言葉で一蹴ですか。
お前みたいなやつがいると正直やる気を無くすよ。
560名前は開発中のものです。:05/02/25 03:35:38 ID:8xpRQllj
なんでそこでキレるかなぁ〜
561名前は開発中のものです。:05/03/06 20:52:45 ID:+8c0xIHX
機嫌悪かったんだろ
562名前は開発中のものです。:05/03/15 00:30:34 ID:2caYpl3H
あの日だったんだろ
563名前は開発中のものです。:05/03/15 17:25:12 ID:l/6TEvIC
(*ノノ)
564名前は開発中のものです。:05/03/19 22:25:07 ID:zqD1MdPq
大手ゲームメーカーでプログラマやってます。
このスレ、レベルひくっ(ぷっ)笑えてきた。

プログラムなんかやめちゃえ!
565名前は開発中のものです。:05/03/19 22:53:19 ID:OqPAYq45
最初からレベルが高い人など居ませんよ。
くだらないことを書き込まないように。
566名前は開発中のものです。:05/03/20 05:27:02 ID:oSFOPQ/k
>>564
喪前は
人間やめちゃえ!!
567名前は開発中のものです。:05/03/20 05:28:52 ID:oSFOPQ/k
>>564
無能な上司の下で
デスマーチ頑張ってねwww
568名前は開発中のものです。:2005/03/29(火) 09:19:19 ID:NLg6bdst
>>564
大手ゲームメーカーって言ってるところが笑えるな
腕に自信が無いんだろうな
569名前は開発中のものです。:2005/03/29(火) 19:21:00 ID:UxPYIf8b
「大手でプログラマ」ねぇ…。
ま、下請けでも強弁すれば「大手でプログラマ」と言い張れないこともないし、
内部事情を知らない厨房の嘘だと決め付けるのもアレかねぇ。
570名前は開発中のものです。:皇紀2665/04/01(金) 11:07:39 ID:2DNa+8SZ
大手町にある会社の社員だな。
571名前は開発中のものです。:2005/05/10(火) 22:31:50 ID:qbemgZao
Ruby/SDLでアクションRPG作ってるんですが、
敵の動きを一つずつRubyのマルチスレッド機能で処理するのは良くないですか?
羽虫みたいのが画面一杯に湧いてくるのを蹴散らす場面があるので、弾幕STG並の負荷になると思われます
動作環境はWindowsXPが動いてるメーカー製PCなら例外なく動くようにしたいです
572名前は開発中のものです。:2005/05/10(火) 23:03:32 ID:xTojRoxk
>>571
ゲームに限っては、の話ですが。
マルチスレッドよる処理は、そうする必然性がない限り、お勧めしません。

特にあなたが提案するケースの場合、環境によっては
「自機の処理が行われないまま一つの弾丸にばかり処理権が連続して行く」
事態が、最悪、想定されます。
すると、DIOの世界(ザ・ワールド)に攻撃されたかのような
理不尽な死が体験できることになります。
やめたほうが無難ですよ。

また、世界(ザ・ワールド)現象を回避するために
各キャラの処理一回につき他のスレッドと同期を取った場合、効率は最悪です。
普通にシングルスレッドで処理した方がよっぽど効率的です。

テクに走りたい気持ちはとっても理解する。
そう思っていた時期が俺にもありました。
でも、シンプルかつ愚直に作るのが最善の道であることも多いのですよ。
573名前は開発中のものです。:2005/05/11(水) 08:43:01 ID:6LEYouSH
なるほど
ありがとうございます
シングルタスクでやるっていうと
タスクコントロールブロックとかいうやつですよね
初心者向けに解説してある本とかサイトとかがあれば教えてもらえませんか
やね氏の本で扱ってるっていうのを聞いて(プロフェッショナルの続編だったかな)立ち読みしてみましたが
あれだとよくわからんかったです
574名前は開発中のものです。:2005/05/11(水) 12:26:25 ID:KXICTm7E
>>573
別にそんなたいそうなものじゃなくても
考え方の基本を1フレームずつの処理に変えればいいだけ。
575名前は開発中のものです。:2005/05/12(木) 20:29:44 ID:aQoHjmWQ
SWFファイルの仕様について
日本語で詳しく説明している書籍かサイトはありませんか
576名前は開発中のものです。:2005/05/24(火) 16:19:08 ID:v7WpxIBq
液晶を使っていてもティアリングみたいなのが出るんだけど、
これを回避するにはどういうコードを書けばいいんですか?
577名前は開発中のものです。:2005/05/24(火) 17:14:36 ID:NGCTpyCN
VSYNCを待て。
D3DSWAPEFFECT_COPY_VSYNC?
それともここらへんが参考になるか?
ttp://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=28142
578名前は開発中のものです。:2005/08/12(金) 14:16:54 ID:CaToi4lw
オブジェクト指向勉強中なんですが、インスタンス生成とかカプセル化とかだるい・・・
ゲーム製作には構造化の方が向いている気がするんですが。どう思います?
579名前は開発中のものです。:2005/08/12(金) 16:50:57 ID:+xjZsnhE
オブジェクトは構造化の発展です
580名前は開発中のものです。:2005/08/24(水) 09:49:40 ID:NGiAd0T2
カプセル化なんか遥か昔からあった概念だもんな。
581名前は開発中のものです。:2005/08/26(金) 19:17:31 ID:vVPZkYc6
ゲームプログラミングに興味を持ったのですが全くの素人でやるべきことが多すぎて何から手を出していいかよくわかりません。
数学や物理の勉強から始めた方がいいのでしょうか?
582名前は開発中のものです。:2005/08/26(金) 19:29:34 ID:6D6lM3q9
英語やっとけ
物理なんて当面は高校卒業程度の知識で十分だ
583名前は開発中のものです。:2005/08/26(金) 19:33:27 ID:vVPZkYc6
>>582
高校の頃は文系だったので科学はやってましたが物理は全くやってないんです
584名前は開発中のものです。:2005/08/26(金) 21:35:57 ID:hMfPlAPs
物理なんていらぬ。
算数やっとこう。それさえできれば後は勘。
585名前は開発中のものです。:2005/08/26(金) 21:46:40 ID:D8UBXRK8
まずはプログラミングを楽しむことから始めるんだ!!m9('∀`)
586名前は開発中のものです。:2005/08/26(金) 21:57:23 ID:q0ihkIeI
まー最初はプログラミング自体がパズルみたいなもんだしな。
587名前は開発中のものです。:2005/08/27(土) 00:57:00 ID:4R6gqBFc
楽しむってそんなので大丈夫なんですか?
俺ド素人だし、しかも仕事にしようと思ったらそんな生半可な気持ちじゃ・・・・
588名前は開発中のものです。:2005/08/27(土) 01:15:27 ID:ZquWVtNI
特に目的がねーんならプログラミングそのものを目的にするしかねーってこった
ゲームプログラミングなんて漠然とし過ぎだって
589名前は開発中のものです。:2005/08/27(土) 01:18:02 ID:4R6gqBFc
やっぱやりたいジャンルって最初に絞った方がいいんですかね
アクションとかRPGとか
590名前は開発中のものです。:2005/08/27(土) 03:15:29 ID:+qa4qoic
ジャンルはあんま関係ねーな。
つか、仕事にするんじゃこんなとこで聞くなよ
それっぽい定番の本買って、そこから参考文献のリンクやら必要な資料を辿って必要なことから身につけろ。
591名前は開発中のものです。:2005/08/27(土) 03:20:16 ID:4R6gqBFc
すみません、ありがとうございました
592名無しさん@そうだ選挙に行こう:2005/09/11(日) 01:44:55 ID:VkAkPVlE
DirectXのSDK落とそうとしたら
ver9しかないみたいなんだけど、
ひょっとしてもう8は
CD付きの古本とか探すしかないですか?

98SEだと9のSDKが使えないらしいんで…
(入門サイトに2000以上って書いてた)
593名無しさん@そうだ選挙に行こう:2005/09/11(日) 11:35:06 ID:2BgVInhk
>>592

つMicrosoft download
594名無しさん@そうだ選挙に行こう:2005/09/11(日) 14:27:23 ID:3zrye/oe
>>593
ここですよね…
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データはあるのに…
探し方悪いのかな
595名前は開発中のものです。:2005/09/19(月) 23:40:13 ID:92cy+6KO
9のインストールも出来ないのかな?
8は9の中にあるんだけどな。
596名前は開発中のものです。:2005/11/30(水) 18:14:19 ID:NRCIXxVf
今大学でC言語やってるんだが、C++との互換性はどんなもんなんだ?
CをマスターしていればC++のマスターにどれくらい労力がかかるとか。
597名前は開発中のものです。:2005/11/30(水) 20:18:12 ID:/kKwaLK2
互換性は無い。
しかし構文などは似ている部分が多いので、
C++を扱ってた人ならすぐ修得できるよ。
598596:2005/11/30(水) 20:46:37 ID:NRCIXxVf
>>597

なるほど。ありがとう
ついでに聞いておきたいんだが、そこから派生してWindowsプログラミングってのはやっぱり難しいんだろうか?
今はCでのいわゆるコンソールアプリってのを学んでいる訳なんだが……。
599名前は開発中のものです。:2005/11/30(水) 22:15:01 ID:3MglgmXZ
>>596
いやいや、互換性はあるから。
基本的に、C++ は C に仕様を追加したものだから。
そりゃ、細かいところではルールが違うとかはあるけどさ。

C++ のソースコード内に C のコードを書くことはできるよ。
だから…

 - 最初は C で書いて、後々 C++ に書き直す
 - C++ で書いていって、どうしても分からない場所を C で書く

っていう勉強方法が使えるよ。
600名前は開発中のものです。:2005/11/30(水) 22:18:26 ID:3MglgmXZ
連投スマンです…

> そこから派生してWindowsプログラミングってのはやっぱり難しいんだろうか?

Windows の API は C ベース。
なので、最低限 C のコードを書ける程度の力は必要です。

ともあれ、「猫でも分かるプログラミング」を見て勉強してみることをお勧めします。
601596:2005/11/30(水) 22:32:57 ID:NRCIXxVf
>>596-600
詳しくトンクス。
「猫でも分かる〜」は一応見てみた。つーか今日の課題やってるときもお世話に(ry
602名前は開発中のものです。:2005/12/25(日) 18:32:09 ID:QPxHAtwC
最近 Game Programming Gems を読みはじめたのですが、
HandleクラスやHandleMgrクラス内に出てくるマジックナンバーとは、一体どのような役割をする為のものなのでしょうか?
本を読んでもソースを読んでも、全く何のために存在するものなのか理解できません。
初歩的な質問かもしれませんが、マジックナンバーとは何なのか、解る方教えて下さい。お願いいたします。
603名前は開発中のものです。:2005/12/25(日) 21:16:44 ID:10j12RX3
>>602
Handle のマジックナンバーは、
ハンドルが指すオブジェクトを区別するための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 が一致した場合は、ハンドルが指す位置のオブジェクトは存在していると分かる。
604603:2005/12/25(日) 21:17:35 ID:10j12RX3
>>602
とまあこんな感じに、マジックナンバーは、ハンドルの指す位置のオブジェクトが、
ハンドル取得時と同じオブジェクトであるかどうかの判定に使われている。

これで分かんなかったら、
上の例と同じケースをマジックナンバーを使わずにやった場合を考えてみると良いよ。
605602:2005/12/26(月) 03:37:22 ID:XvOO4Glh
>>603
返信ありがとうございます。
非常に丁寧に解凍して頂いてありがたいです。
マジックナンバーが識別子であると言うことを理解し、順を追って考えたら理解することが出来ました。
606名前は開発中のものです。:2005/12/30(金) 22:08:40 ID:0oupnfaC

スーパーマリオワールドのマップが自分で作れるエディタ
http://www.pankura.org/archives/005368.php

これみたいに、アニメのプレビューができるマップエディタを作りたいです。
アニメ部分のプレビューの実装でつまづいてます。
どんな実装にすればよいか情報いただけるとありがたいです。

607名前は開発中のものです。:2005/12/30(金) 23:30:17 ID:aGBuMIZJ
仕様を固める前に実装を聞くなよ。

struct _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]);
   }
  }
 }
}

こんな感じでどうだ。中身は自分で考えて!
608名前は開発中のものです。:2006/01/14(土) 12:30:32 ID:pizx291y
スクリプトの実装方法のサンプルをください
言語は問いません
609名前は開発中のものです。:2006/01/14(土) 12:36:40 ID:p1M3DQqd
610名前は開発中のものです。:2006/01/14(土) 12:40:01 ID:ldillV2z
JavaScript or PHP についてなら、多少教えれると思います。

スクリプトを実装して何をしたいかを、教えてもらえれば
サンプルを載せま〜す。
611名前は開発中のものです。:2006/01/14(土) 14:12:50 ID:ENjm6BLu
PHP風のスクリプトってないのかな。
<?= ?>があれば楽にノベルが作れそう。
612名前は開発中のものです。:2006/01/14(土) 14:21:04 ID:p1M3DQqd
http://jp2.php.net/get/php-5.1.2.tar.bz2/from/jp.php.net/mirror
だからこれを使えよ。
自分のプログラムに取り込むことも出来るし、拡張も出来る。
何が不満なんだ?
613名前は開発中のものです。:2006/01/14(土) 15:00:41 ID:ENjm6BLu
外部プログラムからは使いにくいんじゃないの?
614名前は開発中のものです。:2006/01/14(土) 15:20:52 ID:p1M3DQqd
使いもしないうちから使いにくいって、あまりに愚かすぎて話にならない。
615名前は開発中のものです。:2006/01/14(土) 15:43:22 ID:FTUE3moY
で、phpはDLL化などして相手にPHPをインストールさせずにC言語から呼べるのか?
616名前は開発中のものです。:2006/01/14(土) 15:52:59 ID:IKOpDFff
Luaは? 組み込み用途に特化してるからライブラリ感覚で使えるよ。
コア部だけなら100k切るし。
617名前は開発中のものです。:2006/01/14(土) 16:24:39 ID:9Bbt7+hj
何を与えても、なんだかんだ言い訳して使わないに決まってる。
618名前は開発中のものです。:2006/01/14(土) 18:07:00 ID:p1M3DQqd
>>615
DLL化すらする必用もなくプログラムに組み込める。
ソースのリンクまで張ってあるのに、なんでその程度のことすら確認しないんだろう。
619名前は開発中のものです。:2006/01/14(土) 19:32:16 ID:XGcvBkdj
ECMAScriptやLuaを組み込みスクリプトにするってのはよく聞くけど
PHPを使うってのは聞いたことないな
620名前は開発中のものです。:2006/01/14(土) 19:43:15 ID:j0Ue+PIM
猫でもわかるゲームプログラミングってどうよ?
サウンドは、MIDINのストリーム再生とかやってるわけ?
621名前は開発中のものです。:2006/01/14(土) 20:40:32 ID:ENjm6BLu
>>618
えー、本当に?
PHP側のソース変更なしで出来るなら、もっと使われてると思うけどなぁ。
622名前は開発中のものです。:2006/01/14(土) 21:57:58 ID:zrpnKi1a
php_embed_shutdown(ぬるぽ);..._〆(゜▽゜*)
623名前は開発中のものです。:2006/01/17(火) 17:27:10 ID:5EkVe52d
ttp://www.cbook24.com/bm_detail.asp?sku=4797332956

この本ってどうかな。
というかまだ出てないんだけど。
買うか激しく迷ってる。
624名前は開発中のものです。:2006/01/17(火) 18:34:07 ID:OAcYDX6e
それは是非おまいが買ってレポよろしく。
頼んだぞ!
625名前は開発中のものです。:2006/01/17(火) 21:01:42 ID:MfScR0E6
なんだか普通にCG系の書籍や雑誌を参考にしたほうが良さそうな本に思えるが……。
626名前は開発中のものです。:2006/01/17(火) 21:43:04 ID:YlbHfDfM
10年位前のメダルゲームであったような競馬ゲームを作ろうと
考えてるんだけど、馬の速さのバランスを考えるのが難しい・・。
ちょっと速い馬を作ろうと考えたらえらく速くなったり、逆をすると
えらく遅くなったり・・。

なんかコツって無いかな?
競馬ゲーム作った事ある人いない?
627名前は開発中のものです。:2006/01/17(火) 21:51:41 ID:a7PR7pCq
スタミナを設定して、前半で速く走りすぎたら後半で速度を落とし、
前半でスタミナを温存した馬は、ラストスパートでダッシュできるようにすればいい。
628名前は開発中のものです。:2006/01/17(火) 21:54:11 ID:PElCyB9t
>>626
個々の馬を勝手に走らせるんじゃなくて、全体を見る視点を入れてみたらどう?
たとえば、混戦を演出したいんだったら、重みをつけてみるとか。

馬群の平均位置より後ろにいる馬には、根性補正をかけて足を早くする。
逆に平均位置よりも前にいる馬には、油断補正をかけて足を遅くする。
629626:2006/01/17(火) 22:13:17 ID:YlbHfDfM
ありがとう!
>>627,628

ちなみに一応
力、
スタミナ、
スピード
調子
のパラメタを持たせてる。
あと追いか逃げで二つのタイプを作ってる。

そんで、力が強い方が馬同士がぶつかった時に相手からスタミナを奪え
るようにして、調子がいい方が持ってる最高スピードで走れるようにしてる。
スタミナが無くなると遅くして、あまってたらラストスパートができるように
してる。

まぁ結局いろいろパラメタを作ったんでそれらを上手く調整できなくなっ
ちゃってるのよね・・。

でも628が出してくれた案はなるほどーって感じ。
ちょっと実装してみます!
630名前は開発中のものです。:2006/01/19(木) 12:30:42 ID:abptcwuQ
4月からパソの専門学校のソフト科に入学するのですが、プログラミング技術向上の為に3D格闘ゲームを作りたいと思っています。
そこでこんな書籍が参考になる等アドバイスを頂けたらありがたいのですが
よろしくご教授のほどお願いします
631名前は開発中のものです。:2006/01/19(木) 12:37:44 ID:FNLWz9b/
まずそれを自分で調べることが技術向上の近道。
632名前は開発中のものです。:2006/01/19(木) 12:43:06 ID:abptcwuQ
>>631
わかりました自分で調べます
633名前は開発中のものです。:2006/01/20(金) 03:49:36 ID:AJrpxY2i
>>630
3Dゲームを作るには、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冊を読んで動くものを作ってみて、
物足りなくなってきたらもっと詳しい本を読めばいいと思う。
634名前は開発中のものです。:2006/01/20(金) 04:01:10 ID:AJrpxY2i
>>631
確かに技術は向上するが、近道ではないと思う。
探す時間を読むのに割り当てたほうが効率的。
(自分で解決しないのが癖になったら問題だが)
635名前は開発中のものです。:2006/01/20(金) 05:04:24 ID:cuy72tDd
 こんばんわ。初心者の疑問にどなたかお答え頂けないでしょうか?

 DirectPlayでピアツーピアアプリを開発しようとしていたのですが、WEBで検索していて、
以下のように変化してきています。

1.ピアツーピアは NAT 越えできないから、費用かかってもクラサバでやるべきだろう。
2.DirectPlay は推奨されていない(MS自身を含めて)から Socket でやるべきだろう。

 で、今はサーバーを NAT の外に置き、クライアントはどこでも可、通信は Socket で行う。
という環境を想定しています。

 そこで以下の疑問が発生して悩んでいます。

1.部分的に UDP を使いたいのですが、UDP もやはり NAT 越え出来ないのでしょうか?
  今回の環境でいうと クライアントからの送信は UDP で行えるが、サーバーからクライアント
  への送信に UDP は使えないのでしょうか?
2.速さを要求する部分には UDP を使うべきでしょうか?TCP-IP と UDP ではかなり差があるもの
  なのでしょうか?

どうかよろしくご教授下さい。
636名前は開発中のものです。:2006/01/20(金) 05:54:22 ID:ts2pcmWN
>>630
本代を惜しむな。
637名前は開発中のものです。:2006/01/20(金) 08:22:06 ID:2iTzpS+y
>>635
まずNATとIPマスカレードを混同するのをやめること。
それからIPマスカレードでUDPが使えなかったら、ドメインを引くことすら出来なくなるぞ。
638名前は開発中のものです。:2006/01/20(金) 08:28:59 ID:xWSHaoVX
>>633>>636ありがとうございまし
639名前は開発中のものです。:2006/01/20(金) 10:45:30 ID:cuy72tDd
>637 ありがとうございます。ネットワークの基礎ができてないようです...orz


>>IPマスカレードでUDPが使えなかったら、ドメインを引くことすら出来なくなるぞ。

えーと、DNSサーバーへの問い合わせにはUDPが使われているのでしたよね?


>>NATとIPマスカレードを混同するのをやめること。

ちょっと勉強し直してきます。
640名前は開発中のものです。:2006/01/20(金) 13:09:31 ID:cuy72tDd
>>637 ちょっと勉強してきました。

 板違いなような気がする初歩的な疑問がわいてきたのですが、どうかお教え下さい。

 NATと静的IPマスカレードは以前ルーターに設定した事があり、外側からアクセスできる事
も確認していました。でも普通のIPマスカレードに関しては特に設定した事がなく、きっと設定
が難しいのだろうと関わらないようにしていました。

 ところが今勉強してきた内容によると、特にルータへの設定はいらないと思ったのですが、こ
れは正しいのでしょうか?
 最近のルーターは特に設定しない限り(グローバルIP設定等の設定以外)IPマスカレードが
基本なのでしょうか?


641名前は開発中のものです。:2006/01/20(金) 13:40:27 ID:cuy72tDd
>>637 度々すみません。 >>637様に指摘して頂いた内容がちょっとだけ分かってきたような気がします。

>まずNATとIPマスカレードを混同するのをやめること。

 外側からアクセスできないのはIPマスカレード(動的)の場合のみという事で正しいでしょうか? 

>それからIPマスカレードでUDPが使えなかったら、ドメインを引くことすら出来なくなるぞ。

 UDP も IP も扱いは同じと言う事でしょうか?
 となるとやはり、IPマスカレードの場合、ゲートウェイ内部から外側へのアクセスはできるが、外側から
内側へのアクセスはできないという事になるのですか?UDP、IPに関わらず。

 あ、またちょっと勉強してきます。
642名前は開発中のものです。:2006/01/20(金) 16:06:33 ID:f4A/Q0C3
DirectXを使用しているのですが、メッセージの来てない時に描画処理を行うというゲームループだと動作が重くゲームになりません。
WM_PAINTが呼ばれたときのみ描画するという方法以外に何かないでしょうか。
ありましたらご教授願います。
643名前は開発中のものです。:2006/01/20(金) 18:36:33 ID:kMfWH2Ff
>>DirectXを使用しているのですが、メッセージの来てない時に描画処理を行うというゲームループだと動作が重くゲームになりません。
徹底的に軽量化しる。あとWM_PAINTを使うのはなんか間違ってる希ガス
644名前は開発中のものです。:2006/01/20(金) 21:52:48 ID:lXuWX4xz
>>642
FPSちゃんと考えてる?
645642:2006/01/20(金) 22:12:05 ID:1+fLDQsB
646642:2006/01/20(金) 22:13:41 ID:1+fLDQsB
すいません。間違って書き込んでしまいました。
返答ありがとうございます。
>>643
十分軽くしてるつもりなんですが・・・。
>>644
考えてません。タスクシステムを使えということでしょうか。
647名前は開発中のものです。:2006/01/21(土) 04:36:25 ID:mg8wRruj
タスクシステムとか関係ない。
648名前は開発中のものです。:2006/01/21(土) 10:52:47 ID:FcJBx5+J
>>642
まずは部分毎に時間を測って
どの処理に時間が掛かっているのか特定しよう。
649名前は開発中のものです。:2006/01/21(土) 11:12:25 ID:E5l3VzaB
DirectXだと描画命令の時点では、時間が掛からないと思う
650642:2006/01/21(土) 11:39:57 ID:7OciQh2j
while(TRUE) {
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
if(msg.message == WM_QUIT)
break;
else {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else {
Paint(); // 描画処理です
}
Sleep(1);
}
651642:2006/01/21(土) 11:40:57 ID:7OciQh2j
>>650
このようなゲームループにしてるんですが、ここに問題はないでしょうか。
652名前は開発中のものです。:2006/01/21(土) 11:57:20 ID:cOBg8t3k
まず描画処理とイベント処理のスレッドを分ける。
653名前は開発中のものです。:2006/01/21(土) 11:59:39 ID:7OciQh2j
>>652
返答ありがとうございます。さっそくやってみます。
654名前は開発中のものです。:2006/01/21(土) 12:17:55 ID:E5l3VzaB
スレッド
655名前は開発中のものです。:2006/01/21(土) 12:24:15 ID:gndLCiDd
>>642
うちはこんな感じ。スレッドなんかいらん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;
}
656名前は開発中のものです。:2006/01/21(土) 12:41:58 ID:nqZd1DMC
駄目な書き方の見本提示乙。
657名前は開発中のものです。:2006/01/21(土) 12:41:58 ID:FcJBx5+J
>>650
Paint(); をコメントアウトした場合と
掛かる時間を比較しよう。
劇的に速度が違うなら Paint() の中に問題があるんじゃないのかな。
658名前は開発中のものです。:2006/01/21(土) 12:58:21 ID:gndLCiDd
>>656
そうなん?どこが駄目か教えて。
ちなみに少し前のDirectXSDKサンプルのまんまです。
659642:2006/01/21(土) 13:08:25 ID:7OciQh2j
スレッドを使用してみましたが、多少動作が軽くなった感じはするものの大差はありませんでした。
みなさんありがとうございます。
>>655
うらやましい
>>657
大きな違いはありませんでした。
DirectXを使わなければ問題は起こらないので、初期化の地点で問題があるのかもしれません。
もう少し見直してみます。
660642:2006/01/21(土) 13:54:29 ID:7OciQh2j
解決しました。
D3DCREATE_MIXED_VERTEXPROCESSING を 
D3DCREATE_SOFTWARE_VERTEXPROCESSING に代えるだけでした。
まさか初期化にミスがあるとは思わなかったもので・・・。
アドバイスを下さった皆さん本当にありがとうございました。
661名前は開発中のものです。:2006/01/21(土) 14:07:21 ID:/mV6xXb2
ttp://lacc.biz/cpp/cpp07.html
ここのサンプルを実行してみたのですが
画面消去の命令があるにもかかわらず、
画面が更新されないで指定画像が重なって表示されてしまいます。
ClsDrawScreen() ;だけが効いていないようなのですが、何が問題なのでしょうか。
ClsDrawScreen() ;をコメントアウトしてもしなくても同じ結果になります。
662名前は開発中のものです。:2006/01/21(土) 15:26:20 ID:+T+cr/VJ
>>654
Sleepしないと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;
663662:2006/01/21(土) 15:26:40 ID:+T+cr/VJ
>>668の間違いでした。
664663:2006/01/21(土) 15:27:18 ID:+T+cr/VJ
さらにまちがい、662は>>658へのレスです。
酔いが回りすぎです。
665名前は開発中のものです。:2006/01/21(土) 16:56:03 ID:gndLCiDd
まあ、656は単発IDの煽りでしょう。
スレッドの話をすると荒れるのでやめとこうw
666名前は開発中のものです。:2006/01/21(土) 17:14:45 ID:VeQ0DG52
>>665
DirectXのサンプル自体はあくまでサンプルであって、
あくまでDirectXの機能を紹介するために作られただけであのままでは実用出来ない。
理由はサンプルのままだとFlip時にV-Sync相当のウエイトを入れているので、
フレームスキップや、動作が重くなった場合に描画以外の処理だけ先に進めることが出来なくなる。
逆にウエイトを外すと無限にぐるぐるまわすことになり、
ベンチマーク用に能力を測るのなら適切だけど、実際のプログラムとしては不適切。
またループの内側でSleepをすると、その間ウインドウメッセージが処理できなくなる。

だからDirectXの機能紹介と能力測定のサンプルとしては適切なソースでも、
実際のプログラムには不適切な書き方なんだよ。
667名前は開発中のものです。:2006/01/21(土) 18:00:17 ID:gndLCiDd
>>666
メッセージ処理のことなら上の3つは同じことだと思うが違うかな。
スレッドのことなら荒れるので(ry
668名前は開発中のものです。:2006/01/21(土) 18:09:01 ID:cOBg8t3k
目的の違うサンプルソースをみて、それで正しいと思ってしまうことに問題があるんだろう。
さらに間違ったままそれを広めようとする奴とか。
669名前は開発中のものです。:2006/01/21(土) 18:11:30 ID:gndLCiDd
何も考えず変なソース張った俺が悪いなこれはwすまそん
670名前は開発中のものです。:2006/01/21(土) 19:30:15 ID:ZH97Dxy8
おし。おれもなにもかんがえずに貼ってみようかな

for( ; ; ) {

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);
}
}
671名前は開発中のものです。:2006/01/21(土) 21:35:41 ID:bEVxbAiq
>>668
そしてしったかしたいだけのオマエとかな
672661:2006/01/22(日) 06:34:40 ID:4Vf7TlrB
DXライブラリさんのほうのサンプルでも同じ現象がおきたので、
そちらでお伺いさせていただくことにしました。
スレ汚しすいません。
673名前は開発中のものです。:2006/01/23(月) 14:58:01 ID:yyObefN6
>> 602-605
閉じられたハンドルにはまた新しいデータが割り当てられますよね。
これって閉じたハンドルを閉じられたとは知らずに保持していて
ハンドルを参照した時に別のデータを取得してしまう危険性は無いでしょうか?
マジックナンバーがラップして同じインデクスに同じマジックナンバーが
割り当てわれる可能性は十分にあると思うのですがどうなんでしょう?

1. AがHというハンドルを持っていたとします。
2. AはBにHを分け与えました。
3. BはHを破棄したくなりその場で破棄(mgr.Release(H))しました。
4. AはHを参照するも無効なハンドルだと知ることが出来ました。
ここまではいいんですよ。生ポインタじゃこのシナリオは書けません。

上の3.と4.の間で大量のハンドルの生成が行われた場合、
4.でAが(閉じているはずの)Hを参照した時にHと同じインデクス/マジックナンバーの
ハンドルの再割り当てが行われるとAは別のデータを参照してしまいます。
674名前は開発中のものです。:2006/01/23(月) 15:33:46 ID:EPKLYP2E
>>673
マジックナンバーの値は増加する一方だから
基本的に同じマジックナンバーは割り当てられない。
ただしマジックナンバーを保持する変数には当然上限があるから
ハンドルの生成数にも限りがある。

と俺は思う。
675673:2006/01/23(月) 15:55:07 ID:yyObefN6
>>674
ハンドル生成数はインデクスの方ですよね?
マジックナンバーは正当性を保証するだけのもので。
ハンドル数に関係なくハンドルの生成/破棄を繰り返せばそれだけでマジックナンバーは増加します。
マジックナンバーはインデクスとは比べ物にならない位インクリメントされるので
意外とすぐ上限に達してしまうような。
676名前は開発中のものです。:2006/01/23(月) 16:00:23 ID:EPKLYP2E
>>675
違うんじゃない?
インデックスの方はマジックナンバーがあるお陰でループしても平気だけど
マジックナンバーの方はそうは行かない。
677673:2006/01/23(月) 16:24:21 ID:yyObefN6
>>676
それだとハンドル数が例え1個でも生成/破棄の回数が決まってしまいますよね?
インデクスは破棄されたハンドルのものを再利用するのでインデクスに16bit割り振れば
65536個持てるわけですよね。

なんだか本題より前の段階で意見の相違があるみたいですね。
実装はgemsの1.6項のものです。
678名前は開発中のものです。:2006/01/23(月) 16:27:52 ID:EPKLYP2E
いやいや、参照カウンタではないから
ハンドルをコピーするだけではマジックナンバーは増えないのでは?
679673:2006/01/23(月) 16:32:22 ID:yyObefN6
>>678
ええ、確かにハンドルのコピーだけではマジックナンバーは増えません。
ですがマネージャにハンドルを要求すればその分マジックナンバーは増えますよね?
ゲームを動かしていて2時間くらいしたら
「マジックナンバーが一杯なので終了します」じゃ話にならないですよね・・・?

gemsのP73 でもマジックナンバーのラップ処理は記述されてるので、
マジックナンバーはラップ前提なはずですよ。
680名前は開発中のものです。:2006/01/23(月) 16:53:58 ID:EPKLYP2E
>マジックナンバーはラップ前提なはずですよ。
そうでしたか。今手元にGems無いんで家に帰ったら確認してみます。

>マネージャにハンドルを要求すればその分マジックナンバーは増えますよね?
>ゲームを動かしていて2時間くらいしたら
>「マジックナンバーが一杯なので終了します」じゃ話にならないですよね・・・?
だから種類ごとにハンドルマネージャ作れるようにテンプレートにしてあるのでは。
無限にというのはいくらなんでも無理だからその中で想定最大数を見積もって
バランスよく分けて管理すると。
681673:2006/01/23(月) 17:19:16 ID:yyObefN6
>>680
>だから種類ごとにハンドルマネージャ作れるようにテンプレートにしてあるのでは。
と言う事はマジックナンバーがラップして同じインデクスに
同じマジックナンバーが割り当てられてしまうのは仕様って事ですかね。

>無限にというのはいくらなんでも無理だからその中で想定最大数を見積もって
ですね。
ですがgemsでは「インデクスの範囲内でユニークを保証する」といった意味で書かれていると解釈したため
ゲームオブジェクトのようなものにハンドルを割り当てようと思ったわけです。
ですがテクスチャやサウンドなどのリソースに割り当てるなら問題ないってレベルなんでしょうね。
682名前は開発中のものです。:2006/01/23(月) 17:30:41 ID:EPKLYP2E
16bit-16bit みたいにインデックスとマジックナンバーで半々にしなけりゃ
同インデックス、同マジックナンバーってのはそうそうでないのではないかな
Gemsでも8-24とかになってたような 気のせいだったかな?
記憶があやふやでスマソ。
683673:2006/01/23(月) 17:56:28 ID:yyObefN6
>>682
>16bit-16bit みたいにインデックスとマジックナンバーで半々にしなけりゃ
>同インデックス、同マジックナンバーってのはそうそうでないのではないかな
でも確立的に低いからといってゲームオブジェクトなどの場合
オブジェクトの摩り替わりは絶対にあってはならない事ですよね。
しかも一番見つけにくい部類のハグになりそうですし。

>Gemsでも8-24とかになってたような 気のせいだったかな?
たしか半々だったような。テクスチャリソースの管理ならどんな割合でも問題なさそうですけど。

マジックナンバーを本物のGUIDにしたらどんくらい遅くなるんだろうか。
他に早くて確実なユニークIDって何かないかなぁ。
684名前は開発中のものです。:2006/01/24(火) 01:14:06 ID:tH1FX665
アドレスだと確実にユニークです。
685名前は開発中のものです。:2006/01/24(火) 01:23:48 ID:TYtG+MJg
>>684
どういうこと?

void* p = malloc(1);
free(p);
void* q = malloc(1);
assert(p != q);

こうは言えないだろ。
686名前は開発中のものです。:2006/01/24(火) 02:27:10 ID:tH1FX665
アドレス空間より広いサイズのIDは保持不可能という前提で言ってたんだが。
開放済みのアドレス参照するようなアホはハングアップでもなんでもすればいいんじゃね?
687673:2006/01/24(火) 04:33:44 ID:YZe4vdms
>>686
685氏はアドレスじゃdangling pointerは防げないよって意味でmallocの例を出したんじゃないんですか?
pを他のやつにばらまいて誰かがpを開放したらpの有効性を誰が保証してくれるんでしょう。

上記のハンドルだと再割り当ての可能性があるし、
スマートポインタじゃオーバースペックだから他にユニーク性を保証するものってないだろうかっていう話ですよ。
でももう面倒だから参照カウンタで管理します。
688名前は開発中のものです。:2006/01/24(火) 05:27:10 ID:0JfXcgLd
32bitもあれば、1秒間に1000個生成しても、
一ヶ月プレイし続けたところでラップさせられない。

16bitやそこらでも、
16bit値をラップさせるほどオブジェクトが生成されるほどの時間、
ハンドルを寝かせるようなアルゴリズムにしなければいい。
689673:2006/01/24(火) 05:46:51 ID:YZe4vdms
>>688
>32bitもあれば、1秒間に1000個生成しても、
>一ヶ月プレイし続けたところでラップさせられない。
1秒間に1000個って60FPSのゲームで1フレ約16個ですよね。
局所的に見ればそれ以上生成される可能性は十分にありますよ。
でもまあIPv6でIPが2^128個以上存在する可能性は
将来的に十分ありえるから心配って言ってるようなもんですかね。

>bit値をラップさせるほどオブジェクトが生成されるほどの時間、
>ハンドルを寝かせるようなアルゴリズムにしなければいい。
確かにこれを厳守すれば確立的に問題ないでしょうが、
人間はミスする生き物です。
他人がどうコーディングするかは他人まかせなので・・・。

実際みなさんはゲームオブジェクト(のポインタ)をどのようにして管理してます?
690名前は開発中のものです。:2006/01/24(火) 06:30:02 ID:mDNWO736
理想に燃えて政治運動に傾倒しちゃうタイプだね。
691名前は開発中のものです。:2006/01/24(火) 15:11:47 ID:OImDqu0S
ミスしないように気をつけてます。
なぜかミスしてなくても止まったり動かなかったりしますorz

いろいろなところで、オブジェクト指向のためのプログラミング理論が
展開されてるなあw
692名前は開発中のものです。:2006/01/24(火) 17:03:38 ID:/21JgKVE
>>689
32bit型整数でマジックナンバーを表し、
ゲームが60fpsで1fpsごとに100オブジェクト生成することを考えます。
マジックナンバーがオーバーフローするまでには
2^32 / (100個 * 60fps * 60sec * 60min * 24hour) = 8.28日
かかりますので、仕様として「ゲームは連続一週間以上動かさないで下さい。」とするか、
これで満足できない場合は32bit型整数を2つ使いましょう。
ちなみに、この場合(ry
693名前は開発中のものです。:2006/01/25(水) 01:23:31 ID:NTRzHP+4
32bitがフローするようなメモリを扱えるのか?アアン?
694名前は開発中のものです。:2006/01/25(水) 01:49:38 ID:BOmLnX9t
滅茶苦茶低レベルな話で申し訳ないんだけど、AIを組むには関数できないと無理?
ひたすら条件分岐しまくりだったらやっぱりみっともないの?

695名前は開発中のものです。:2006/01/25(水) 01:55:15 ID:5sRU4y71
アイボの制御コードを、NHKの番組でチラッっと見たことがあるが、
swith-case文が何十何百と、滝のように流れていたな。

アドバイス欲しいなら言語かいた方が良いかもよ。どのみち関数は出来ないとだけど。
696名前は開発中のものです。:2006/01/25(水) 10:01:28 ID:gmXOMyeO
状態遷移は、switch-caseで切り替えてもいいし
関数ポインタで切り替えする手もあるな。

どの状態のときに何をするのか、ちゃんと管理出来るのであれば条件分岐しまくりでも構わないよ。
みっともなかろうが作りやすい手段を取ればいい。
697名前は開発中のものです。:2006/01/25(水) 10:03:07 ID:tn59aU26
>>696 自分ひとりしか読まなくていいなら、という条件付きで頼む。
698名前は開発中のものです。:2006/01/25(水) 13:58:23 ID:BOmLnX9t
使ってるのはHSP。
本屋でゲームAIの本を立ち読みしたら、ファジー理論とかって奴が書いてあったからさ。
理屈は分かったんだけど、関数が自分の理解の範疇を超えてたから、
ちょっと不安になった。

やっぱり、条件分岐連発より関数使った方が処理は早いのかな?
だったら関数で出来るかぎりやってみたいんだけど。
それとも、初めて組むプログラムでそこまでやるのは無謀?
699名前は開発中のものです。:2006/01/25(水) 14:30:31 ID:7MagqtIT
>>698
条件分岐と関数では、処理速度に大きな違いはない
ただソースコードの読みやすさとか修正のしやすさに大きな違いが出る

基本は関数単位で作るものだと思った方がいい
もちろん>>696案のほうが有効な状況もあるけど
700名前は開発中のものです。:2006/01/25(水) 14:30:38 ID:vp/xDrq7
自分は条件分岐を連発した関数を使ってます ><
701名前は開発中のものです。:2006/01/25(水) 22:02:47 ID:/k0hXHel
俺らはゲームプログラマだ。
一般アプリのプログラマでもOS屋でもない。
作った者が勝ちだ。
動かした者が勝ちだ。
条件分岐のカルボナーラでいいじゃないか。

ずっと書き続けていれば、いつか自然に条件分岐を捨てる日が来るのさ。
702名前は開発中のものです。:2006/01/25(水) 22:09:14 ID:LjkjN1ec
うむ。
後で書き直したってせいぜい3日だよ。
それなのに始める前に何日悩むのかw
703名前は開発中のものです。:2006/01/25(水) 22:42:06 ID:5CRuCrfQ
>>700-702を見てやる気が出たよ
704名前は開発中のものです。:2006/01/26(木) 01:35:32 ID:p9JhM1p4
>>701
糞コードの量産を正当化するような発言は控えてください。
705名前は開発中のものです。:2006/01/26(木) 02:38:40 ID:Id3aznFo
>>704
どうせ晒さないからおk
706名前は開発中のものです。:2006/01/26(木) 02:59:37 ID:p9JhM1p4
  ,j;;;;;j,. ---一、 `  ―--‐、_ l;;;;;;   
 {;;;;;;ゝ T辷iフ i    f'辷jァ  !i;;;;;   
  ヾ;;;ハ    ノ       .::!lリ;;r゙
   `Z;i   〈.,_..,.      ノ;;;;;;;;>
   ,;ぇハ、 、_,.ー-、_',.    ,f゙: Y;;f   そんなふうに考えていた時期が
   ~''戈ヽ   `二´    r'´:::. `!   俺にもありました
707673:2006/01/26(木) 15:37:38 ID:eu4m8wWi
>>692
>32bit型整数でマジックナンバーを表し、
確かにマジックナンバーに多量のbitを割り当てれば問題ないのはわかってるんですが、
ハンドルを32bit(約レジスタサイズ)に収めたいジレンマがあったのでそもそもこんな質問をしたわけです。
しかもその32bitをインデクスと共有するため実用上は最大で20bitほどしか割り当てられません。
単一のインデクスが毎回使いまわされるという最悪なアルゴリズムでは
20bitを消費した直後にハンドルに同じマジックナンバーが割り当てられてしまいます。
均等に12bitのインデクスが使われる確立も低いため、間をとってインデクスの約6bitが平均して使われると仮定すると
26bitですので約3時間で再割り当てが行われる可能性があります。

まぁ32bitにこだわらなくても最近のPCなら(ry
708673:2006/01/26(木) 15:47:34 ID:eu4m8wWi
間をとって6bitってアホですな。
8bitで12時間ですか。ゲーマーはご遠慮くださいってとこで・・・。
709名前は開発中のものです。:2006/01/26(木) 17:54:38 ID:yrvBeKCI
本当に簡単なマリオ風横スクロールRPGみたいなのを作りたいんだけど、ブロック(壁とかのオブジェクト)の表現ってどうするの?
画面表示用の配列を作って、1ブロック分移動するたびにマップデータ配列から新しいブロック列を読み込む
ってのを使ってるんだけどどうも重くて
710名前は開発中のものです。:2006/01/26(木) 18:06:36 ID:MnDriWAX
その程度の処理で何で重くなるのかがさっぱり分からん。
711名前は開発中のものです。:2006/01/26(木) 19:19:29 ID:yrvBeKCI
Pen4 RadeonVEだからかもしれない
712名前は開発中のものです。:2006/01/26(木) 19:21:36 ID:yrvBeKCI
Pen4 1.7GHzだった
そろそろパソコン購入を考えた方がよさそう
713名前は開発中のものです。:2006/01/26(木) 20:53:11 ID:R2/Ifoi1
まあさんざん引っ張って悪いんだが、設計ミスです。
714名前は開発中のものです。:2006/01/26(木) 21:07:57 ID:yrvBeKCI
正直自分でもなんとなくおかしいと思ってた
マップとか当たり判定の仕方を解説してるサイトとか無いかな
715名前は開発中のものです。:2006/01/26(木) 22:57:30 ID:R2/Ifoi1
ミスはシリアルナンバーの方ね。(笑)

マップのサイズってどんなもんよ。 メインメモリをはるかにオーバーしてるんじゃなければ
そうそう重たくならないと思うんだが。

スーパーマリオなんて8bitマシンの4Mhzで普通に動いてたろ。
716名前は開発中のものです。:2006/01/27(金) 14:01:24 ID:ZzcOIWPU
RPGゲームの作り方教えちくり
ダブルバッファリング使ってマップ描画したいんだけど
そうすると当たり判定とか訳分からない
717名前は開発中のものです。:2006/01/27(金) 14:23:04 ID:vJBgpAN1
>RPGゲーム
ねらって書いただろ?

ダブルバッファリング使ってマップ描画の方法をしりたい。
マップ描画したあとの当たり判定をしりたい。どっち?

どっちにしろ俺はプログラム素人だから知らないがな。
718名前は開発中のものです。:2006/01/27(金) 14:25:00 ID:odjJ0rRD
>>717
>どっちにしろ俺はプログラム素人だから知らないがな。

おまい潔いな( ´ー`)y─┛~~
719名前は開発中のものです。:2006/01/27(金) 14:50:59 ID:ZzcOIWPU
>>717
>ねらって書いただろ?
恥ずかしくて「はいそうです」としか言いようが無い

どちらも
簡単な横スクロールは作ってみたけどどうもおかしい
普通なプログラマのやり方が知りたい
720名前は開発中のものです。:2006/01/27(金) 14:54:34 ID:odjJ0rRD
>>719
>> ねらって書いただろ?
> 恥ずかしくて「はいそうです」としか言いようが無い

おまいも潔いな( ´ー`)y─┛~~
721名前は開発中のものです。:2006/01/27(金) 15:10:22 ID:6gofb40N
キーワードは「自作自演」
722名前は開発中のものです。:2006/01/27(金) 16:01:58 ID:k5wFytZR
マジレスすると、マップの当たり判定はチップナンバーでするか、
細かく判定したいのなら当たり判定用のマップを別に作る。
723名前は開発中のものです。:2006/01/27(金) 16:07:12 ID:ZzcOIWPU
>>722
チップナンバーとは何でしょう?
724名前は開発中のものです。:2006/01/27(金) 16:21:18 ID:k5wFytZR
なんか釣り臭い気がするなw

RPG作るなら、マップエディタがいるだろ?
マップチップはわかるな?

マップチップ0=海
マップチップ1=草原
0とか1がチップナンバー。

それを頼りに判定する方法。
海に囲まれた島があったら

0000000000
0011111100
0111111110
0111111110
0011111100
0000000000

こういうマップになるだろ?
で1なら通れるわけだ。

当たり判定にバッファリングは関係ない。
725名前は開発中のものです。:2006/01/27(金) 16:23:55 ID:sZghv91r
マップ描画用データはマップ描画用データで処理すればいい。
当たり判定は当たり判定用データで処理すればいい。
難しいことは、単純なことに分解、小分けにしていくことで大抵クリアできるんぽ。
726名前は開発中のものです。:2006/01/27(金) 17:05:37 ID:ZzcOIWPU
>>724-725
ごめん、本当に初心者です
バッファリング用のint二次元配列と当たり判定用のint二次元配列を一緒にしようと思ってたので頭がこんがらがってしまって
別々に作ってみます
ありがとうございました
727名前は開発中のものです。:2006/01/27(金) 17:10:51 ID:Cddpk7ys
レイヤ使わないなら、判定用に分けなくてもいい気がする。
728名前は開発中のものです。:2006/01/27(金) 18:16:19 ID:ZzcOIWPU
BMP読み込み
マップデータ(ブロック種類記述)読み込み
マップデータからマップデータ配列
struct MapData{
  POINT pt;
  int type)
729名前は開発中のものです。:2006/01/27(金) 18:16:51 ID:ZzcOIWPU
うっわ恥ずかしミス
730名前は開発中のものです。:2006/01/27(金) 20:46:59 ID:IEFBcByl
可愛いよ>>729
その恥じらう姿がたまらなく可愛いよ>>729
731名前は開発中のものです。:2006/01/27(金) 21:24:04 ID:Cddpk7ys
>>728
書きかけだし、ミスならアレだけど、
なんで POINT が必要なのかな・・・かな?
732名前は開発中のものです。:2006/01/27(金) 21:48:01 ID:ZzcOIWPU
0とか1とかが並んだマップデータファイルからデータを読み込んでtypeに格納、その際POINT型のptに座標(開始0,0)も格納
座標は1チップ読み込む度に座標+=1チップのサイズ
これを100チップx100チップの仮想BMP(マップファイル)に書き出す
キャラクターの座標はクライアント領域内の座標じゃなくマップ内の座標にする
・・ってのをやってみたいと思ってる
マップ作っちゃうと重くなるかな?
733名前は開発中のものです。:2006/01/27(金) 22:41:59 ID:Cddpk7ys
おk、把握した。チップ画像の座標てことね。

そんなんでいいと思うよ。
734名前は開発中のものです。:2006/01/27(金) 22:43:08 ID:ZzcOIWPU
良かった
がんばってみる
735名前は開発中のものです。:2006/01/27(金) 22:44:24 ID:Cddpk7ys
736名前は開発中のものです。:2006/01/27(金) 22:48:15 ID:ZzcOIWPU
ありがとう
今エディタ探してたところ
737名前は開発中のものです。:2006/01/28(土) 05:38:41 ID:7XpuQXDc
>732
今のPCパワーなら何ら問題無い
メモリの有効利用がキーになるけど
それよりもマップの画像データを
作るほうが大変
738名前は開発中のものです。:2006/01/28(土) 10:21:30 ID:oms8+w1B
ttp://ian-albert.com/misc/gamemaps.php

有名どころのマップ集。デザインの参考にはなるんでない?
739736:2006/01/28(土) 20:54:31 ID:mw6mWgjC
ttp://dream.my-sv.net/upload/src/up0124.zip
ここまでやってみた。画像はマップ作成ツールのサンプル
ただスクロールがなんかおかしい
当たり判定はuser構造体内のPOINT型mptとmapdata構造体配列でやりたいと思ってるけど実装の仕方がわからなくてグダグダ
マップとか画像はセンスが無いからどうにも・・・
740名前は開発中のものです。:2006/01/29(日) 01:48:00 ID: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じゃなくて構造体にして詰め込めばいい。と思う(´・ω・`)
741名前は開発中のものです。:2006/01/29(日) 15:34:49 ID:Pz5ng5yE
Direct Graphics の描画時の同期(Present()の終了待ち)をタイマーの代わりにしていたけど、
それだと、ウインドウモードでFPSが変わると速度の変化があるよね。

60Hzと75Hzで同じような処理を行うには、75のときに5回に一回飛ばせばいいだけなの?
それだとカクカクしない?
742名前は開発中のものです。:2006/01/29(日) 16:01:50 ID:38NWeupe
カクカクする。
でもそれは仕方の無いことだとあきらめてる。
解決策教えてエロい人。

速度を一定に保ちたいなら、1秒間でどのくらい動くかということを考えて
フレームごとの移動量を足していくようにすればいい。
743名前は開発中のものです。:2006/01/29(日) 16:16:20 ID:Fm34QVYs
>>740
はじめに数枚のマップチップを張り合わせた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しかない・・
744名前は開発中のものです。:2006/01/29(日) 16:48:30 ID:38NWeupe
自キャラの位置をマップ座標で持ってるなら、32で割る必要なしだと思うが。
そのところは好きに実装すればいいんじゃね?

単にキャラの座標を32倍して保持するか、しないかの差だろ。
歩くたびに割り算するのはあんまり好きじゃないけど、今時のPCならどうでもいいことだろうし。

要は短形で判定する必要はないってことじゃないかね。
1ピクセルが一歩なら別の方法取らなければならんが。
745名前は開発中のものです。:2006/01/29(日) 17:05:54 ID:Fm34QVYs
MapData[40][40];に自キャラ座標のmapdata[120][130+1]を要求するとおかしくなると思ったので
キャラの1歩を32ドットとして当たり判定は移動先の座標にブロックがあるかないかで判断すると
キャラ移動時のアニメーションが必要になりますね
その辺りも勉強しておかないと
746名前は開発中のものです。:2006/01/29(日) 17:34:55 ID:op7RmHi9
判定方法と、移動時のアニメーションの必要性の有無に因果関係はない。
747724:2006/01/29(日) 17:36:03 ID:38NWeupe
俺は740のソースしか見ていないから違ってるかもしれんが
「自キャラの座標」は適当に直して使えということではないかな?
俺だったら32倍して持たないけど。

745の二行目以降はよく意味が解らん。アニメーション関係あるか??
748名前は開発中のものです。:2006/01/29(日) 17:50:53 ID:Fm34QVYs
>>746-747
ポケモンとかのゲームは1歩が1マスで移動時にアニメーション
同じように1歩を1マスにするとアニメーション使わないと見栄えが悪くなるかなと思って
まだまだそんなこと言ってられるレベルじゃないけど
>「自キャラの座標」は適当に直して使えということではないかな?
なるほど。自キャラの座標は実座標で扱ってたのでマスとして扱ってみます
749名前は開発中のものです。:2006/01/29(日) 17:53:21 ID:38NWeupe
勘違いしてほしくないので補足。

/ 32 自体が間違ってるから不要と言ってるのではなくて
まぁ初心者だから、好きなようにやってみるといいんじゃね?
あとから仕組みがわかるだろうさ、という意味。
750名前は開発中のものです。:2006/01/29(日) 18:12:51 ID:vc0WpJnf
なんかRPG作りたくなってキターよ
751名前は開発中のものです。:2006/01/29(日) 19:33:33 ID:plNhfuQ3
752名前は開発中のものです。:2006/01/29(日) 20:27:43 ID:9zZt3Bjn
便乗質問ですが、ウィザードリィやM&M、女神転生などの
3Dダンジョンはどのように作れば良いでしょう。
753名前は開発中のものです。:2006/01/29(日) 20:42:43 ID:plNhfuQ3
>>752
「どのように」って質問されてもな。何答えろって言うんだろうな。
大工さんに頼めという答えを期待しているのだろうか?

1,データをどのように持つのか?
   → 自分が作りたいものを内部的にどう表現するのか?
2,準備したデータをどのように表示するのか?
   → 自分の場所と方向を変化させても通用するように一般化させてコードに落とす

の2段階を考えれば、全体の流れは明確だと思うのだが。

まず着手してもらえるかい。
その中で個別に問題が出てきたら、ここで質問するといいよ。
754名前は開発中のものです。:2006/01/30(月) 14:41:03 ID:pwza337w
>>752
状態に応じた画像を用意しておきそれを組み合わせて表示する。
755名前は開発中のものです。:2006/01/30(月) 20:49:25 ID:cASwFPVk
ttp://dream.my-sv.net/upload/src/up0126.zip
マップ間のリンクなんとかならないだろうか
いちいち位置を指定するのは面倒

>>749
いろいろやってみてるけどやっぱり難しいね
前作った物はキャラ移動の度に全てのチップに大して当たり判定してたから酷かった
756名前は開発中のものです。:2006/01/31(火) 11:37:06 ID:bncgzWlZ
>>755
ソースをアップするのは自由だが文面から察するに
「誰かソース見て添削してくれ」と言わんばかりだな。
そのスタンスは歓迎されないし自分の為にならない。
僕らは君の先生じゃない。だが焦点を絞って質問すればその限りではない。

>マップ間のリンクなんとかならないだろうか
>いちいち位置を指定するのは面倒
マップを増やすたびにコンパイルが必要と言うのはあまりよくない。
どのマップからどのマップへ移動というデータは外部で持つべき。
そのトリガはマップチップの番号なのは言うまでもない。
とにかくアルゴリズム以外は外部ファイルに追いやる事が慣用。
757名前は開発中のものです。:2006/01/31(火) 21:00:44 ID:DVSWyTVl
なんだかんだ言ってソースを見てる>>756に萌え。
758名前は開発中のものです。:2006/01/31(火) 23:47:03 ID:9zYTSFdg
…ななな何言ってんのよ!!ふっ、ふざけないでよ!
私だって、す、好きでやってるわけじゃないからね!
べ、別にあんたなんか困っててもかまわないんだから!

バカーーーーーーーーー!!!
759名前は開発中のものです。:2006/02/01(水) 02:12:15 ID:C1VssrMU
つんでれワロス
760名前は開発中のものです。:2006/02/02(木) 16:47:09 ID:zJWaviNk
マリオ風アクションゲーム作りたくて設計を考えてるんだけど、マップ内の移動と描画はいいとして
敵とかのプレイヤーが動かすことのできないオブジェクトはどうやって表現するの?
出現条件とかもわからないし
761名前は開発中のものです。:2006/02/02(木) 16:59:17 ID:ITiT6PpE
>>760
>敵とかのプレイヤーが動かすことのできないオブジェクトはどうやって表現するの?
まぁ基本はこんな感じか。
for (i = 0; i < キャラクタの数; i++)
{
obj[i]->Move();// 移動処理&マリオとの当たり判定など
}

>出現条件とかもわからないし
出現条件はマリオの居る現在位置から割り出し、
画面に出現する直前にキャラクタの登録をしてるんじゃないかな?
それかマップのロード時に一括して登録して移動処理はしないで画面で出そうになったら
移動処理を開始するとか。いろいろ方法はあるな。
762名前は開発中のものです。:2006/02/02(木) 17:47:28 ID:zJWaviNk
>>761
なるほど。
やっぱり専用のスレッドを作った方がいいでしょうか?
763名前は開発中のものです。:2006/02/02(木) 18:00:45 ID:WY9YNFgU
スレッドを作るほどのことではない。
764名前は開発中のものです。:2006/02/02(木) 18:26:05 ID:itlkOWhp
というよりスレッドなんか作ったらいかん。
765名前は開発中のものです。:2006/02/02(木) 19:59:29 ID:zJWaviNk
>>763-765
勘違いしてるかもしれないので一応
_beginthread()で生成して_endthread()で破棄するスレッドのことです
現在メッセージループメイン関数(描画処理をプロージャのWM_PAINT内で行う)のほかに
キャラクター表示座標、マップ内表示座標調整スレッドがあります
766名前は開発中のものです。:2006/02/02(木) 20:00:39 ID:zJWaviNk
ありますと言うか予定してます
767名前は開発中のものです。:2006/02/02(木) 20:34:10 ID:ITiT6PpE
>>765
いやたぶん>>763-764は勘違いしてないと思うよ。
メッセージループとゲーム処理用のスレッドは分けてもいいけど、
ゲームでは仕事ごとにスレッドなんぞ作ったりしない。
マルチスレッドなんぞそれが絶対に必要な状況でなければしないほうがいい。

細かい事だが・・・
>プロージャ
プロシージャな。
768名前は開発中のものです。:2006/02/02(木) 20:37:45 ID:zJWaviNk
>>767
そうでしたか
スレッド重くなりますかね
>プロシージャ
今までずっとプロージャプロージャ(ry

ありがとうございました
769名前は開発中のものです。:2006/02/03(金) 17:39:09 ID:61rrsxe9
ゲーム作りたいけど何をどうすればいいか分からない
まぁゲーム以前にDirectXの扱い方知らないわけですが
770名前は開発中のものです。:2006/02/03(金) 17:42:45 ID:wdE0Xf80
チュートリアルなぞって、コードを入力しながら動作を確実に確認する。
途中で絶対飛ばさず最後までやる。
これだけである程度は使えるようになる。
771名前は開発中のものです。:2006/02/03(金) 18:24:26 ID:1irKKshj
何も分からないあなたに


 H   S   P
772名前は開発中のものです。:2006/02/03(金) 18:30:17 ID:9+40Ycym
>>771
C言語とWindowsAPIは分かってるかもしれない。
773名前は開発中のものです。:2006/02/07(火) 15:21:25 ID:LNshS9pw
チュートリアルってどこにあるん?
774名前は開発中のものです。:2006/02/07(火) 15:42:19 ID:hMuL99HK
SDKのなか
775名前は開発中のものです。:2006/02/09(木) 00:16:23 ID:ECXOumIZ
d3dでxファイル表示して動き回るところまでは行けたんだが、
肝心のキャラクターのモデリングが全く進まん・・・
というより、どういうキャラを作れば良いか全く不明orz
ゲームの趣旨考えてなかったツケがこんなに早く回ってきた・・・
776名前は開発中のものです。:2006/02/09(木) 00:46:35 ID:omgxuJLh
初期化やらライティングやらマトリックスでコンパイルエラーしまくって鬱状態の俺の前でそんなこと言うか
万死に値する
777名前は開発中のものです。:2006/02/09(木) 00:48:24 ID:ECXOumIZ
matrix・・・orz
それ聞くと鬱になる・・・
778名前は開発中のものです。:2006/02/09(木) 01:21:47 ID:4g56q1Cr
>コンパイルエラーしまくって

さすがにそれはプギャー
779名前は開発中のものです。:2006/02/11(土) 20:44:09 ID:6UQggnvC
>>777
そんな君に
つQuaternion

>>778
コンパイルエラーならどこが悪いか箇所教えてくれるだけまし

780名前は開発中のものです。:2006/02/11(土) 21:09:44 ID:QzYc1Fwd
3Dゲームについて聞きたいんだけど
テクスチャマッピング機能ってどうやって使うの?
VertexBufferに入れた物体には適応できるけど
Xファイルには適応できないような・・
781名前は開発中のものです。:2006/02/11(土) 21:57:41 ID:6UQggnvC
>>780
最近のD3Dはわからんのだが、
基本的にXファイル自体はマテリアルやテクスチャを内部で持っている。
読み込むときに自前でテクスチャをロードし、
描画時にデバイスにSetTexture()する。
782名前は開発中のものです。:2006/02/11(土) 22:34:00 ID:86oM2yeq
yaneSDK3のフレームスキップの部分なんですが/**/のところが意味がわかりません。
なぜ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; // ぴったりで描画が完了した仮定する。(端数を持ち込まないため)
}
783名前は開発中のものです。:2006/02/11(土) 22:39:19 ID:QzYc1Fwd
>>781
なるほど。
全てXファイルを使用するなら必要のない機能ということですね
784名前は開発中のものです。:2006/02/11(土) 22:45:31 ID:8qUzzjc4
そりゃあんた、一周の待ち時間が*1だからじゃよ。
(余計にかかった時間が)2フレームの描画時間以上なら…
と読み替えればよろし。

つか、キモいコメントだね。
関西人ってみんなこうなの
785名前は開発中のものです。:2006/02/11(土) 22:54:06 ID:5Zuq4Zo9
関東だろうが関西だろうが、キモい奴はキモいんだよ。
関西人と一括りにするのは失礼。
786名前は開発中のものです。:2006/02/12(日) 01:38:10 ID:w8yo3LTb
関西人だけど確かに>>780はキモイ希ガス
787名前は開発中のものです。:2006/02/12(日) 01:39:35 ID:w8yo3LTb
ちなみにコイツはチュンだな
788名前は開発中のものです。:2006/02/12(日) 01:43:36 ID:BClNNt0M
初心者の俺をキモい呼ばわりですか
789782:2006/02/12(日) 03:40:55 ID:MOr6hByS
>>784
実をいうと2フレームというところからして理解できないので
m_bFrameSkip = dwDelay > 0;
としました。
790名前は開発中のものです。:2006/02/12(日) 11:39:09 ID:n176RnBh
>>782
コメントもコードもキモすぎると思ったら
あの偏執狂やねうらおか
791名前は開発中のものです。:2006/02/14(火) 03:36:39 ID:G6ky4O6B
また大阪か
792名前は開発中のものです。:2006/02/14(火) 03:47:35 ID:eoybXVvM
テクスチャのお勉強にDirect3Dを使って2Dのゲームを作りたいのですが、
薄い面だけのポリゴンを複数画面に並べ、そこにマップチップ等のテクスチャを貼り付ければいいのですか?
自キャラの描画もキャラ用の薄い面にアルファ値を設定したテクスチャを貼れば大丈夫ですよね?
793名前は開発中のものです。:2006/02/14(火) 04:05:40 ID:Qt9KWBeq
>792
日本語で(ry

マジで薄い面って何だよ
794名前は開発中のものです。:2006/02/14(火) 04:11:34 ID:eoybXVvM
三次元のポリゴンでなくて頂点が4つしかない普通の四角形
日本語は苦手
795名前は開発中のものです。:2006/02/14(火) 08:19:24 ID:DFRR3HSf
ポリゴンはそもそもただの三角形。
796名前は開発中のものです。:2006/02/14(火) 08:51:04 ID:NbMr8it4
>>795
それは言い過ぎ。
「ポリゴン」とだけ言った場合は「多角形」という意味。

>>792-794
マジエスパーすると、いわゆる矩形スプライトのことだろう。
797名前は開発中のものです。:2006/02/14(火) 10:49:04 ID:9HsB+cDe
もうちっと3Dグラフィックに関する勉強が必要なんじゃないか
798名前は開発中のものです。:2006/02/14(火) 14:00:53 ID:eoybXVvM
>>796
それっぽいです
ポリゴンに貼り付けないと2Dは描画できないと思っていたので

>>797
参考書と睨めっことか嫌いだから
いろいろ作りながら覚えていこうと思ってる

いってくる
799名前は開発中のものです。:2006/02/14(火) 21:01:27 ID:m/P5BAbG
「ビルボード」でいいんでない?
800名前は開発中のものです。:2006/02/15(水) 13:57:58 ID:DANF+Uun
SDKだと「スプライト」が座標変換無しの2D画像で
「ビルボード」は爆発とかに使う座標変換ありの1枚板だな
801名前は開発中のものです。:2006/02/15(水) 18:51:04 ID:CAX6fixr
>>80
ゼノギアスの戦闘シーンのキャラとか、FFTのキャラとかがビルボードですな。
爆発にも使えるけど。

どちらかといえば2Dの描画というより、3Dの背景の中に
2D絵をなじませるための技術だと思っていたが、その理解でいいのかな?
802名前は開発中のものです。:2006/02/18(土) 19:38:52 ID:qqhUmVxW
3Dゲームは描画用マップとコリジョンマップに分けると聞いたのですが、
描画用マップとコリジョンマップは1ステージ全て1つのXファイルで作るんですか?
803名前は開発中のものです。:2006/02/18(土) 20:10:32 ID:+8ZFcTvr
キャラクターと衝突判定する部分だけに特化したデータを作ってもらうといいじょー。
例えば天井に衝突しないゲームなら、デザイナーさんに天井無しにしてもらうとか。
描画用ではカーブでも衝突用のは多少ごつごつしてても平気っす。
描画用もヒットチェック用もXファイルじゃなくってもいいけど、基本別々です。
804803:2006/02/18(土) 20:13:53 ID:+8ZFcTvr
×カーブ ○滑らかなカーブ
805名前は開発中のものです。:2006/02/18(土) 21:07:24 ID:qqhUmVxW
>>803
なるほど、描画用マップはテクスチャ情報の付いたXファイルなど、
コリジョンマップは壁や各オブジェクトの位置を表したデータファイル・・・であってますか?

>作ってもらうといいじょー。
業界人ではないので誰にも作ってもらえないですorz
コリジョンマップエディタとかあるらしいのですが有料でしょうか
806名前は開発中のものです。:2006/02/18(土) 21:28:28 ID:5dz9KLeS
逆にコリジョンマップを含めたステージの論理的なデータから
風景を生成するっていう考え方もあるが、まぁ普通は別々に作るんだろうな
807803:2006/02/18(土) 21:51:17 ID:+8ZFcTvr
>>805
そそ、描画データが大体、x,y,z,nx,ny,nz,u,v,面情報,マテリアル情報などなど〜、とかだけど
コリジョン用は、x,y,z,面情報、で十分なので。

>コリジョンマップエディタ
オラにはわかりませんです。

>>806
風景データの完成後、それをコピって別レイヤーで
がすがす頂点削ってく作業なので結構すぐ作ってくれます。
2〜3週間で作るデータでも、1・2日でコリジョンデータは出来てくるっす。
808名前は開発中のものです。:2006/02/18(土) 23:15:29 ID:vUI3VTnm
gtkradiantだっけ?
そういうのもあるらしい。
809名前は開発中のものです。:2006/02/19(日) 00:17:34 ID:GTOCpkng
FF7〜9のように一枚の2D絵に描かれた3D世界の中を3Dのポリゴンキャラが動き回るゲームって
どうやって実現しているんでしょう?
特に、スクロールとかやった時にどうして遠近感や空間関係が破綻しないのか不思議です。
なんたって、キャラは3Dで背景は2Dですからね。作るの難しいですかね?
810名前は開発中のものです。:2006/02/19(日) 01:57:03 ID:prU8DMPB
あれは一枚のように見えるけど一枚じゃないぞ
811名前は開発中のものです。:2006/02/19(日) 09:01:11 ID:rJ6jDAqF
>>809
フィールドは、全部3Dでおおまかなブロックにわけてスクロール。FF7で時々読み込み失敗する;;(飛空挺?とかで)
ダンジョンは、カメラの視点・注視点が動かないシーンは背景を2Dでプレイヤーの前面にくるオブジェを
3D計算で(これは2D計算(描画順序のみ)のままでもいけるところもあるかも)。
ムービーへ切り替えするときは、背景をムービーとして、カメラワークとプレイヤーの前面にくるオブジェだけ3D計算。
812名前は開発中のものです。:2006/02/19(日) 14:15:08 ID:GTOCpkng
注視点が動かないシーンなら分かるんです。コンポジションソフトと同じ要領でしょ?
問題はカメラがキャラを追って大きくパン(背景絵もスクロール)するような広いダンジョンの場合は?
空間関係を保持出来ませんよねぇ?
813名前は開発中のものです。:2006/02/19(日) 15:12:31 ID:rJ6jDAqF
コツとしては絵の中の道は実際の3Dデータとして考えて、
カメラワークをキャラクターの位置から背景2D絵に対して平行にすべらせるとFF7〜9のようにできます。
(道がキャラクターより前面にくる時は当然3Dオブジェとして描画します。
というかFF7〜9の背景データは3Dデータから2Dにおとしてる?)

背景データが3Dじゃないと表現できないのはカメラ視点が平行移動せず奥へ向かって行く場合っす。
FF7〜9ではそういう時、ムービーを使用しています。
そういえばバイオハザードとかも同じっすね。
814名前は開発中のものです。:2006/02/19(日) 15:14:58 ID:prU8DMPB
FFに視点・注視点が動くような場面あったかな
単純にスクロールしてるだけだと思ったが
http://gamdev.org/up/img/4707.jpg
815813:2006/02/19(日) 15:41:30 ID:rJ6jDAqF
×奥へ ○奥や手前へ

>>814
そう思います。プレステ1だし風景まで3Dってわけにはいかなかったのかも。
816名前は開発中のものです。:2006/02/20(月) 00:21:23 ID:Ez2JkE7H
理解しました。つまりカメラがキャラの移動に対して常に平行移動する限り、カメラアングルに「角度」的変化は無いので背景絵と矛盾しなかったんですね。
しかしその場合でも、スクリーン何個分もスクロールするような長い道などの場合マップ絵の読み込みだけで相当なメモリを消費するんじゃないかと思うんですが。
それに3D処理とマップ描きは別の工程での作業になると思うんですが、
実際プログラム上で実行した時に3D処理上の当り判定とマップ絵上の壁とが
寸分違わず一致してますよね〜。一体どうやってるんでしょう?
817名前は開発中のものです。:2006/02/20(月) 00:22:51 ID:IKQC9DMw
寸分違わず一致しない理由がわからん。
818名前は開発中のものです。:2006/02/20(月) 01:44:52 ID:Ez2JkE7H
だってだって、普通少しくらいズレたって良さそうじゃん?
3D処理用の簡易モデル・シーン情報→マップ描く人のツールに移す→細かいパーツとか付け足し、テクスチャ貼り→プリレンダ絵完成
この工程のどこかでズレそうじゃん、どこかでマウスがブレたりして。またはカメラの設定トチったりして。
819名前は開発中のものです。:2006/02/20(月) 01:52:21 ID:HTNVYcWy
製品レベルではズレることは許されない
820名前は開発中のものです。:2006/02/20(月) 02:14:38 ID:Ez2JkE7H
じゃあ慎重な作業と根性でズレないようにしていると理解してよろしいですか?

ちなみにこういったシステム(FF7・8・9/初期バイオハザード)のゲームを作るにはどの程度のプログラムの技術が必要になりますか?
自分はプログラムは組めないので、出来る人を探さなければいけないんですが。
例えばこのスレにいる皆さんなら作れます?キャラモデルやマップ等は全部こっちで用意すると仮定して。
821名前は開発中のものです。:2006/02/20(月) 02:33:26 ID:7NofXH/9
>>820
出来る人は結構いるけど、あんたに付き合っている暇がある人はいないと思われ。
822名前は開発中のものです。:2006/02/20(月) 04:31:14 ID:kdfJprxL
割と大変な方。
823名前は開発中のものです。:2006/02/20(月) 08:49:33 ID:RiDlUb3J BE:318525539-
>>820
技術もさることながら、単純にマンパワーが必要になるよ
FF7〜クオリティ・量のグラフィックデータを自前で全部作れるのならそんな心配無いのかもしれんけど
824名前は開発中のものです。:2006/02/20(月) 12:13:27 ID:oi3Frd4a
上司「高速化がご飯作ってくれるの!?」
オラ「でもスクエ二君の家は・・・」
上司「スクエニ君の家はスクエニ君の家!!うちはうち!!」
825名前は開発中のものです。:2006/02/20(月) 13:24:47 ID:ko93Nstz
プロの作品って技術もさることながらマンパワーが凄まじいよなぁ
826名前は開発中のものです。:2006/02/20(月) 15:48:34 ID:g7wRkPfK
確かに。
827名前は開発中のものです。:2006/02/20(月) 19:14:27 ID:DhgD3x+I
Softimage|XSI FTKに詳しい方に質問です。
XSIのスケルトンをエクスポートしたいんですが、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)
それとも何か別の考え方に基づいているんでしょうか?
828名前は開発中のものです。:2006/02/20(月) 19:21:56 ID:ZusWQmSS
>>827
CG技術板じゃないか?
829名前は開発中のものです。:2006/02/20(月) 19:27:55 ID:XpFlk9zt
>>825
そりゃ、ゲーム作るのに50人とか使えるんだからな。
アマチュアはどう頑張っても10人程度が限度だろう。
830名前は開発中のものです。:2006/02/20(月) 19:34:52 ID:jsb+bV9/
プロジェクト管理する人は、相当な交渉能力と
カリスマ性と幅広い知識が無いと、50人なんて統制できないんだろね
831名前は開発中のものです。:2006/02/20(月) 20:11:51 ID:hi1jYPiS
金がありゃ何とかなるんじゃね?
832名前は開発中のものです。:2006/02/20(月) 22:32:44 ID:bkUHwmA4
2Dのファミコンのドラクエの洞窟みたいなマップのシステムを作るには
どのようなやり方がよいですか?
参考になるようなサンプルとかないでしょうか。

環境:VC++
833名前は開発中のものです。:2006/02/20(月) 22:32:58 ID:pF6ek0Cc
>>828
XSIの中間フォーマットdotXSIからゲーム製作などに必要なデータをコンバートするためのライブラリがFTKのようだ
834名前は開発中のものです。:2006/02/20(月) 22:58:49 ID:LyW0l92U
>>827
以前自分がやった時は、良く分からないまま試行錯誤してたら上手く行った感じに
なっただけなので、もしかしたら問題あるかもしれんが書いてみる。
ソース見ても良く思い出せないけどね。バージョンによっても違うかもしれんし。

基本的に、SRTを階層で乗算していった物がそれぞれのBASEPOSEになるみたい。
なので、アニメーションさせないならBASEPSOEだけ使えば、SRTによる階層での乗算は不要かと。
SRTはFCurveで値を変更できるようなので、アニメーションするならSRTも必要。
FCurveでアニメーションさせる場合、SRTにはFCurveの1フレーム目が入っているようだ。
ジオメトリブレンディングをやるならSRTだけじゃ駄目で、BASEPOSEが必要と思われる。
自分のソース上では、BASEPOSEの逆行列保持して、SRTで動かして元に戻す感じになってる。

自分で書いてても良く分からなくなってしまった。
聞きたい事と全然違ったらごめんね。
835名前は開発中のものです。:2006/02/21(火) 01:05:32 ID:2/rlrMq6
今度オリジナルのカードゲームをHSPで作ろうと思うのですが
どういう風にプログラミングすればいいのでしょうか?
836名前は開発中のものです。:2006/02/21(火) 02:30:10 ID:dgLZBZXY
>>835 オリジナルでおk
837827:2006/02/21(火) 13:28:47 ID:Ry7crMJu
>>834
>基本的に、SRTを階層で乗算していった物がそれぞれのBASEPOSEになるみたい。

どもです。BASEPOSEはIKで使うようですね。エフェクターを動かした後、この逆行列を掛けて変換行列を得るようです。
838前430:2006/02/21(火) 22:19:53 ID:NxD57HWX
>>835
割り込みがあるルールの場合は、お互いのカードをスタックに積んで上から処理する。
839名前は開発中のものです。:2006/02/24(金) 03:15:19 ID:9TnWIlnr
Direct3D使ってゲームを作りたいのですが、クラス構成で悩んでます

WinMain┬Rendererクラス ・・・レンダラーの初期化と描画開始・終了・Present()
     └Sceneクラス   ・・・シーンの構築と描画 レンダラークラスからポインタで呼び出される

今のところこんな形になってるのですが、(某DX本の構成)
ここにキャラクターの移動や描画などの処理をまとめたCharクラス
マップのスクロールや描画をまとめたMapクラス
などのオブジェクトを表すクラスを組み込むとしたらどこに入れればいいのでしょうか?
上の構成はぶっ壊してもいいです
840名前は開発中のものです。:2006/02/24(金) 12:49:41 ID:yHhdLc83
悩むところなんだろうか?ぶっちゃけどこに入れても
その先の部分をきちんと書けばちゃんと回ると思うんだが。
841名前は開発中のものです。:2006/02/24(金) 16:44:36 ID:9TnWIlnr
オブジェクトクラスが入力と描画どちらにも対応しないといけないから
描画用クラスに組み込むとおかしくなるし
描画用クラスの外に出すとどうやって描画するかが分からなくて
842名前は開発中のものです。:2006/02/24(金) 17:07:15 ID:yHhdLc83
ひょっとすると俺には想像もつかない複雑な構成になってるのか。
そもそも説明文と図が矛盾してる(レンダラーからシーンが呼び出されるのに
図ではWinMainを介してしか繋がってないように見える)しな。
843名前は開発中のものです。:2006/02/24(金) 19:48:30 ID:9TnWIlnr
ttp://dream.my-sv.net/upload/src/up0140.zip
ごめん今こんなものしかない
WinMainからレンダラー呼び出してその中でDirectXの初期化
次にシーンクラスのCreateScene()呼び出してテクスチャとかメッシュとかアニメーションとか設定
WinMain最後にスレッド生成。スレッド内は無限ループ。
レンダラークラスのRenderScene関数にシーンクラスへのポインタ渡して
RenderScene関数内で画面クリア後、シーンクラスのDraw関数呼び出してモデルを描画
その後RenderSceneに戻ってpresent()したらWinMainに戻る
打っててなんかおかしいとおもた
長々とスマソ
844名前は開発中のものです。:2006/02/24(金) 20:43:19 ID:yHhdLc83
CSceneクラスにオブジェクトクラスなりそのポインタなりのリストを保持させる
845名前は開発中のものです。:2006/02/24(金) 21:50:22 ID:9TnWIlnr
やっぱりシーンクラス内になりますか
スレッド内で移動処理などしたいのでWinMainにクラス持たせてポインタを渡すことにします
ありがとう
846名前は開発中のものです。:2006/02/26(日) 21:47:41 ID:qag5ydFj
タスクシステムとやらを組んでみた
コンパイルエラーの嵐
関数ポインタとメモリが絡んでくると毎回酷いことになる
847名前は開発中のものです。:2006/02/27(月) 08:33:07 ID:wV/qPqZG
コンパイルエラー云々言ってる段階じゃ
まだ話にならんと思うんだが。
848名前は開発中のものです。:2006/02/27(月) 16:41:18 ID:oEXfl838
いや関数ポインタの方はあまり使ったことないからその辺はまぁ・・

Class1::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*型に変換できないの?
849名前は開発中のものです。:2006/02/27(月) 16:45:29 ID:E/UIX170
>>848
>クラスのメンバ関数はvoid*型に変換できないの?
ムリ。
いや、無理すれば出来るけど。
bind1stで調べてみると分かる、かも?
850名前は開発中のものです。:2006/02/27(月) 16:46:40 ID:oEXfl838
あとクラス内のメンバ関数ではなくクラス外の関数なら普通に渡せた
void test(TASK *t){/*・・・*/}とか
851名前は開発中のものです。:2006/02/27(月) 16:47:36 ID:oEXfl838
>>849
更新してなかった
>bind1st
ありがとう、ちょっとググってくる
852名前は開発中のものです。:2006/02/27(月) 20:12:08 ID:BluJBaYX
>>848
クラスの多重継承を考えると、sizeof(メソッド)は
sizeof(単純な関数ポインタ)+sizeof(オフセット)
が必要になるよ。
853名前は開発中のものです。:2006/02/27(月) 20:35:03 ID:oEXfl838
しばらく検索してみたけどどうにも・・

>>852
よく分からんです・・
タスク用のデータエリアのことなら
pTask = new CTask;
TASK* Task = pTask->TaskCreate(行動関数,開放関数,優先度,タイプ); //タスク生成、リスト追加
Task->Data = new データ型;
Task->Data = (void*)データ;
で確保してるのでサイズは大丈夫だと思う

タスクってポインタをガシガシ切り替えて処理するものだと思ってたけど
CじゃなくC++のクラスを使ったタスクシステムを見てみると
どれも継承元で仮想関数使って継承先に処理を記述する処理固定のしかないんだなぁ・・・
854名前は開発中のものです。:2006/02/27(月) 20:47:17 ID:IKST4ZuK
つStateパターン

あと、関数ポインタじゃなくてboost::function使うと色々できるよ。
パフォーマンスは知らんけど。
855名前は開発中のものです。:2006/02/27(月) 20:50:42 ID:BluJBaYX
>>853
C++でもポインタの切り替えはできるよ。というかできたよ。
理由は>>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)
のようにする必要がある。
856名前は開発中のものです。:2006/02/27(月) 21:47:38 ID:oEXfl838
>>854
>Stateパターン
Stateで検索してたつもりがいつのまにかデザインパターン全般のページ見てた
奥が深いね・・・こっち関連の書籍持ってないから今度買ってみる
boostはライブラリをあまり使いたくない派なので迷う
>>855
異なる複数のクラスに対応させる場合、
生成関数をその分用意しないといけないので大変ですね・・
なんでクラスメソッド渡せないんだか・・

デザインパターンに興味を持ったのでStateパターン覚えてからしばらくそっちに走ってみます
857名前は開発中のものです。:2006/02/27(月) 22:08:46 ID:BluJBaYX
> 異なる複数のクラスに対応させる場合、
> 生成関数をその分用意しないといけないので大変ですね・・
> なんでクラスメソッド渡せないんだか・・
まさにここが工夫のしどころで、
いちいち作らないようにする方法はある。
858名前は開発中のものです。:2006/02/27(月) 22:13:28 ID:oEXfl838
>>857
今思い出したからうろ覚えだけど
もしかして関数テンプレート機能?
859名前は開発中のものです。:2006/02/27(月) 22:47:19 ID:BluJBaYX
ういうい。
このくらいはできて当然だから、がんばっちくり。
860名前は開発中のものです。:2006/02/27(月) 22:49:43 ID:oEXfl838
ありがとう
俺物忘れ激しいな・・
C++基礎からやり直した方がいいかも
861名前は開発中のものです。:2006/02/27(月) 22:53:02 ID:NtZAdaLq
タスクシステムなんて言うから C で組んでるのかと思ったら、 C++ だったのかよ。
普通に仮想関数使えば終了だな。キモイキャストの連発ともおさらばだ。

関数ポインタから void* への変換は、メンバ関数に限らず不可。
もしできたように見えたとしても、それはコンパイラの独自拡張だろう。
862名前は開発中のものです。:2006/02/27(月) 23:23:15 ID:BluJBaYX
>>861
やってみれば分かるけど、仮想関数のみだとキャストしないと無理。
あと、関数ポインタからvoid*への変換は確かに環境依存なんだけど、
boost.function はそれを駆使して実装されてるんで、
boost.function が動く環境ならどこでもできるよ。
863名前は開発中のものです。:2006/02/27(月) 23:37:54 ID:NtZAdaLq
>>862
単に「タスクシステム」っていうと、メインループがタスクのポインタ握って
ポインタから仮想関数を呼び出すぐらいしか無いと思うんだけど、
何にキャストが要るの?

boost::function が関数ポインタから void* への変換を駆使してる?
どこにそんな情報があるの?
とりあえず現状のソースでは union 使ってるみたいだけど。
http://cvs.sourceforge.net/viewcvs.py/boost/boost/boost/function/function_base.hpp?view=markup
864名前は開発中のものです。:2006/02/28(火) 00:21:53 ID:6zNpXrV2
class ClassA {
public:
  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 の存在を許せるよね…
865名前は開発中のものです。:2006/02/28(火) 00:29:02 ID:zCKm/IVQ
>>863
タスクシステムって言うのは
class Task {
public:
 void begin_task() { ... set_task(&Task::task1); }
protected:
 void task1() { ... set_task(&Task::task2); }
 void task2() {}
};
とか、こういうのを指してると思うんだ。
で、コールするべきメソッドを保存するためには、
テンプレートを使わないならキャストする必要があるよと。
もちろん1タスク1関数を遵守してもいいんだけど、これはこれでなかなか便利だよ。
あと、boostの方は間違えた。
関数オブジェクトを保存しているフィールドと関数ポインタのフィールドを見誤ったようだ。
866名前は開発中のものです。:2006/02/28(火) 00:31:23 ID:zCKm/IVQ
↑set_taskとそれを呼び出すメソッドは適当に補完して。
867名前は開発中のものです。:2006/02/28(火) 00:31:28 ID:aXLiBRlK
ゲームの描画と処理は別にした方がいい?
別にする場合の構成とかどんなもん?
868名前は開発中のものです。:2006/02/28(火) 03:24:56 ID:nWNa1RWo
>853
C++でやるならもっと型安全に気を使おう。
そんな古典的な手法を使うならCでやれ。

C++的には
>継承元で仮想関数使って継承先に処理を記述する
その継承先の処理の記述で、
ifやswitchやメンバ関数ポインタやstaticメンバ関数へのポインタを使って分岐するのが、
型安全でカプセル化でスマート。

>861
void *に変換した物は、何も弄らず元の型に戻せば、
正しく復元される(関数ポインタだとしても)って聞いたんだが。
869名前は開発中のものです。:2006/02/28(火) 09:48:42 ID:q2yPrwLQ
>>867
普通は別にするとおもわれ。
構成なんて漠然としたこと聞かれても困る。
例を示されよ。
870名前は開発中のものです。:2006/02/28(火) 12:17:07 ID:kxpJE7Cj
>>868
オブジェクトポインタと関数ポインタの間での変換は規格では認められていない。
C の時からそう。
871名前は開発中のものです。:2006/02/28(火) 12:57:51 ID:aEEYZl8l
タスクシステムってまさかCodezineに載ってるアレのことか?
C++でやるならStateパターン+1キャラクタ1クラスでFAだろ。
872名前は開発中のものです。:2006/02/28(火) 13:39:14 ID:kxpJE7Cj
>>865
その形でどこにキャストが要るのかわからない。
873名前は開発中のものです。:2006/02/28(火) 21:40:21 ID:zCKm/IVQ
>>870
確かにコンパイラの独自拡張なんだけど、もはや共通拡張と言ってもいいくらい浸透してるみたいだね。
条件付きではあるけれど。
ttp://forums.belution.com/ja/cpp/000/015/67s.shtml

>>871
状態によって処理を変える必要しかないならそれでもいいだろうね。
ただ、例えばタイトル画面なんかの場合は
1)タイトル文字をフェードイン+移動しながら表示
2)サブタイトルを移動しながら表示
3)全体にエフェクトをかける
みたいに状態によって左右されないシームレスな記述が必要になる。
これを扱う方法としてswitchやマイクロスレッドがあるんだけど、
もう一つの方法がこのオリジナルタスク。
オリジナルとはいっても
Codezineのタスクシステム + Move or Drawメソッドの呼び出し先を変えられる
ってだけなんだけど。

>>872
新規クラス Task2 や Task3 を導入したときに問題になる。
874名前は開発中のものです。:2006/02/28(火) 22:38:49 ID:K7Ri/qFO
状態によって処理を変えるのが、Stateパターンじゃないのか
875名前は開発中のものです。:2006/02/28(火) 23:36:27 ID:l+ExwxPF
タスクシステムのあとから生まれた、関数ポインタとか隠蔽しているC++で
タスクシステムの方を優先して設計するのはナンセンスだと思うよ。

関数ポインタを使って実現したいことは処理の共通化だろうし、それは仮想関数だけじゃなくて
普通に継承元になる側にも関数いれときゃいいし。
継承元のクラスポインタに、派生したいろんなクラスをまとめていれられる。
876名前は開発中のものです。:2006/02/28(火) 23:47:24 ID:aXLiBRlK
WinMain下の構造教えてくれ
877名前は開発中のものです。:2006/03/01(水) 00:51:17 ID:CUoSF3s4
>>865の言ってるタスクシステムとか百害あって一利無しじゃね?
>状態によって左右されないシームレスな記述
ってのは単に処理をどこで区切ってStateに分けるかの話だろ。
878872:2006/03/01(水) 00:59:35 ID:IPZ1L++y
>>873
> 確かにコンパイラの独自拡張なんだけど、もはや共通拡張と言ってもいいくらい浸透してるみたいだね。
> 条件付きではあるけれど。

そんなに必死に正当化しなくても、非標準なんだから使わないようにすれば済む話。
「共通拡張」なんて胡散臭い言葉を持ち出すのは混乱の元。

> 新規クラス Task2 や Task3 を導入したときに問題になる。

やっぱりわからない。わかんないのは俺だけ?
何から何へのキャストが要るのか、書いてもらえると分かるかも。
879名前は開発中のものです。:2006/03/01(水) 01:09:15 ID:2CSbAmuS
>>878
もういいじゃん。
そっとしておいてあげようよ…。

共通拡張の時点で分かるでしょ。
もういっぱいいっぱいなんだよ。
わかってやれよ。
880名前は開発中のものです。:2006/03/01(水) 01:28:04 ID: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() {}
};
881名前は開発中のものです。:2006/03/01(水) 02:16:32 ID:MsffCk59
>>875
関数ポインタを使ってしたいことは、処理の共通化でもあるんだけど、
タスクの場合は主に長い処理を1フレーム分に分割することにある。
マイクロスレッドなりスレッドなりを使わないと、どうしてもぶつ切りにせざるを得ないので。
もちろん、templateメソッドみたいに呼び出すメソッドがあらかじめ分かっていれば、
継承元側に仮想関数を追加しておくことはできるよ。
ただタスクシステムの場合、それはほとんど不可能。

>>877
Stateを使うってことは、状態一つに対してクラスを一つ作るってことなのかな?
例えば、>>873にあげた1)2)3)でそれぞれに対してクラスを作るの?
これの代替機能としてはswitchやマイクロスレッドがあげられると思うんだけど、
何でステートパターンにこだわるんだか、俺には分からない。
これだと粒度大きすぎると思うんだけど。
(細切れの関数に対していちいちクラスを作らないといけないってことね)

>>878
> そんなに必死に正当化しなくても、非標準なんだから使わないようにすれば済む話。
> 「共通拡張」なんて胡散臭い言葉を持ち出すのは混乱の元。
一緒に示したソース見た?
その中に「共通の拡張」って表現があるから、それを借りただけなんだけど・・・
この辺は>>868や俺のように間違えてる人が多いから、一応確認しただけ。
これは本題ではないので、こちらからはこれ以上レスしないよ。

あと、>>880に示したプログラムではテンプレートを使ってないので、
@に何を書いてもAでキャストすることになる。
使わない方法があれば、俺も知りたい。
882名前は開発中のものです。:2006/03/01(水) 02:36:11 ID:MsffCk59
>>881
× @に何を書いてもAでキャストすることになる。
○ @に何を書いてもset_taskの呼び出し時にキャストすることになる。
883名前は開発中のものです。:2006/03/01(水) 03:14:04 ID:IPZ1L++y
>>880,881
キャストが要るようになったらプログラムが間違ってるのを疑えよ。
なんで仮想関数で得られる型安全を自ら壊すような「タスクシステム」に
こだわるんだ?そんなシステム要らない。

↓これでいいんじゃないの。

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() {}
};
884名前は開発中のものです。:2006/03/01(水) 04:00:38 ID:MsffCk59
>>883
ようやく伝わったようだ。イメージとしてはそんな感じ。
で、テンプレートを使えば m_update_task 周りの処理をすべて
継承元の xxx<Task1> に投げられますよというだけの話。
例でtemplateを使って無いのは、>>882に説明するため。
885名前は開発中のものです。:2006/03/01(水) 04:08:48 ID:DYhzXIPk
一体何を話しあっているのか分からない俺ガイル

State1() : m_update_task(&State1::begin_task) {}
void (State1::*m_update_task)();
void begin_task() { m_update_task = &State1::task1; }

この辺りの記述ははじめた見た
詳細きぼん
886名前は開発中のものです。:2006/03/01(水) 04:18:04 ID:DYhzXIPk
あーすまん分かった
コンストラクタとメンバ関数ポインタか
コンストラクタでbegin_taskを関数ポインタに代入して
それが呼び出されれば関数ポインタにtask1を代入するわけか
またひとつ賢くなった
887名前は開発中のものです。:2006/03/01(水) 04:25:23 ID:MsffCk59
>>884
また分かりにくいかもね。
>>883の例でいくと、
class State1 : State<State1> { ... };
とすれば、m_update_task 周りの処理を
継承元であるState<>で行うことができますよという話。
888名前は開発中のものです。:2006/03/01(水) 06:34:35 ID:FsQhIhlt
根本的に勘違いしてると思うんだよねぇ。
つーかさ、switchでつくりゃいいじゃん。ポインタにしてもいいことないよw
最適化かからなくなるし。

switch( TaskType )
{
case TaskType1: funcType1(); break;
case TaskType2: funcType2(); break;
case TaskType3: funcType3(); break;
 default: assert( false /*TaskTypeError*/ );
}


ああ、安全安全。
889名前は開発中のものです。:2006/03/01(水) 07:51:41 ID: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)();
};
890名前は開発中のものです。:2006/03/01(水) 09:15:15 ID:IPZ1L++y
>>889
> キャストとかtypedefとか必要ない俺のつくったタスクシステムのきれっぱしを参考にしてくれ
> void Run() { (((T*)this)->*m_doit)(); }

キャスト入ってるよ。まぁ型安全は使い方で確保されてると言えるけど。
あんた、たぶん VC 使いだな。メンバ関数ポインタの &ClassName:: は
規格では省略できないことになってるから、気をつけてな。

>>884,887
たぶん 889 と似たような形のことだろうな。

これまでに挙がったコードだと template も継承も持ち出さずに
自分でメンバ関数ポインタを宣言(>>883)すれば十分に見えるんだけど、
「 m_update_task 周りの処理」ってのは代入と呼び出し以外に何か有るの?
State の実装がメンバ関数ポインタによる処理に切り替えを必要とするとも
限らないし、これをわざわざ「システム」として組み込んでしまうのは
template や継承(特に自己言及的 template など)おぼえたてで
使いたいだけに見えなくも無い。ほんとでそんな構成に利点があるんだろうか?
891名前は開発中のものです。:2006/03/01(水) 09:45:30 ID:SKz1zCk0
Cマガのやつじゃだめなの?
892名前は開発中のものです。:2006/03/01(水) 11:08:16 ID:LeN+sImJ
>>890
ほとんど似たようなコードを置きながらちっともリスペクトしなかったのは俺の不注意だが
そこまで嫌味をいわんでもええやん
893名前は開発中のものです。:2006/03/01(水) 19:11:17 ID:FsQhIhlt
C#あたりでポインタのない世界を勉強するほうがいいかも。
C++がこんな言語なのはCとの互換性を保っているからだしね。

なんつーか、WindowsのDOS窓でプロテクトモードじゃないと動かないような
プログラムをいまさら作ってるくらい違和感がありますよ関数ポインタ。
894名前は開発中のものです。:2006/03/01(水) 19:11:48 ID:FsQhIhlt
勉強として使ってみるのは十分ありだと思う。
895名前は開発中のものです。:2006/03/01(水) 21:06:02 ID:IEMguq9O
>>888
あたし、一生あなたについていきます(*・_・)
896名前は開発中のものです。:2006/03/01(水) 21:06:39 ID:CUoSF3s4
少なくともC++において設計の時点でキャスト前提に話してるのって絶対おかしいだろ
897名前は開発中のものです。:2006/03/01(水) 21:44:02 ID:MsffCk59
>>890
分かってるとは思うけど>>880はサンプルだし、
実際に使うとなると他にもいろいろと書き加えないといけない。
そうなったときに、継承先クラスの実装とタスクシステムが
分離されてることはいいことだと思うけど。

>>893
もちろん実装として、メンバ関数ポインタの代わりに
boost.functionやらそのたぐいを使うことは十分に考えられる。
そういったことはすでに提案されている。
898名前は開発中のものです。:2006/03/01(水) 23:16:45 ID:1kpkO4CI
俺も昔はC++で関数ポインタ使うタスクシステムってのを作ってたけど、
今はtemplateとstateパターンだなぁ
899名前は開発中のものです。:2006/03/01(水) 23:24:58 ID:DYhzXIPk
グローバルに宣言した変数ならextern使えば他ファイルのクラス内からでもアクセスできるんだな
ファイル分割の辺りを飛ばしてたから初めて知った
グローバル変数をクラスにポインタ使って渡してた自分が馬鹿みたいだ・・
900名前は開発中のものです。:2006/03/01(水) 23:32:08 ID:FsQhIhlt
その変数をローカルにするんだ。
901名前は開発中のものです。:2006/03/01(水) 23:32:30 ID:hlrpUZzF
>>899
いきなりC知らない人間がC++やると碌なことが無い
902名前は開発中のものです。:2006/03/01(水) 23:38:46 ID:qSXqEEUp
>>899のやってる事の中でC++独自の機能を目を皿のようにして探す漏れ。
っていうかぁ、


 ○ ○ ○ シ ス テ ム 云 々 っ て 馬 鹿 ぁ?


達成すべき処理に対して最適なアルゴリズムで組んでいけば、
それが最強のシステム。「よし○○○導入するぞ?」ってのは、
自分でまともなアルゴリズム組めない思考停止。PG才能無し。
903名前は開発中のものです。:2006/03/01(水) 23:46:27 ID:CUoSF3s4
>>902
これは ひどい
904名前は開発中のものです。:2006/03/02(木) 00:14:44 ID:DSQKJe+A
自分は間違えを犯さないという絶対的な自信があるならそれでもいいと思うけど
そこまで自身がないなら既に完成しているシステムを組み込む安全な方法のほうがいい
905名前は開発中のものです。:2006/03/02(木) 06:45:23 ID:kEb75Hs9
>>902
自分以外の同業者が何か敵か見下す対象なのであれば
同一のパーソナリティが出す見解としてはあってる。
906名前は開発中のものです。:2006/03/02(木) 11:14:39 ID:An/IP3MA
だいたい設計なんて自分でいくら考えたところで
がいしゅつか糞かのどっちかだろ。よっぽど今までに無い
特殊な課題が出てきたってなら話は別だけどな
907名前は開発中のものです。:2006/03/02(木) 11:59:46 ID:0lN5e5iu
彼は天才なんだよ。最適なアルゴリズムや設計が
常に湧いてくるなんて尊敬しちゃいます(><)
908名前は開発中のものです。:2006/03/02(木) 13:48:40 ID:xnVjPOfM
ogreって日本語使えますか・・・?使う前に聞きたいんですビットマップテクスチャなのかさえ
909名前は開発中のものです。:2006/03/02(木) 19:06:30 ID:TkjXSKpG
その前に、君が日本語を使えるのか確認したほうが良さそうだが・・・
910名前は開発中のものです。:2006/03/02(木) 19:33:56 ID:7Bu1OvIg
>>904
そのとおりなんだが、上で出てるタスクシステムとやらは超絶に危険だろ?w
ツリー構造のタスクシステムをC++で作ったときはリンクリストにしてポインタ使ったけど
アップキャストだけにしてスマートポインタで管理して、タスクを利用する人からは極力
隠蔽するようにしたもんだけどなぁ。
911名前は開発中のものです。:2006/03/02(木) 19:38:50 ID:An/IP3MA
糞システム導入して痛い目に遭って>902のような結論に辿り着くとか愚かすぎ
912名前は開発中のものです。:2006/03/02(木) 20:22:45 ID:FRBQKYqS
結局は”最終的に評価されるゲームを作った”奴が勝ちなんだよ。
100行以上に及ぶ関数やグローバル変数や状態変数の乱立。
内部でスパゲッティーコード組もうがハードコーディングしようが、
最終的に俗世間に評価されればそれが勝ちなんだよ。
一般大衆はコーディング云々なんて気にしない。
面白ければそれでいい。
オナニーはエロ動画だけで十分って事だよ。

まぁ、いいもん作ろうぜ。
913名前は開発中のものです。:2006/03/02(木) 20:38:34 ID:An/IP3MA
ゲ製クオリティ
914名前は開発中のものです。:2006/03/02(木) 20:40:18 ID:e+7b9NqL
オマエのそのクソ設計やクソコード、何十年使う気でいるんだよw
っていつも思う。
915名前は開発中のものです。:2006/03/02(木) 20:41:22 ID:EQr6DVKB
面白さなんて飾りです。一般大衆にはそれが分からないのです。

勝ち負けなんて気にせず、
自己満足のための美しい設計に心血を注ぐ者がいても良いじゃない。
916名前は開発中のものです。:2006/03/02(木) 20:43:53 ID:ODhfrfjk
C丼でデリゲート使うことにしますぅ
917名前は開発中のものです。:2006/03/02(木) 21:18:05 ID:FRBQKYqS
設計でオナニーしたい奴はすればいいじゃん、止める義理はないからな。
でもオレは要求された仕事を期日以内にキチンとこなして女と遊びに行くほうがずっといいからな。
お外で遊びな? まじ楽しいぞ?
918名前は開発中のものです。:2006/03/02(木) 21:30:25 ID:mDiMfB+6
>>917
俺にはWindowsXPたんがいるからいいもんね・・・
もうすぐもう一人増えるんだもんね・・・
919名前は開発中のものです。:2006/03/02(木) 21:50:15 ID:An/IP3MA
この会社辞めようと思ったソースコード#13
http://pc8.2ch.net/test/read.cgi/prog/1139744052/l50
920名前は開発中のものです。:2006/03/02(木) 22:26:24 ID:7PybzmE4
>>914
むしろ糞コードでも良いからそれが何十年も使える世界になって欲しい
921名前は開発中のものです。:2006/03/03(金) 10:12:47 ID:RMA/DLWO
>>909
え、いやほんとに教えてください・・・・サンプルでは英字しか無理でしたけど・・・
Irrlichtはやろうとしたけど・・・・でしたので
922名前は開発中のものです。:2006/03/03(金) 17:43:23 ID:Es3EQncu
基本的な2Dアクションゲームを話題になったタスクで組みたいんだけど
自キャラ、敵キャラはいいとして重力計算とか当たり判定はどこで行うの?
923名前は開発中のものです。:2006/03/03(金) 17:48:31 ID:mnIw+zDn
次スレ
924名前は開発中のものです。:2006/03/03(金) 18:07:00 ID:b9kujG94
犯罪とかのニュースのたびに怒りでどうしようもない
http://life7.2ch.net/test/read.cgi/jinsei/1140716130/l50
ここで偽善者がオナニー暴れしてます
925名前は開発中のものです。:2006/03/03(金) 20:40:36 ID:K58rYxW9
>>922
自キャラさんとか敵キャラさんとかが入ってるリストの中に
重力計算さんとか当たり判定さんとか本来実体のないものを
わざわざ実体のあるように見せかけていっしょにつっこむべきだと思う?
まぁ最初なんだからすきにしたらいい間違ってるのがわかったらその時なおせばいいよ
926名前は開発中のものです。:2006/03/03(金) 21:45:17 ID:0OTmGa8a
>いっしょにつっこむべきだと思う?

思う。
927名前は開発中のものです。:2006/03/03(金) 22:42:51 ID:o73IJu/M
関数をリストにつっこんでおけば放置しておいても1ループに一度は必ず実行される
ってのが基本的なタスクシステムのキモの一つなわけで
実体の有無(画面に表示されるかどうかって意味だよな?)はあまり関係ないんだな。

ただ、当たり判定や重力計算を独自のタスクで組むと、それを適用したいキャラを
リストからいちいち探さなくちゃいけないしあまり効率がいいとは言えない。
関数の内容によってリストを別けるとか解決策はいくらでもあるが
そこまでして使うものか?とも思う。
928名前は開発中のものです。:2006/03/03(金) 23:00:14 ID:Es3EQncu
>>925
欲張りだから最初から失敗が嫌
とか言っても一発で成功したこと一度もない・・・
コンパイルの度に”必ず”ひとつはエラー出す
タスクとしてリストにぶっ込みたいんだけど色々問題があって

>>927
「リストからいちいち探さなくちゃいけない」
この辺でずっと悩んでた
タスクリストの一番最初に入れるのはもちろん無理だし
一番最後に入れるとタスクリスト内のデータをまた最初から検索しなおさなくちゃならないから単純に処理2倍だし
各タスクの行動関数に組み込むと再利用性がうんこ
929名前は開発中のものです。:2006/03/03(金) 23:07:35 ID:LreP13W+
タスクリストに入れて問題があるんだったら入れなきゃいいだろ。
なんでタスクリストに入れたいの?

「タスク」とか「タスクリスト」の意味が曖昧なまま話しても無駄っぽいから
もっと実のある話にしたければ次スレ立てて
「タスクで組む」の意味を具体的にしてから話すことだね。
930名前は開発中のものです。:2006/03/03(金) 23:09:42 ID:fF4cU66H
タスクじゃなくてオブジェクトとして素直に考え方が楽そうだな…
重力計算クラスはどんな機能が必要で
外からはどんなインターフェースが必要なのか。
931名前は開発中のものです。:2006/03/03(金) 23:11:40 ID:o73IJu/M
>>928
実行順優先度とか設けてないの?
入れるなら最初か最後でしょ。
優先度ごとにリストを設けておけば総なめしなくても済むし
一本のリストで全てをまかなおうと考えない方がいいよ。
932名前は開発中のものです。:2006/03/03(金) 23:13:51 ID:YtzA4e+Q
>それを適用したいキャラをリストからいちいち探さなくちゃいけない
適応したい処理の対象のリストを、フレーム毎に作成すればいいんじゃね?
検索の約一兆倍スマートでクールだと思うよ??(当社調べ)
933名前は開発中のものです。:2006/03/04(土) 11:27:18 ID:N+C0gx8b
934名前は開発中のものです。:2006/03/04(土) 14:05:42 ID:ja9F3fLO
流れが読めないならROMってればいいと思うよ。
935名前は開発中のものです。:2006/03/05(日) 02:39:49 ID:UHXFHf4y
何度みても笑える。
936名前は開発中のものです。:2006/03/05(日) 05:38:38 ID:YPNEIoPd
笑いどころがどこかわからん。
プログラマのとこか?
937名前は開発中のものです。:2006/03/05(日) 12:16:19 ID:n3bvOOgL
2Dの当たり判定についでなんですが、
1pixelずつの移動であれば移動する場所の座標で当たり判定をして
ヒットしていれば移動しない、ヒットしていなければ1pixel進むでいいですよね。
けど、通常の3倍で進むような場合は3pixel進んだ場所の座標で当たり判定をして
ヒットしていれば移動しない、ヒットしていなければ3pixel進むではよろしくないです。
3pixelは進めなくても2pixelは進める可能性があるからですが、
こういう通常の3倍で進む場合は1pixel進む処理をx3してやるのが普通なんでしょうか?
それともほかに良い方法がありますか?
938名前は開発中のものです。:2006/03/05(日) 12:58:26 ID:5Th9ilrN
>>937
真っ当に考えれば、n pixel進むためには、
n 回ループで 1 pixel ずつ判定するしか方法はないと思われる。

状況によっては、先に n pixel進めてみて
移動不可だったら (n-1) pixelを試すという逆順のほうが効率がいいかも試練が。
939名前は開発中のものです。:2006/03/05(日) 12:58:30 ID:ZGr9k1wh
当たっていたら
何ピクセル埋まったかを計算してその分戻せば?
940名前は開発中のものです。:2006/03/05(日) 14:07:05 ID:cQK4mU/u
跳ね返る時はかなりいい加減でもごまかせるけど
ぴったり止まるなら>939が丁寧な方法で>938が簡易だな。
941名前は開発中のものです。:2006/03/05(日) 18:42:16 ID:n3bvOOgL
>>938-940 どうもです。
       >>939 まさにそれですね。
       ジャンプして天井にぶつかったり
       落下して地面に着地した時、
       キャラクターの移動速度を上げたときに
       挙動が変だったのがこれで直りそうです。thx。
942名前は開発中のものです。:2006/03/05(日) 20:55:44 ID:UHXFHf4y
>>936
いや全部。 仕事でプログラマとか実務側の方をやってると
全部がだいたいそのとおりなので笑える。

笑えないのは現在進行形の場合だな。
943名前は開発中のものです。:2006/03/05(日) 23:50:36 ID:VVgrQx5R
うむ
944名前は開発中のものです。:2006/03/07(火) 13:47:15 ID:/9MR8SBK
文字をゆっくり表示させようと思ってるんですが、SetTimer()で時間をとってくる方法しか思いつきません。他に方法はないのですか?
945名前は開発中のものです。:2006/03/07(火) 13:54:24 ID:ZvqJ1rtZ
なぜ他の方法を探そうと思ったのか、現状の方法でどのような問題があるのかを説明する方が先だろう。
946名前は開発中のものです。:2006/03/07(火) 14:05:02 ID:gwpzJjwD
timeGetTime
947名前は開発中のものです。:2006/03/07(火) 17:59:12 ID:FUu2poXA
本屋寄ったらエフェクト関連の本が二冊あった
けど買えなかったorz
948名前は開発中のものです。:2006/03/07(火) 20:37:37 ID:BkDgmlhw
マップ読み込みがわかんね・・・
縦,横,チップサイズ \n
番号,番号,番号,番号,番号 \n
番号,番号,番号……
とかなってるマップの読み込みをスマートにできないかな
暗号化とかもまた意味不明
949名前は開発中のものです。:2006/03/07(火) 21:07:51 ID:/Dd4UB8z
スマート?
とってもスマートなのだが。

暗号化?
ぐぐれよ
950里奈 ◆IQwhCnTrnE :2006/03/07(火) 21:37:19 ID:u/hyaZuL
>>948
それは私のよりスマートそう。
私のもっといい加減だもん。
951名前は開発中のものです。:2006/03/07(火) 21:40:39 ID:FUu2poXA
俺のよりスマート。
952名前は開発中のものです。:2006/03/07(火) 21:58:02 ID:BkDgmlhw
いやfgetcとかforとfscanfを組み合わせてるんだけどどうしても分岐が出てくるしこれは見てて嫌だなって
953名前は開発中のものです。:2006/03/07(火) 22:01:07 ID:P11agiDo
バイナリにしちゃえば?
954名前は開発中のものです。:2006/03/07(火) 22:14:57 ID:FUu2poXA
それだ
で次スレ
955名前は開発中のものです。:2006/03/07(火) 22:58:17 ID:BkDgmlhw
>>953
早速やってみた
変換ツール作りの段階でコンパイラにコンパイルエラー連射されると困る
956名前は開発中のものです。:2006/03/08(水) 01:38:07 ID:FOxUDukT
テキストファイルをバイナリに変換するのと
バイナリをテキストに変換するのを作るのに2時間かかった
マップ以前に今後について考える必要があるかも
957名前は開発中のものです。:2006/03/08(水) 09:37:07 ID: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);
958名前は開発中のものです。:2006/03/08(水) 10:00:00 ID:FOxUDukT
>>957
短いなぁ
ちょっとそっち関連の勉強でもしてみる
959名前は開発中のものです。:2006/03/08(水) 22:10:22 ID:/wiAUAS3
そして、とうとう彼はスクリプト世界から帰ってきませんでした。
960名前は開発中のものです。:2006/03/10(金) 23:11:01 ID:eoGMdw8P
ttp://dream.my-sv.net/upload/src/up0144.zip
タスク構築していろいろやってみたんだけど、デバッグ中にタスク削除辺りでエラーが出る
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を参照するとエラーが出る

長々長々とスマソ。ソースは「とりあえずやってみっか」的でかなり雑
961名前は開発中のものです。:2006/03/10(金) 23:25:25 ID:0u3ISKgK
>960
で、何だ?
「暇人の皆さん、このとりあえずやってみっか的ソースをデバッグしやがれ。」
って事か?
962名前は開発中のものです。:2006/03/10(金) 23:51:07 ID:6klj+UjH
963名前は開発中のものです。:2006/03/11(土) 00:34:44 ID:fYcMiC+y
>>960
(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;
  };
}
964960:2006/03/11(土) 00:49:40 ID:ojp9Bp1N
>>961-962
すまんかった。

>>963
おお、なるほど
オブジェクト側で何かやらかしてるのかと思ってたから
タスク実行ループは疑いもしなかった
実行できました。ありがとうございます
965名前は開発中のものです。:2006/03/11(土) 01:09:54 ID:xs4HFJgg
いいなあ、ロリロリの妹に手取り足取り教えてもらえて
966名前は開発中のものです。:2006/03/11(土) 03:07:50 ID:CNVjlctO
ソースレビューはする方もされる方も勉強になるかと。
967名前は開発中のものです。:2006/03/11(土) 04:58:54 ID:HaVUH+Mi
なんでもかんでもタスクタスクって、あなた達はVOWのファンなのですか?
968名前は開発中のものです。:2006/03/11(土) 05:18:19 ID: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]という余分なスペースを確保し、
追加分の変数のサイズだけ引いていくという方法でやっていますが面倒です。
969名前は開発中のものです。:2006/03/11(土) 08:29:22 ID:r0/M++6p
バージョンでも持てばいいじゃん
970名前は開発中のものです。:2006/03/11(土) 08:37:41 ID:/5hGWtyv
答えてやった奴にはお礼にエロ画像でも見せてやれよ
971名前は開発中のものです。:2006/03/11(土) 09:11:12 ID:czh0rJIG
>>968 まずは次スレを建てるといいよ。
972名前は開発中のものです。:2006/03/11(土) 13:21:52 ID:3b41TJWI
973名前は開発中のものです。:2006/03/11(土) 14:29:54 ID:OQA38ARh
オフセットじゃなくて名前でそれぞれのパラメタを取れるようにしたらどーなのよ?
プロパティシート?プロパティテーブル?プロパティセット?そんな感じのやつ。
それができないようなデータならreservedを設けるしかないな!
974名前は開発中のものです。:2006/03/11(土) 15:30:10 ID:CNVjlctO
チャンク使って、データ単位で分類わけするべし。
いま時だとXMLとかでもいいかもしれず。
975名前は開発中のものです。