게임 내 메뉴의 경우 화면에 한 번만 그립니다. 그런 다음 더러운 것으로 판단되면 다시 그립니다. 이것은 사용자가 다시 그리기를 유발해야하는 작업을 수행 할 때마다 true로 설정된 부울을 통해 처리 된 다음 그리기 루프는 메뉴를 그리기 전에 해당 값을 검사합니다. 이 논리는 3.1에서 완벽하게 작동했지만 4.0에서는 메뉴가 깜박이며 (1 프레임에 그려짐) 다시 그리기 전까지 자주색 화면이 표시됩니다.XNA 3.1에서 4.0은 상수 다시 그리기가 필요하거나 자주색 화면을 표시합니다
아래의 문제를 보여주기 위해 4.0에서 매우 간단한 테스트 게임을 만들었습니다. 화면이 자주색으로 보입니다. 줄 설정 _isDirty를 false로 제거하면 수레 국화가 파란색 배경으로 표시됩니다.
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
bool _isDirty = true;
public Game1()
{
graphics = new GraphicsDeviceManager(this);
}
protected override void Draw(GameTime gameTime)
{
if (_isDirty)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
_isDirty = false;
}
base.Draw(gameTime);
}
}
어떻게하면 XNA 3.1에서 동작을 얻을 수 있습니까? 여러 사람들이 PreserveContents에 대해 언급 한 것을 보았습니다.하지만 잘못 적용하지 않는 한 4.0에서는 효과가없는 것 같습니다.
이Update
BeginDraw
Draw
EndDraw
EndDraw
의 기본 구현은 궁극적으로 GraphicsDevice.Present
를 호출
Perfect! Draw의 내부 동작을 자세히 설명하는 시간을내어 주셔서 감사합니다. –
참고 : [여기에서] (http://stackoverflow.com/a/16910684/165500)를 발견 했으므로 XNA는 'Present'중에 실제로 초기화되지 않은 버퍼 (진한 보라색으로 지워짐)를 적극적으로 표시하므로, 깜박임에 대한 나의 대답은 잘못되었습니다. 해결책은 여전히 동일하지만. (펜티의 [대답] (http://stackoverflow.com/a/6283242/165500) 여기에 메커니즘에 대한 자세한 내용이 있지만, 나는 그것을 쇠망아지와 반사 시켜서는 안된다. 적절한 API를 사용하는 것이 훨씬 현명하다. , 내 대답 당) –
"_isDirty '_isDirty'이름이 현재 컨텍스트에 존재하지 않습니다. '라는 오류가 발생합니다. XNA 4.0 사용하고이 메서드는 Game1 클래스에 넣습니다. 어떤 아이디어? – Xonatron