teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

質問内容の修正

2021/10/24 02:11

投稿

Nauclhlt
Nauclhlt

スコア24

title CHANGED
File without changes
body CHANGED
@@ -4,18 +4,44 @@
4
4
  マップは二次元配列の地形と動きを持つオブジェクトで構成しています。
5
5
  そこで、オブジェクトとして斜めの足場を実装しようとしました。
6
6
  足場の描画は、画像を回転描画する関数でできたのですが、
7
+ あたっているかの判定はできているのですが、
7
- 当たり判定がうまくいきません。
8
+ その後の座標を補正する処理がうまくいきません。
8
9
  現在使用している方法としては、
9
10
  矩形を斜めに敷き詰めてそれぞれ当たり判定を行う、というものです。
10
11
  しかし、現在のプログラムでは登るときに画面が揺れる、
11
12
  プレイヤーがほとんど浮いていて不自然、といった問題があります。
12
13
  イメージとしてはマリオの坂みたいな感じのを作成したいと思っています。
13
14
 
15
+
14
16
  まず、矩形を斜めに敷き詰めてそれぞれ当たり判定を行う、という方法は適しているのか、
15
17
  もしそうなら問題を解決するためにどのような改善が必要なのか
16
18
  そうでないのなら別の方法や参考になるサイトを教えていただきたいです。
17
19
 
20
+ ###ソースコード
21
+ ```C#
22
+ private void ProcessCollision( Player player, List<Rectangle> rectangles )
23
+ {
24
+ foreach ( Rectangle rect in rectangles )
25
+ {
26
+ if ( IsCollidingTop( player.Rect, rect ) && player.Y < rect.Y )
27
+ {
28
+ player.Y = rect.Y - PLAYER_HEIGHT;
29
+ }
30
+ }
31
+ }
18
32
 
33
+ private bool IsColliding( Rectangle rectangle1, Rectangle rectangle2 )
34
+ {
35
+ int ydistance = Math.Abs((rectangle1.Y + rectangle1.Height / 2) - (rectangle2.Y + rectangle2.Height / 2));
36
+ int xdistance = Math.Abs((rectangle1.X + rectangle1.Width / 2) - (rectangle2.X + rectangle2.Width / 2));
37
+ int ydiv = rectangle1.Height / 2 + rectangle2.Height / 2;
38
+ int xdiv = rectangle1.Width / 2 + rectangle2.Width / 2;
39
+
40
+ return xdistance < xdiv && ydistance < ydiv;
41
+ }
42
+ ```
43
+
44
+
19
45
  ### 補足情報
20
46
  プレイヤーの判定は矩形で行っています。
21
47
  矩形同士が接触しているかの判定は以下のサイトにある方法で行っています。