[過去ログ] ゲームプログラミング相談室【Part5】 (970レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
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(キーチェック() == 押されてる){
やりたい処理()
}
これだとそれっぽいけど、
キーをチェックする間隔がやりたい処理に依存するよ。
794(3): 03/12/29 00:31 ID:FUYmq8vt(1/2) AAS
ゲームならメインループをまわしておくんだろうから
前回のキー状態を保存しておいて、押された・押されたまま・離されたを
チェックするのがいいと思う。
char key押された;
char key押されっぱなし;
キーチェック() {
if (key押された = キー状態)
省2
795: 794 03/12/29 00:36 ID:FUYmq8vt(2/2) AAS
途中で書き込んでしまった・・・。
char key押された;
char key押されっぱなし;
キーチェック() {
if (key押された == キー状態) {
key押されっぱなし = キー状態;
} else {
省13
796: 788 03/12/29 00:49 ID:EhxFp05R(1/3) AAS
>>794
参考になります。ありがとうございました。
797(1): 788 03/12/29 01:09 ID:EhxFp05R(2/3) AAS
>>794
またまたすみません。
上のプログラム参考にして考えてみたのですが
キーが離れたときの判定の仕方はどうすればいいのでしょうか?
798: 03/12/29 02:10 ID:hxW8tM+Y(1) AAS
//宣言
BOOL PushKey[256];
//Set
WM_KEYDOWN:PushKey[wParam]=TRUE;break;
WM_KEYUP:PushKey[wParam]=FALSE;break;
//条件
if(PushKey[VK_何たら]){
省2
799: 03/12/29 02:11 ID:9w54kjof(1) AAS
一つ前の状態を覚えておいて前回が押しで今回が離しなら条件成立。
でいいんでないかい?
っていうかこの状態ですでに聞きまくりだと、後で困るよ。
聞く前にまず何通りかの方法を自分で考えてみたほうがいい。
800: 788 03/12/29 02:40 ID:EhxFp05R(3/3) AAS
そういうやり方があったんですか。さっそくやってみますね。
色々ご指導ありがとうございましたー。
801: 03/12/29 10:35 ID:Vxcs8OWB(1) AAS
ON
___| ̄ ̄ ̄|__
OFF
てな感じで、紙に書いてどんなタイミングだと、
「押した瞬間」や「離した瞬間」と判断できるか、シミュレートしてみるといいよ
802(1): 03/12/29 11:56 ID:7K1ivY4a(1/2) AAS
状態用意しなくても
GetAsyncKeyStateでいいやん
803(1): 03/12/29 17:02 ID:18lQqtmb(1) AAS
>802
え?状態用意しなくても過去のキー情報か離した瞬間を検知するものがあるん?
804: 03/12/29 17:12 ID:gqFMSN3K(1/2) AAS
GetKeyboardStateもいいよね〜
805(1): 03/12/29 17:40 ID:7K1ivY4a(2/2) AAS
>>803
要件は「押している間」だけだろ?
その瞬間を検知する必要があるわけではない。
さらに>>791とか見てもキー押下イベントを受け取りたいわけじゃなくて
状態をポーリングしてるんだからKeyState系のAPIだけで十分。
上下前次1-新書関写板覧索設栞歴
あと 165 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.025s