나는 스프라이트가 Player
입니다.XNA/Monogame : Platformer Jumping Physics and Collider 문제
_position += (_direction * _velocity) * (float)gameTime.ElapsedGameTime.TotalSeconds;
경우 _position
, _direction
및 _velocity
는 Vector2
들입니다 : 나는 Player
의 위치를 다음과 같은 방법을 업데이트합니다.
나는 콜 리더의 위치와 크기가 주어진 단순한 사각형 (BoundingBox
)을 생성하는 간단한 충돌기 (BoxCollider
)를 가지고 있습니다.
Initialize()
에서 나는 List<BoxCollider>
을 새로 만들고 레벨에 대한 충돌기로 채 웁니다.
Update()
에 나는 목록을 Player
으로 전달하여 충돌을 확인합니다.
충돌 검사 방법 :
public void CheckPlatformCollision(List<BoxCollider> colliders, GameTime gameTime)
{
var nextPosition = _position + (_direction * _velocity) * (float)gameTime.ElapsedGameTime.TotalSeconds;
Rectangle playerCollider = new Rectangle((int)nextPosition.X, (int)nextPosition.Y, BoundingBox.Width, BoundingBox.Height);
foreach(BoxCollider collider in colliders)
{
if(playerCollider.Intersects(collider.BoundingBox))
{
nextPosition = _position;
}
}
Position = nextPosition;
}
는 지금, 나는 중력을 구현하기 위해 노력했습니다 모든 방법이 실패했습니다.
Player
이 너무 높은 값에서 떨어지면 이
Player
에서 너무 멀리 떨어져서 공중에 갇혀있게됩니다.
가로 충돌 문제도 비슷합니다. 문제는 비슷합니다. Player
이 너무 빨리 멈추고 사이에 공백이 있습니다. 때로는 Player
이 충돌 자의 측면에 붙어 있습니다.
내가 알고 싶은 것입니다 :
가 어떻게 제대로 _position
, _direction
및 _velocity
점프 중력 &을 구현합니까? 충돌을 수평 및 수직으로 올바르게 처리하는 방법은 무엇입니까? 당신이 _position
를 업데이트하기 직전에
아마도 도움이 될 것입니다. http://gamedev.stackexchange.com/questions/104954/2d-collision-detection-xna-c – vyrp