2014-02-27 2 views
0

XNA 프로그래밍의 새로운 기능이므로 문제가있을 것이라고 확신합니다.XNA - 그리기 빈도/새로 고침

내 문제는 : 나는 그것을 아주 분명 생각

Position.X += (float)Math.Cos(Angle) * Multiplier; 
Position.Y += (float)Math.Sin(Angle) * Multiplier; 

: 내 선수가 총에서 총알을 촬영 할 때, 나는 (내 무효 업데이트()에서)이 같은 위치 변화의 계산합니다. 모든 방향, 각도 등에 문제가 없습니다. 새로 고침하는 방법에 대해 궁금합니다. 을 자주 업데이트하십시오. 제 승수은 총알의 움직임을 원활하게하기 위해 1과 같아야합니다. 승수를 (예를 들어) 50으로 설정하면 내 총알이 50 * Cos/Sin 픽셀을 건너 뛰어 뛰어 넘습니다. 내 총알이 그와 같이 "뛰어"오를 때 2 개의 계산 된 총알 위치 사이에있는 많은 물체가 충돌을 피할 것입니다. 내 멀티 플라이어을 "1"로 설정하면 속도가 매우 느려집니다.

어떻게 개선할까요? 필요한가 아니면 내가 틀린가?

+0

당신은 당신의 각도를 증가 의미? 제 말은 승수가 걸음 걸이가 아니라 거리를 더 크게 만드는 것입니다. – joppiesaus

답변

0

FixedTimeStep을 Game.TargetElapsedTime Property으로 변경하면 Game.IsFixedTimeStep = true를 사용한다고 가정 할 수 있지만 너무 빠르지는 않을 것이므로 배수가 1보다 커야합니다. 빠른 속도로 충돌을 놓칠 수 있습니다.

사람들은 개체에서 광선을 캐스팅하고 개체 자체를 이동하기 전에 이러한 경로의 교차점을 감지하는 등의 다양한 방법으로이 문제를 해결합니다. 흥미로운 문제인데 많은 문제가 있습니다. 타임 스텝은 잊어 버리고 원하는 속도를 얻으려면 승수를 적당한 값으로 두십시오. 그러나 빠른 이동/작은 오브젝트 충돌 감지를 위해 StackOverflow/Web을 검색하십시오.

0

귀하의 업데이트 메도는해야는 다음과 같습니다

void Update(GameTime gameTime) 
{ 
    Position.X += (float)Math.Cos(Angle) * (float)gameTime.ElapsedGameTime.TotalMilliseconds; 
    Position.Y += (float)Math.Sin(Angle) * (float)gameTime.ElapsedGameTime.TotalMilliseconds; 
} 

당신은 다른 컴퓨터에서 동일한 게임 속도를 보관 ElapsedGameTime 작업을해야합니다. CPU가 Methode 업데이트를 호출하는 데 더 많은 권한을 가지고 있기 때문에 elapsedGameTime을 사용하지 않으면 하이 엔드 컴퓨터에서 게임 속도가 매우 빨라질 수 있습니다. (하이 엔드 컴퓨터에서 유닛의 실행 및 슛 (또는 무엇을해야하든간에) 빠른 수행)

재생 가능한 멀티 플레이어를 만들려면 gameTime도 사용해야합니다.

FixedTimeStep을 만지지 마세요.

- XNA 전화는 가능한 한 자주 업데이트 방법을 사용합니다 (하드웨어에 따라 ... 초당 최대 60 번, FixedTimeStep = true) !!

(플로트) gameTime.ElapsedGameTime.TotalMilliseconds -이 훨씬 당신이 당신의 변수 "각도"의 값을 감소해야 할 경우이 뭔가 주위 16.667

를 반환해야

관련 문제