今、マリオのようなアクションゲームを製作中なんですが、
コードをどのように組んでよいかわからず困っています。
作りたい内容なのですが、
①キャラクターを同時に二体操作する(1P,2Pという感じで)
②Y=FIELD_MAX_Yを地面とし、矢印キー左で左に、右で右に、上でジャンプする
③他のキャラクターとぶつかった際に、重ならないようにする(上に乗っかれる)
④上に乗っかっていた際、下のキャラがジャンプすると上のキャラも乗っかったまま動く
⑤他キャラの上に乗っかっている間もジャンプできる
といった感じです。
今①、②までは実現できたのですが、
③でつまづいています。
今まで考えたものとして、
1.キャラの四隅と他キャラの側面が重なったらその方向へ歩くフラグを消してみる
→「重なる」という判定が1ドット分だったため、一度に5ドット動かすキャラ操作ではすり抜けてしまい失敗
2.キャラの四隅と他キャラの側面から内部5ドット分に当たり判定をつけ、最後に内部に食い込んでいる分だけ補正する
→当たり判定がかぶるところが出てくる?(未実行)
のような感じになっています。
ソースコードですが、上の1から2へと書き換えている途中でごっちゃになっているので
あとで貼り付けようと思います。
どのように考えたらよいか、考え方を教えてください。
④、⑤は後で実装させようとしているものなので、お答えいただかなくても大丈夫です。
長文失礼しました。よろしくお願いいたします!
キャラクターの動かし方について
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: キャラクターの動かし方について
キャラクタは同時に動かさなければプログラムの流れで見たときに、相手のキャラクタは静止した障害物とみなすことが出来ます。なので当たり判定後の処理は障害物と同じです。
あと、地面判定を座標で行うのではなく下に動けない状態と定義すれば良いのでは無いでしょうか?
[追記]
同時に動かないとは、1フレーム内にキャラクタAの行動→キャラクタBの行動と順序だって行動させることって意味です。
あと、地面判定を座標で行うのではなく下に動けない状態と定義すれば良いのでは無いでしょうか?
[追記]
同時に動かないとは、1フレーム内にキャラクタAの行動→キャラクタBの行動と順序だって行動させることって意味です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: キャラクターの動かし方について
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
えん
Re: キャラクターの動かし方について
ありがとうございます。
では、上から接触したか横から接触したかを調べたいときには
ぶつかったときのキャラクタの中心座標同士を結んだ線と、地面の角度から求めればいいですかね?
(キャラクターの当たり判定は四角にする予定なので)
では、上から接触したか横から接触したかを調べたいときには
ぶつかったときのキャラクタの中心座標同士を結んだ線と、地面の角度から求めればいいですかね?
(キャラクターの当たり判定は四角にする予定なので)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: キャラクターの動かし方について
DXライブラリ本家のサンプルを参考にしてみてください。
「アクションサンプルプログラム」
http://homepage2.nifty.com/natupaji/DxL ... Sample.cpp
まず上下チェックして、そのあと左右のチェックです。
「アクションサンプルプログラム」
http://homepage2.nifty.com/natupaji/DxL ... Sample.cpp
まず上下チェックして、そのあと左右のチェックです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。