ページ 11

キャラクターの動かし方について

Posted: 2011年3月23日(水) 09:28
by えん
今、マリオのようなアクションゲームを製作中なんですが、
コードをどのように組んでよいかわからず困っています。

作りたい内容なのですが、
①キャラクターを同時に二体操作する(1P,2Pという感じで)
②Y=FIELD_MAX_Yを地面とし、矢印キー左で左に、右で右に、上でジャンプする
③他のキャラクターとぶつかった際に、重ならないようにする(上に乗っかれる)
④上に乗っかっていた際、下のキャラがジャンプすると上のキャラも乗っかったまま動く
⑤他キャラの上に乗っかっている間もジャンプできる
といった感じです。

今①、②までは実現できたのですが、
③でつまづいています。

今まで考えたものとして、
1.キャラの四隅と他キャラの側面が重なったらその方向へ歩くフラグを消してみる
   →「重なる」という判定が1ドット分だったため、一度に5ドット動かすキャラ操作ではすり抜けてしまい失敗
2.キャラの四隅と他キャラの側面から内部5ドット分に当たり判定をつけ、最後に内部に食い込んでいる分だけ補正する
   →当たり判定がかぶるところが出てくる?(未実行)
のような感じになっています。

ソースコードですが、上の1から2へと書き換えている途中でごっちゃになっているので
あとで貼り付けようと思います。

どのように考えたらよいか、考え方を教えてください。

④、⑤は後で実装させようとしているものなので、お答えいただかなくても大丈夫です。
長文失礼しました。よろしくお願いいたします!

Re: キャラクターの動かし方について

Posted: 2011年3月23日(水) 11:31
by softya(ソフト屋)
キャラクタは同時に動かさなければプログラムの流れで見たときに、相手のキャラクタは静止した障害物とみなすことが出来ます。なので当たり判定後の処理は障害物と同じです。
あと、地面判定を座標で行うのではなく下に動けない状態と定義すれば良いのでは無いでしょうか?

[追記]
同時に動かないとは、1フレーム内にキャラクタAの行動→キャラクタBの行動と順序だって行動させることって意味です。

Re: キャラクターの動かし方について

Posted: 2011年3月23日(水) 15:00
by えん
なるほど、ありがとうございます!

ちなみに障害物の当たり判定ですが、
http://dixq.net/g/26.htmlのように作るのがいいのでしょうか

Re: キャラクターの動かし方について

Posted: 2011年3月23日(水) 15:04
by softya(ソフト屋)
えん さんが書きました:なるほど、ありがとうございます!

ちなみに障害物の当たり判定ですが、
http://dixq.net/g/26.htmlのように作るのがいいのでしょうか?
地形なら、それで良いと思いますがキャラクタ同士はつぎを参考にしてください。
「s11. 当たり判定。」
http://dixq.net/g/54.html

Re: キャラクターの動かし方について

Posted: 2011年3月23日(水) 19:43
by えん
ありがとうございます。
では、上から接触したか横から接触したかを調べたいときには
ぶつかったときのキャラクタの中心座標同士を結んだ線と、地面の角度から求めればいいですかね?
(キャラクターの当たり判定は四角にする予定なので)

Re: キャラクターの動かし方について

Posted: 2011年3月23日(水) 20:35
by softya(ソフト屋)
DXライブラリ本家のサンプルを参考にしてみてください。

「アクションサンプルプログラム」
http://homepage2.nifty.com/natupaji/DxL ... Sample.cpp
まず上下チェックして、そのあと左右のチェックです。

Re: キャラクターの動かし方について

Posted: 2011年3月23日(水) 22:46
by えん
何回も回答ありがとうございました!
参考にさせていただきます!