前提・実現したいこと
C#とDxlibで2Dアクションゲームを作っています。
マップは二次元配列の地形と動きを持つオブジェクトで構成しています。
そこで、オブジェクトとして斜めの足場を実装しようとしました。
足場の描画は、画像を回転描画する関数でできたのですが、
あたっているかの判定はできているのですが、
その後の座標を補正する処理がうまくいきません。
現在使用している方法としては、
矩形を斜めに敷き詰めてそれぞれ当たり判定を行う、というものです。
しかし、現在のプログラムでは登るときに画面が揺れる、
プレイヤーがほとんど浮いていて不自然、といった問題があります。
イメージとしてはマリオの坂みたいな感じのを作成したいと思っています。
まず、矩形を斜めに敷き詰めてそれぞれ当たり判定を行う、という方法は適しているのか、
もしそうなら問題を解決するためにどのような改善が必要なのか
そうでないのなら別の方法や参考になるサイトを教えていただきたいです。
###ソースコード
C#
1private void ProcessCollision( Player player, List<Rectangle> rectangles ) 2{ 3 foreach ( Rectangle rect in rectangles ) 4 { 5 if ( IsCollidingTop( player.Rect, rect ) && player.Y < rect.Y ) 6 { 7 player.Y = rect.Y - PLAYER_HEIGHT; 8 } 9 } 10} 11 12private bool IsColliding( Rectangle rectangle1, Rectangle rectangle2 ) 13{ 14 int ydistance = Math.Abs((rectangle1.Y + rectangle1.Height / 2) - (rectangle2.Y + rectangle2.Height / 2)); 15 int xdistance = Math.Abs((rectangle1.X + rectangle1.Width / 2) - (rectangle2.X + rectangle2.Width / 2)); 16 int ydiv = rectangle1.Height / 2 + rectangle2.Height / 2; 17 int xdiv = rectangle1.Width / 2 + rectangle2.Width / 2; 18 19 return xdistance < xdiv && ydistance < ydiv; 20}
補足情報
プレイヤーの判定は矩形で行っています。
矩形同士が接触しているかの判定は以下のサイトにある方法で行っています。
https://qiita.com/hp0me/items/57f901e9b0babe1a320e
回答1件
あなたの回答
tips
プレビュー