0
충돌 감지 기능이 작동하지만 어떤 이유로 플레이어가 지상 1 프레임을 소개 한 다음 다음 프레임에서 해당 신호로 점프 한 다음 예상대로 떨어지는 것으로 보입니다.충돌 감지 수신 거부 문제 C#
코드 내가 예를 들어 단지 Y
방향을 사용하여 충돌 감지
void DoCollisions()
{
onGround = false;
Position.Y += Velocity.Y;
Vector2 tileCollision = GetTileCollision();
if (tileCollision.X != -1 || tileCollision.Y != -1)
{
onGround = true;
Vector2 collisionDepth = CollisionRectangle.DepthIntersection(
new Rectangle(
tileCollision.X * World.tileEngine.TileWidth,
tileCollision.Y * World.tileEngine.TileHeight,
World.tileEngine.TileWidth,
World.tileEngine.TileHeight
)
);
Position.Y -= Velocity.Y;
Velocity.Y = 0;
Position.Y += collisionDepth.Y;
}
Position.X += Velocity.X;
tileCollision = GetTileCollision();
if (tileCollision.X != -1 || tileCollision.Y != -1)
{
Vector2 collisionDepth = CollisionRectangle.DepthIntersection(
new Rectangle(
tileCollision.X * World.tileEngine.TileWidth,
tileCollision.Y * World.tileEngine.TileHeight,
World.tileEngine.TileWidth,
World.tileEngine.TileHeight
)
);
Position.X -= Velocity.X;
Velocity.X = 0;
Position.X += collisionDepth.X;
}
}
Vector2 GetTileCollision()
{
int topLeftTileX = (int)(CollisionRectangle.TopLeft.X/World.tileEngine.TileWidth);
int topLeftTileY = (int)(CollisionRectangle.TopLeft.Y/World.tileEngine.TileHeight);
int BottomRightTileX = (int)(CollisionRectangle.DownRight.X/World.tileEngine.TileWidth);
int BottomRightTileY = (int)(CollisionRectangle.DownRight.Y/World.tileEngine.TileHeight);
for (int i = topLeftTileX; i <= BottomRightTileX; i++)
{
for (int j = topLeftTileY; j <= BottomRightTileY; j++)
{
if (World.tileEngine.TileIsSolid(i, j))
{
return new Vector2(i,j);
}
}
}
return new Vector2(-1,-1);
}