2014-07-07 2 views
1

안녕하세요.XNA 4.0 : 화면에 그려진 후 텍스트를 제거하는 방법은 무엇입니까?

나는 "Pass Complete!"라는 텍스트를 그리려고합니다. 이 코드 화면합니다 : 문 IF 적절한를 해고 않습니다

spriteBatch.DrawString(font, "PASS COMPLETE!", new Vector2(30, 130), Color.White);

합니다. 그러나 화면에서 텍스트를 제거하려면 어떻게해야합니까? 나는 여기서 어디로 가야하는지 전혀 모르겠다. 강사가 나를 구글에 대답 시키거나 교과서에서 찾길 바란다. 나는 내 XNA 교과서를 다 읽고 있었고 나는 그 텍스트를 삭제할 콘센트가 없음을 발견했다.

도움 주셔서 감사합니다.

업데이트 :

protected override void Draw(GameTime gameTime)

은 내가 IF 문이 여기에 포함되어있다. 기본적으로 p_Receiver와 충돌을 검사하고 bool이 체크 아웃하면 DrawString을 그립니다. 내가 다른 각도에서 이걸보아야 할까?

최종 :

는 내가 대답으로 다음과 그 전에 더 나은 일하고으로 앞서 갔다. :)

if (PassInfo == 3) { 
(timer code) 
(IF timer not "used up" then run the draw) 

지금은 유용합니다.

고맙습니다.

답변

0

많은 게임들이 그리기주기를 통해 매번 전체 창/화면을 다시 그립니다. 따라서 게임을 제거하는 해결책은 단순히 그리기를 멈추는 것뿐입니다.

즉, 조건이 이 아닌 경우은 더 이상 필요하지 않을 때 텍스트를 그립니다.

반면에 업데이트가 필요한 창/화면 부분 만 그리는 좀 더 복잡한 그리기 논리가있는 경우 텍스트가 포함 된 화면의 해당 부분을 다시 그리는 로직을 포함시켜야합니다 일단 더 이상 필요하지 않게됩니다.

+0

그런 다음 화면에서 블록을 구성하여 화면을 업데이트하고 그 위에 페인트해야합니까? Color.DarkGreen이라는 배경을 가지고 있기 때문에 충분히 간단합니다. – AriesTiger

+0

초급 수준의 XNA 앱이 화면의 일부분 만 다시 그리는 것은 아주 드문 일입니다. 앱이 드로 사이클마다 전체 화면을 다시 그릴 가능성이 훨씬 큽니다. SpriteBatch.DrawString (...) 호출에 중단 점을 두어이 방법을 확인 할 수 있습니까? 실제로 매번 다시 그려지는 경우, 간단한 대답은 그것을 제거하기 위해 그리기를 멈춰야한다는 것입니다. – lzcd

+0

루프에서 반복해서 다시 그려지는 것이 맞습니다. 그래서 내가 추측하고있는 다른 수표를 더해야합니까? 어쩌면 While 문? – AriesTiger

1

일부 매개 변수가있는 텍스트를 제네릭 목록에 추가하는 기능으로이 작업을 수행하고 있습니다. 그런 다음 목록에서 항목을 업데이트하고 그립니다. 의사 코드 :

function addText(text,position,duration) 
    texts.add(new t(text,position,duration)) 
end function 

function updateText() 
    for each t as text in texts.findall(where t.active) 
     t.duration -= 1 
     if t.duration < 0 then t.active = false 
    next 
end function 

function drawText() 
    for each t as text in texts.findall(where t.active) 
     //draw it 
    next 
end function 

이렇게하면 화면의 위치와 기간에 따라 텍스트를 무제한으로 추가 할 수 있습니다.