2012-09-06 4 views
0

기본적으로 최대화 된 창 안에 800x600 게임을 중심으로 배치하고 싶습니다. 해상도가 1280x1024 인 경우 큰 테두리가 생기지 만 해상도가 800x600이면 전체 화면을 차지합니다.게임 크기를 창 크기보다 작게 설정하십시오.

이것은 초기화 방법에 있으며 게임 창을 고정 된 3D 테두리로 전체 화면으로 만듭니다. 클라이언트 영역은, 내가 버퍼를 다시 선호하는 설정을 시도 전체 화면

Form gameWindowForm = (Form)sys.Form.FromHandle(this.Window.Handle); 
gameWindowForm.FormBorderStyle = FormBorderStyle.Fixed3D; 
gameWindowForm.Text = ""; 
gameWindowForm.ControlBox = false; 
gameWindowForm.WindowState = sys.FormWindowState.Maximized; 

로 변경됩니다 크기, 뷰포트 및 DisplayMode를을 clientbounds. 아무리 크기를 조정하려고해도 읽기 전용이거나 아무 것도 변경하지 않기 때문에 둘 중 하나를 선택할 수 없습니다.

어떤 도움이 필요합니까?

답변

2

창 레이아웃을 사용자 정의하려면 official WinForms sample을 사용해보십시오. XNA에는 창 안의 클라이언트 영역을 엉망으로 만드는 "공식적인"방법이 없습니다. 당신이 원하는 모든 중심이 창에서 렌더링 지역의 경우

그러나, 당신은 너무처럼, 각 프레임의 시작 부분에 뷰포트를 설정하여 그렇게 할 수 있어야한다 :

int width = GraphicsDevice.PresentationParameters.BackBufferWidth; 
int height = GraphicsDevice.PresentationParameters.BackBufferHeight; 
GraphicsDevice.Viewport = new Viewport(
     width/2 - 800/2, height/2 - 600/2, 800, 600); 

창 크기가 너무 작아서 뷰포트가 화면 크기를 초과하면이 코드가 실패하므로 작은 뷰포트를 사용하여 확인하고 응답하는 것이 좋습니다.

GraphicsDevice.Clear은 뷰포트뿐 아니라 XNA 4.0에서 전체 백 버퍼를 지 웁니다 (대신에 사각형 대신 acro 뷰포트입니다).

+0

당신이 Game.Draw() 메소드의 시작이 코드를 추가 제안 있습니까? –

+0

예, 정확하게 :) –

1

나는 과거의 시뮬레이션 문제를 해결하기 위해 렌더링 타겟을 사용했습니다. 씬을 렌더링 타겟으로 렌더링 한 다음, 타겟을 스크린의 중앙으로 렌더링하십시오.

이렇게하면 뷰포트 주위에 '멋진'테두리를 쉽게 렌더링 할 수있게되었습니다.

렌더 이벤트/메소드에서 렌더 타겟을 렌더링 할 위치를 계산할 때 크기 조정을 처리 할 수 ​​있습니다.

렌더에 대한 몇 가지 추가 정보를 원하시면 : http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series3/Render_to_texture.php

관련 문제