[過去ログ] ゲームプログラミング相談室【Part5】 (970レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
713
(2): 03/12/20 22:20 ID:myl7qCty(2/3) AAS
例えばスプライトを使ったシュ−ティングゲームの
敵がやられたときの爆発するエフェクトを再現したいんだけど、
「弾と敵機の当たり判定があり、
当たってれば爆発するエフェクトを起こす」というのは判ってる。
そして、当たり判定処理等と描画処理を一緒に書きたくない、
後で一斉に描画処理をしたい時はどんな処理をすれば良いの?
「エフェクトを起こす」という処理をスタックして順番に描画すれば良いと思うけど、
省4
714: 03/12/20 22:29 ID:Oe+zcBCM(1/2) AAS
>>713
いろいろやり方あると思うけど
それを考えるのが楽しいんだよねぇ。

>スタック出きる数に限界があるし
昔のPCならいざ知らず今のPCなら気にしなくていいんでは?

>チェインファイルをつかって動的にスタックしていっても動作が遅くなるし
これがよー分からん???
省1
715: 03/12/20 22:31 ID:woom4CTb(1) AAS
エフェクトの処理自体がランダムなわけではないのだから、
現在進行中のエフェクトカウントが一つあれば、途中経過をスタックする必要はない。
716: 03/12/20 22:32 ID:Oe+zcBCM(2/2) AAS
ドバッと最も多く必要となる分+α確保する

Q メモリがもったいないじゃん!
A 画像をメモリに確保することに比べれば僅かだ

Q 速度は遅くならないの?
A ならんならん(w
717: 03/12/20 22:42 ID:lyu5JuX1(1) AAS
>>713
>そして、当たり判定処理等と描画処理を一緒に書きたくない、
>後で一斉に描画処理をしたい時はどんな処理をすれば良いの?

当たったときに爆発オブジェクトを生成して、画面上のキャラを管理しているリストに追加。
んで、描画処理はリストを順にたどって追加されている各オブジェクトの描画処理を呼び
出すんで、自動的に爆発オブジェクトの描画処理も呼ばれる。

とかそんな感じでやってるよ。
省1
718: 03/12/20 23:24 ID:myl7qCty(3/3) AAS
サンクス。
自分はゲームプログラミング始めて間も無いので、
こういう初歩的な事が判ってないのが辛いです。
ほとんどがネットで調べて来た事なんで間違ってたり誤解してたりな事が多々あるんですが、
レスを参考にしてなんとかがんばってもうちょっと良い方法が無いか考えてみます。
719: 707 03/12/20 23:26 ID:rIwyOINw(3/3) AAS
>>709
dクス
>どうやら、小さいプロジェクトならあまり差はないようです。逆に大きいプロジェクトの場合、
>数%程度の増加は気にならないでしょう。
どうやら大丈夫そうですな
720: 03/12/22 19:09 ID:qsJtcoHW(1/4) AAS
DirectGraphicsでカメラの前進・後退・左右回転・上下回転をさせたいのですが
上下回転させると視点のzも変えなければ真上や真下を向けないのでzをマイナスしてyを+してます。
でもそうするとzが変わるので上や下を見たまま前進・後退すると移動量が減ってしまいます。
何か良い方法無いでしょうか。
721
(1): 03/12/22 19:11 ID:Q6Mm9LXS(1/3) AAS
>上下回転させると視点のzも変えなければ真上や真下を向けないので
カメラの中心位置が間違っているか、行列をかける順番の誤り。
722: 03/12/22 19:24 ID:qsJtcoHW(2/4) AAS
>>721
カメラの中心位置とはカメラ自体の座標でしょうか?
D3DXVECTOR3(0.0f, 2.0f, -10.0f)を初期位置として前進・後退のたびにzとxを
それぞれ向いてる角度のsin・cos分をプラスしていってます。
この方法に問題あるでしょうか?
723
(1): 03/12/22 20:06 ID:Q6Mm9LXS(2/3) AAS
カメラの中心を(0,0,0)の状態で回転をかけた後に、
移動させないと、当然正常に回転できない。
724: 03/12/22 21:47 ID:qsJtcoHW(3/4) AAS
>>723
レス遅くなって申し訳ありません。あと言葉足らずでしたが、
カメラの回転はカメラ位置は固定で視点を左右上下に移動させるものの事です。
D3DXMatrixLookAtLH()関数の第3引数の部分の計算です。
ですからカメラ位置(D3DXMatrixLookAtLH()の第2引数)は特に問題ないと思ったのですが、
全く別の事でしょうか?
725
(1): 03/12/22 22:50 ID:Q6Mm9LXS(3/3) AAS
カメラの方向を変更する処理は、
D3DXMatrixLookAtLHでいちいち視点の設定をするのではなく、
最初に作った行列に対して、回転行列等をかけて求めれば無駄な苦労無い。
726: 03/12/22 23:04 ID:qsJtcoHW(4/4) AAS
>>725
ふむふむ。そんな方法がありましたか。
ポリゴンの移動(D3DXMatrixRotation()関数)みたいな感覚をカメラでやれば良いのかな?
とりあえず今書いてる方法からその方法に変えてやってみます。
また疑問出たら質問に来ます。ありがとうございました。
727: 03/12/23 01:53 ID:Dt0+LLSw(1) AAS
何か役立ちそうなツールを作ろうかと思うんだけど、
ツールの概念って何ですか?
728: 03/12/23 02:41 ID:EO+0r1r5(1) AAS
何かの役に立つ物。
729
(10): 03/12/23 21:42 ID:5t0z2s2o(1/5) AAS
当たり判定のプログラムが書けん。
当たってるかどうかを判定するプログラムは分かるが、
当たっていたら前に進めないとか落ちないとか、そのへんが分からん。
普通、壁とかブロックとかの当たり判定ってどうやってるの。
730
(1): 03/12/23 21:43 ID:RhgrM0ZE(1) AAS
当たってたら直前の座標に戻すとか
731
(2): 729 03/12/23 22:02 ID:5t0z2s2o(2/5) AAS
でも、それだと移動速度が速いときに壁と自キャラとの間に空間が出てしまうので
もっといい方法ありませんか?
732: 729 03/12/23 22:02 ID:5t0z2s2o(3/5) AAS
あ、>>731>>730へのレスです。
733: 03/12/23 22:16 ID:E3QeV1IX(1) AAS
>>731
当たったんだから当たったときの場所に戻せはいいじゃん。
まあ、結構難しいけど。
まずは平面と直線の交点から地道にやってくしかないんじゃないのー。
俺もいい方法キボン。
734
(3): 03/12/23 22:17 ID:zvmW175r(1/2) AAS
>>729=731
1.一回の計算での移動距離に上限を付ける。
それ以上の距離を一フレームで移動する場合、
途中の点でも衝突判定をする。
2.移動ベクトルと物体との交点を探す。

>壁と自キャラとの間に空間が出てしまうので
というのを綺麗に処理するのなら、2.のベクトル方式かな。
735: 734 03/12/23 22:19 ID:zvmW175r(2/2) AAS
ゲームは作ったことないのだけど、
シミュレーションで衝突判定をしたことがある。
その時は三次元だったし、素直にベクトルで計算した。
ついでにいうと、
ベクトルを使う場合にも移動距離に上限がある方がいいらしい。
736: 729 03/12/23 22:25 ID:5t0z2s2o(4/5) AAS
>>734
スマソ、ベクトルとか、よく分からない。
教科書を読んでみたが、向きと長さを表すための数?
やっぱり、ゲームプログラミングでは、この辺の知識って重要なのでしょうか。
で、どういうプログラムを書いたらいいのですか?
737
(1): 03/12/23 22:37 ID:cUrB4sUv(1) AAS
壁ぴったりの位置に補正さればいいんじゃないの?
738: 729 03/12/23 22:45 ID:5t0z2s2o(5/5) AAS
>>737
それも考えてみたんですけど、うまくいきませんでした。
もしかして、こういう壁との当たり判定って王道はないの?
739: 03/12/23 22:53 ID:sS23uhhi(1) AAS
>それも考えてみたんですけど、うまくいきませんでした。
何がどううまくいかなかったのか書かずに、他人に理解してもらえると思っているのか?
740: 03/12/23 23:57 ID:yXOe9rbq(1) AAS
素直に>>734の1.の方法でいいじゃん。
無駄な計算が発生するけど、一番単純。
741: 03/12/24 00:53 ID:j0JfsxS8(1/2) AAS
妥協をしないんなら、
1.各オブジェクトが現在の速度で衝突なしで移動できる時間のうち、最も短い時間を算出
2.その時間分だけすべてのオブジェクトを移動
3.そのタイミングでの衝突に対するリアクション
これを、1フレーム分時間が進むまで繰り返す。
最近のマシンなら、これくらいまじめにやっても意外とゲームに支障が無いかもしれない。
742
(2): 03/12/24 01:13 ID:43TGeIPz(1/5) AAS
移動ベクトルとの交点を求めればいいだけなのに、
なんでわざわざ判定を細かくする必要があるの?
>妥協をしないんなら、
すさまじいほど妥協の固まり。
743: 03/12/24 01:29 ID:LQ2+WnwS(1) AAS
まじめに物理シミュをしたい場合なんかは必要だね。
単純な例だとビリヤードとか。
744
(1): 03/12/24 09:27 ID:4RuabZKq(1/2) AAS
速度が速いものの当り判定でいかに突き抜けないか?ってのは俺も悩んだ時があったよ。
結局、速度を10分の1にして、1サイクルで10回計算する方法で乗り切った。
そうすれば、直前に戻す場合、カベとの隙間は今までの10分の1になる。

ただ、計算量が多い場合はダメだが。
745: 744 03/12/24 09:33 ID:4RuabZKq(2/2) AAS
すまん、訂正。そういえば22回ぐらいにしたんだった。
計算回数でスピード調整できるから後で変更したんだった。
746
(1): 729 03/12/24 10:19 ID:URj7Zjll(1/4) AAS
>>742
俺ベクトルとか良く分からないんですけど
具体的に、どういうプログラムを書いたらいいんですか?
747: 03/12/24 10:52 ID:43TGeIPz(2/5) AAS
判定に使うベクトルは移動量でクリッピングされた一本の線。
それを使って障害物との交点を出すだけ。
748: 03/12/24 10:52 ID:MQdqvAgE(1) AAS
>>746 ぐぐれ。
もしくはジェムズ買え。ゲームのための数学本もたくさん出てるぞ。
749: 03/12/24 11:01 ID:43TGeIPz(3/5) AAS
中学で習う連立方程式で解けるから、数学本をみるほどでもないよ。
750: 03/12/24 11:33 ID:AfYGS6+9(1/4) AAS
分からんなら書けるわけねぇだろ アホ
751: 03/12/24 11:35 ID:22uuXHWk(1) AAS
判定を細かくしてるやつらに聞きたい
レーザーとかマシンガンとかそういうものの判定はどうしてるんだ?
もしかして1ドット単位で計算するのか?
あふぉらし。

中学生のときに二本の線の交点を求めただろ?
752: 03/12/24 13:13 ID:fy5Ig0wI(1) AAS
続きは「線分どうしの交点を求める」スレでどうぞ
753: 729 03/12/24 15:07 ID:URj7Zjll(2/4) AAS
いろいろ調べてみたが、全然分からん。
たのむ、プログラムを晒してくれ。
754: 03/12/24 15:23 ID:YiiTAHQu(1) AAS
いやだ
755
(1): 03/12/24 15:37 ID:wvuHL31/(1/2) AAS
当たっているかどうかの判定はできてるんでしょ?
原始的というかへぼい方法でいいなら、当たらなくなるまで逆方向にちょっとづつ戻す、ってのでどうさ。

というか、質問が変わっていて、線分の交差判定とかやりたいなら「線分交差」などの
単語でググル先生で調べるとか。単語を変えてみるとか。

もう少し、根気よく調べてはどうか?
756: 03/12/24 15:49 ID:43TGeIPz(4/5) AAS
ベクトルの説明もしたし、交点は連立方程式で解けるともいった。
分からないところなど残っていないはずなのだが、結局何が分からないの?
757: 729 03/12/24 15:53 ID:URj7Zjll(3/4) AAS
>>755
線分の交差判定のプログラムは見つけることが出来たが理解できなかった。
あきらめます。
758: 03/12/24 16:16 ID:j0JfsxS8(2/2) AAS
>>742
レスが遅くなりましたが。

> 移動ベクトルとの交点を求めればいいだけなのに、
> なんでわざわざ判定を細かくする必要があるの?
衝突によるリアクションで移動ベクトルが変化し、
元の移動ベクトルでは発生しなかった衝突が発生したり、
元の移動ベクトルでは発生していたはずの衝突が発生しなかったりするからです。
759: 03/12/24 16:39 ID:AfYGS6+9(2/4) AAS
ベクトルが分からない
二次連立方程式も解けない

そんなあなたに ハードコーディング
760: 03/12/24 16:52 ID:TlaAffnt(1/2) AAS
背伸びせずに自分の知識で実現できる物を作れ
761
(2): 729 03/12/24 16:58 ID:URj7Zjll(4/4) AAS
本当に、ベクトルが分からないとアクションゲーム作れないのですか?
マリオとか、普通のアクションゲームはおづいう処理やっているのですか。
762: 03/12/24 17:18 ID:wvuHL31/(2/2) AAS
>>729
もう少し前提条件を書きなよ。

マリオタイプなら背景の判定がセル単位になるからセルの位置にまで戻す。
不定形なら、
>当たらなくなるまで逆方向にちょっとづつ戻す
これでできないかい?

ベクトルは知らなくても、概念はいつの間にか使っているはず。
省1
763: 03/12/24 17:19 ID:JEYstVzG(1/2) AAS
>>761
別に無理じゃないかもしんないけど。
ベクトルだってわざわざ難しくするためにあるんじゃなくて
ベクトルとして表すと楽だから存在するわけだからベクトルを使わないで
やるっていったらそれだけの手間がいるよ。
2Dにしても3Dにしてもマリオは結構難しいかもよ。
(色々とフリーでマリオをパクッたようなゲームが落ちてるけどそのどれもが動きを表現しきれてないじゃん。)
省2
764: 03/12/24 17:22 ID:AfYGS6+9(3/4) AAS
知るかアホ
テメーはテメーの靴でも磨いてろ
765
(4): [ひおjぉいgjsx] 03/12/24 17:23 ID:kLqAWE7R(1) AAS
RPGの会話は1個1個関数にしておくのがベストなのかね
いちいちメインで書くとややこしくなるし
アドバイスお願いしますよ
766: 03/12/24 17:38 ID:JEYstVzG(2/2) AAS
>>765
スクリプトエンジンみたいなもの作れば楽にできるんじゃないですかね?
外部リンク[html]:white.sakura.ne.jp
外部リンク:www.epics.jp
767: 03/12/24 17:45 ID:43TGeIPz(5/5) AAS
メッセージはファイルなりリソースなりから読み出すようにする。
ごく小規模なプログラムでないのなら、プログラム中に直接記述すべきではない。
768: 脳内開発0.1% 03/12/24 17:48 ID:TlaAffnt(2/2) AAS
>>765
プログラミング言語を理解していてもシステムが組めるワケではない
正直ゲームを作るとか以前のレベルと思われ
デザパタ本でも買えばどうよ?
769
(1): 03/12/24 18:19 ID:viWWNVza(1) AAS
>>761
ベクトルを知らなくても作れるよ。
昔のベーマガの投稿で小学生や中学生はいたしね。

とりえあずベクトルを使わずに工夫してやってみれば?
770
(2): RPG開発中 03/12/24 20:43 ID:RGjm/FAD(1) AAS
>>765
私はイベント処理用にバイトコードベースの仮想マシン作って
会話もその中で処理しているよ。たとえば、1番のメッセージ
を表示、というイベントを作るなら

0x40 01
(0x40は後続1バイトをメッセージ番号とみなすメッセージ表示コード)

というバイト列をイベントコードとして持たせておく。
省10
771
(1): 03/12/24 23:37 ID:AfYGS6+9(4/4) AAS
>>770
会話の内容の部分はどこにある?
また別に コードと対応する配列を用意してるとか?
772
(2): RPG開発中 03/12/25 19:57 ID:NmX/fLFn(1) AAS
>>771

会話などの文字列データは、文字列テーブル(65536バイトのバッファ
を256分割して割り当て)に配置。イベントでは他にグラフィックも
出そうかと思っているけど、これはどうしたものか・・・。
773: 03/12/26 02:29 ID:rER+QHNY(1/2) AAS
>>772
すまん、まったく理解不能
774: 03/12/26 03:17 ID:4yV1zVt6(1) AAS
>>772
256byte(半角255文字)のストックが256個あるってこと?

俺もよー分からん。
775
(1): RPG開発中 03/12/26 07:04 ID:xfqL31qs(1/2) AAS
いや、だから65536バイトのバッファを取っておいてそれを
256分割してポインタに分配しているということ

/* 文字列テーブル用バッファ確保 */
g_lpStringTable = (char *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 256 * 256);

/* 文字列テーブル用バッファを分配 */
for (i = 0;i < 256;i++) {
g_alpszString[i] = g_lpStringTable + i * 256;
省2
776
(1): 03/12/26 07:40 ID:/X8b3kq4(1) AAS
>>775
文字通りバッファ(シーン毎にファイルから読み込んでスプールしておく?)
なのは置いておいて、>>770が聞いてるのは実データの格納場所じゃなかろうか。
かなり好意的な解釈だが。
777: RPG開発中 03/12/26 08:09 ID:xfqL31qs(2/2) AAS
>>776
今は実データの場所は、各種グラフィックやマップ・文字列、
イベント、敵などの各種データなどを収めたシナリオファイル
内だね。最初にこのシナリオファイルを読み込んで、その中の
文字列をバッファに格納しておく。

まあ、文字列はプログラムの実行中にバッファにあればよい
から、別にコードで設定しようが、ネットから読み込もうが
省1
778
(1): 03/12/26 11:30 ID:FaDIMQyf(1/2) AAS
質問 (。・_・。)ノ

DirectPlayの利点が良くわからん。Socketで独自AP層実装するのに比べて何が良いの?
779
(1): 03/12/26 13:09 ID:UokTH8Xi(1) AAS
それがサクっとできる人には無用の長物かと。
780: 03/12/26 13:39 ID:FaDIMQyf(2/2) AAS
>>779
ありがd
781: 03/12/26 14:10 ID:rER+QHNY(2/2) AAS
>>RPG開発中
で、それが >>765 に対するアドバイスなのか?
782: 03/12/26 18:45 ID:njogeIUI(1) AAS
>>778
WindowsやUnixに強度に依存させないために用意されてるんじゃないの?
DirectXにさえ対応していれば、BSDソケットをサポートしてない環境でも開発できるように。
もちろん、事実上そんなプラットフォームは存在しないんだけど
783: 03/12/27 09:57 ID:otsUTq2D(1) AAS
ワロタ
784: 03/12/27 10:07 ID:bl7gErOG(1) AAS
XBOX...
785: 03/12/27 11:10 ID:xG/hPzox(1) AAS
>>769
小学生でもベクトルと言う言葉を知らなくても概念的なものは
カンのようなもので理解してたと思う
そのあたりは算数、数学のセンスなのかもしれない
ちょうど方程式と概念的には変わらない「○+3=5 さて○には何が入る?」
っていう問題が小学校の算数ですでに出るような、そんな感じ
786: [hこpれkごpkspzkj] 03/12/27 14:04 ID:/LeFILZK(1) AAS
みなさん聞いてください 
ロールプレイングで敵と味方が戦って敵か味方のHPが0になったら
終了させたいのだが これはクラスを使って処理させたほうが賢明なのだろうか?
皆さんのこういったときどんなことをするのですか? ぜひ極意を教えてくれたらなぁ
と思います

駄文ですまん
787: 03/12/27 14:10 ID:3jGoR22p(1) AAS
あああああああああはやめたの?

786 名前:名前は開発中のものです。[hこpれkごpkspzkj] 投稿日:03/12/27 14:04 ID:/LeFILZK
みなさん聞いてください 
788
(4): 03/12/28 17:40 ID:bDUHUyQ0(1/2) AAS
dairectinputでキーを押している間○○の処理をする・・
ってなことできるんでしょうかもしあるんだったら教えてください。
おねがいします。
789
(1): 03/12/28 19:17 ID:xJqaw/Og(1) AAS
もう少し質問をわかりやすくお願いします。
790
(1): 03/12/28 19:53 ID:VT+x31QU(1) AAS
>>788
メインループで

キーチェック()
if(キーが押されている) 処理()
791
(2): 03/12/28 21:02 ID:bDUHUyQ0(2/2) AAS
>>789
>>790
すいませんわかりにくくて、
例えば

キーチェック()
if(キーが押されている)処理()だと
キーを連打してるみたいになると思うんですが
省7
792: 03/12/28 21:42 ID:cQ9iWriQ(1) AAS
スレッドを作ればいくらでもできるだろ。
793: 03/12/28 22:12 ID:HAEX+AYe(1) AAS
>>791
while(キーチェック() == 押されてる){
 やりたい処理()
}

これだとそれっぽいけど、
キーをチェックする間隔がやりたい処理に依存するよ。
1-
あと 177 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.025s