2Dアクションゲームにおける重力の実装について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
刀流
記事: 5
登録日時: 1ヶ月前

2Dアクションゲームにおける重力の実装について

#1

投稿記事 by 刀流 » 4日前

2Dアクションゲームにおける重力の実装に関して質問があります。

重力の実装と、地面に底部が当たっているときは重力を付加せずに立っている状態にするというところまでは、
int型のマップの二重配列にdouble型のプレイヤーy座標(int型のプレイヤーx座標)をマップの一チップのサイズ(32.0000)で割って小数点以下を切り捨てた値を使うことで実装出来たのですが、
その判定の間隔が開きすぎているようで、y座標の増加量(落下量)が大きいときにプレイヤーキャラクターがマップに食い込んでしまったりする事態が発生しています。

そこで、マップとの当たり判定をなるべく迅速にするなどして、この問題を解決する方法はありませんか?
必要であればコードをお見せしますのでその場合は提言をお願い致します。

Math

Re: 2Dアクションゲームにおける重力の実装について

#2

投稿記事 by Math » 4日前

食い込んで 動けなくなるときは直前の状態に戻すいうような場合があった気がするけどやはりコードを提示していただかないと分からないとおもいますね。

アバター
usao
記事: 1529
登録日時: 6年前

Re: 2Dアクションゲームにおける重力の実装について

#3

投稿記事 by usao » 3日前

「キャラクターを位置Aから位置Bに移動させようという際には,その経路を通過しても良いか否かの判定を行い,
ルール的に(経路上に地面とか壁とかがあって)位置Bまで移動させてはいけないのであれば,
ルール的に妥当な代替位置C(地面や壁の手前)にキャラクターを移動させることにする」

…的な形の処理にすればよいのではないでしょうか.


> 地面に底部が当たっているときは重力を付加せずに

みたいな手段で「地面に立っているから → 特殊ルールとして今は重力なし → 結果として今の位置に留まる」とするのではなくて,
「放っておいても重力の影響で下に移動しようとする → そこに移動してよいか?(→地面があるからダメ) → 結果として代替移動先は現在の位置と同一になった」
とする.


それはそれとして,

> y座標の増加量(落下量)が大きいときに...

の原因が,移動先たる位置Bだけを判定していることにあるならば,簡単にできる方法としては
・移動量(位置A→位置B)を,(十分に短い)N個の移動量に分割して判定を行う.
とかすればとりあえず改善するかもしれません.

刀流
記事: 5
登録日時: 1ヶ月前

Re: 2Dアクションゲームにおける重力の実装について

#4

投稿記事 by 刀流 » 1日前

お二方ともありがとうございます、めり込んだことがわかったとき地面の上まで座標を戻す、という考え方に変えたことで無事に解決しました!
ソースコードがないと判断しかねるということでしたので、次にこの掲示板に投稿するときからはソースコードを提示した上で質問をするように心がけようと思います。
返信が遅れて申し訳ありませんでした。

返信

“C言語何でも質問掲示板” へ戻る