2013-09-27 2 views
0

texture2d에 약간 문제가 있습니다. XNA에서 그려려고합니다. 기본적으로, 나는 파워 업 "재사용 대기 효과"가 진행 중입니다. 재사용 대기 시간이 감소함에 따라 부분적으로 그려야하는 질감이 있습니다. 예를 들어 10 %의 재사용 대기 시간에서 텍스처의 쿨 다운을 10 % 만 뽑았습니다 (하단). 20 %는 텍스처의 맨 아래에서 20 % 만 수행했습니다.원본 사각형을 사용하여 흔들린 텍스처

내가 겪고있는 문제는 텍스처를 그릴 때 채워지는대로 계속 흔들리는 문제입니다.

아래에서 ActiveSkillTexture은 내 미리로드 된 채우기 텍스처입니다. 크기는 완전히 채워진 그래픽의 크기입니다.
InterfaceDrawer.DrawSpriteBatch.Draw을 호출하는 메서드입니다.하지만 몇 가지 추가 작업을 미리 수행해야합니다. 모든 의도와 목적으로 SpriteBatch.Draw과 같습니다.
Scale은 제 스케일 인자이며 0과 1 사이의 부동 소수점입니다.
MyDest은이 텍스처가 그려야하는 위치 (평소와 같이 왼쪽 상단)에 대해 사전 계산 된 위치입니다.

여기에 코드 조각입니다 :

Rectangle NewBounds = ActiveSkillTexture.Bounds; 
float cooldown = GetCooldown(ActiveSkillId); 
if (cooldown > 0) //cooldown timer  
{ 
    //Code that calculated cooldown percent which I'm leaving out 

    if (percentdone != 1) //the percentage the cooldown is done 
    { 
     //code for fill-from bottom -- 

     float SubHeight = ActiveSkillTexture.Height * percentremaining; 
     float NewHeight = ActiveSkillTexture.Height * percentdone; 
     NewBounds.Y += (int) SubHeight; 
     NewBounds.Height = (int) NewHeight; 
     MyDest.Y += SubHeight * Scale; 
    } 
} 
if (ActiveSkillTexture != null) 
    InterfaceDrawer.Draw(SpriteBatch, ActiveSkillTexture, MyDest, NewBounds, Color, 0.0f, Vector2.Zero, Scale, SpriteEffects.None, 0.0f); 

당신이 그것을 볼 수 없습니다 알고 있지만, 기본적으로 출렁 거리는 움직임과 채우기로 이루어집니다. 목적지, newbounds 직사각형 등의 값을 인쇄 해 보았습니다. 그리고 그 모두가 지속적으로 증가하고 "흔들리는"것이 아닌 것처럼 보였습니다. 그래서 무슨 일이 일어나는지 잘 모르겠습니다. 흥미롭게도, 내가 위에서 채우면 그것은 일어나지 않습니다. 그러나 그 이유는 아마도 내가 그릴 때마다 목적지 위치를 변경하기 위해 수학을 수행 할 필요가 없기 때문입니다 (왜냐하면 매번 왼쪽 상단 모서리에서 그려야하기 때문입니다).

도움을 주시면 감사하겠습니다. 감사!

답변

0

spriteBatch.DrawVector2.Origin 매개 변수를 텍스처의 왼쪽 하단으로 설정하면 더 쉬울 것이라고 생각합니다. 당신은 단순히 이런 일에, 당신의 sourceRectangle.Height 증가 이런 식으로
: 대상의 위치를 ​​찾기 위해 그 쓸모없는 수학을하지 않고

sourceRectangle.Height = ActiveSkillTexture.Height * percentdone; 

.

관련 문제