2012-09-14 3 views
1

현재 내 게임에서는 일부 픽셀 감지를 사용하고 있습니다. 예를 들어 스프라이트의 경우 해당 위치의 픽셀을 검색합니다. 그래서 내가 완벽 위치를 얻을 수있는 다른 방법이 있다면 내가 알고 싶습니다이 값소수 자리를 사용하지 않고 스프라이트를 이동하는 방법

thePixel = new vector((float)Math.Round(position.X, 0), (float)Math.Round(position.Y, 0)); 
//thePixel = (52, 635) 

반올림해야

thePixel = new vector(position.X, position.Y); 
//thePixel = (52.2451, 635.2642) 

: 나는 그것을 이동하면 , 위치 값은 같은 일부 소수가 (10 진수가없는 의미) 반올림하지 않고. 움직이는 방법에 문제가 있습니까?

독서를위한 Thx, 당신이 도울 수 있기를 바랍니다.

답변

3

당신은 정말 당신의 가치를 반올림 할 필요가 주위에 얻을 수 없다,하지만 당신은 확장 메서드를 사용하여 코드가 훨씬 좋네요 할 수 있습니다 : 당신이 볼 수 있듯이

public static class Vector2Extensions 
{ 
    public static Vector2 Floor(this Vector2 vector) 
    { 
     return new Vector2((float)Math.Floor(vector.X), (float)Math.Floor(vector.Y)); 
    } 
} 

(개인적 선호를 .. FloorRound에 나는 또한 Ceiling 하나를) 다음

당신은 다음과 같이 사용할 수 있습니다 :

HandleCollision(position.Floor()); 

물론 픽셀 단위 충돌 감지를 수행하는 경우 충돌 계산은 정수 기반이어야합니다 (Vector2float으로 저장되지 않음). Point을 사용할 수 있습니다.

public static class Vector2Extensions 
{ 
    public static Point AsXnaPoint(this Vector2 v) 
    { 
     return new Point((int)v.X, (int)v.Y); 
    } 
} 

다음 :

HandleCollision(position.AsXNAPoint()); 

또는 가능성 : 평소처럼

HandleCollision(position.Floor().AsXNAPoint()); 
+0

, 들으 앤드류 내가 너무에 대한 확장 방법이 밝혀졌습니다. Btw, 당신은 나 자신의 비디오 게임을 만들고 싶었던 사람들의 일부입니다. (당신의 "어두운"게임과 당신이 나에게 준 팁). Thx again – Sharpnel

+0

안녕하세요. :) –

관련 문제