2013-03-03 1 views
2

저는 HTML5, 캔버스 및 WinJS를 사용하여 Windows 8 용 게임을 만들고 있습니다. 게임은 거의 완료되었고 모든 것이 작동합니다. 그러나 나는 그래픽에 대해 이야기하고 있으며 다른 해상도에 대한 지원을 구현 한 방식에 대해 우려하기 시작했습니다. 이 프로젝트를 시작할 당시에는 캔버스와 관련이 없지만 해상도를 처리하는 방법에 대한 많은 정보를 읽었습니다. 나는 이런 식으로 뭔가를 구현 결국 :Windows 8 WinJS 게임에서 해상도를 처리하는 방법은 무엇입니까?

if (window.innerWidth >= 2560 && window.innerHeight >= 1440) {   //Full 2560x1440(16:9)/Letterbox 2560x1600(16:10) 
    canvas.width = 2560; 
    canvas.height = 1440; 
} else if (window.innerWidth >= 1920 && window.innerHeight >= 1080) { //Full 1920x1080(16:9)/Letterbox 1920x1200(16:10) 
    canvas.width = 1920; 
    canvas.height = 1080; 
} else if (window.innerWidth >= 1600 && window.innerHeight >= 900) {  //Full 1600x900(16:9)/Border 1680x1050(16:10) 
    canvas.width = 1600; 
    canvas.height = 900; 
} else if (window.innerWidth >= 1360 && window.innerHeight >= 768) {  //Full 1366x768(16:9)/Border 1440x900 (16:10)/Cut 1360x768(<16:9) 
    canvas.width = 1366; 
    canvas.height = 768; 
} else if (window.innerWidth >= 1280 && window.innerHeight >= 720) {  //Full 1280x720(16:9)/Letterbox 1280x768(<16:9)/Letterbox 1280x800(16:10)/Letterbox 1280x1024(5:4) 
    canvas.width = 1280; 
    canvas.height = 720; 
} else {                 //Letterbox 1024x768(4:3) 
    canvas.width = 1024; 
    canvas.height = 575; 
} 

pixelScale = canvas.height/768; 
assetScale = canvas.height; 

그것이 (화면 비율이 다른 편지 복싱으로) 주어진 해상도에 캔버스를위한 최적의 크기를 발견 한 뒤에 기본 아이디어. 그런 다음 assetScale이 정확한 크기의 비트 맵 (예 : images/1080/myimage.png)을로드하기위한 PreloadJS의 매니페스트에있는 모든 이미지에 적용되며 pixelScale은 1366x768의 작업 해상도에서 운영중인 이미지로 좌표를 조정하는 데 사용됩니다 다른 해상도에서는 올바르게 배치됩니다.)

그러나 이것이 실제로 처리하기에 가장 좋고 올바른 방법인지 그리고 과도하게 복잡하게 만들지는 모르겠다. 메뉴 요소의 크기 조정을 돕기 위해 본문 요소에 클래스를 추가 한 결과, VS2012의 Blend에서 높은 DPI 장치 (예 : 1920x1080 @ 140 %)가 1080이 아닌 768로 해상도를 선택한다는 사실을 갑자기 알아 챘습니다. 높은 DPI 장치에 대한 성능 저하가 있습니까? 이 문제를 별도로 고려해야합니까? 그렇다면 어떻게해야합니까? 아니면 방금 무시한 것입니까?

다른 캔버스 요소를 고해상도로 렌더링 한 다음 전체 캔버스 요소를 축소 (다시 비주얼 화) 한 다음 WinJS가 "-100", " -140 "및"-180 "(캔버스/PreloadJS가 아닌 인라인/CSS 이미지에서만 작동합니다).

누군가가 이것을 처리하는 방법의 올바른 방향을 가르쳐 주시겠습니까? 에 대한 많은 잘못된 정보가있는 것 같습니다. 결국 모든 사용자가 자신의 컴퓨터/장치 해상도로 제공되는 최고 품질의 이미지를 얻고 싶습니다. 많은 감사

+0

이 게시물 읽기 : [전체 화면 winjs]을 [1] [1] : 후반 수용에 대한 https://stackoverflow.com/questions/12986205/fullscreen-winjs-ui-flipview –

답변

0

ViewBox 컨트롤은 캔버스를 장치 해상도까지 확장하고 원하는 것일 수도 아닐 수도 있습니다. 캔버스가 픽셀로 가득 차면 픽셀이 커집니다. 이후처럼 더 높은 품질의 이미지를 얻지는 못합니다.

정말 적응력이 뛰어난 게임을 원한다면 해상도에 따라 캔버스 개체를 동적으로 렌더링해야 할 것입니다. 장치가 1366x768이면 캔버스는 1366x768이어야하며 일부 스프라이트는 100x100 픽셀이어야합니다. 장치가 1600x900이면 캔버스는 1600x900이어야하며 동일한 스프라이트는 140x140이어야합니다. 그것은 당신의 코드에서 어떤 논리를 취할 것입니다.

먼저, 원래 게시물의 캔버스 크기를 설정하면 모든 시각적 자산의 캔버스 크기에 비례하여 정의 된 크기가 필요합니다. 작업을 추상화하는 코드를 작성하는 것이 가장 좋습니다.

+0

죄송합니다 . 나는 이것과 내가 이전에 가지고 있었던 것의 조합을 위해가는 것을 끝내었다. 게임은 768, 1080 또는 1440 높이 해상도로 자산을 선택하고 고정 16:10 비율로 렌더링합니다. 그 사이의 해상도를 위해, 품질을 크게 유지하는 스타일 속성을 사용하여 캔버스를 세 가지 중 하나로 축소합니다. – Fourjays

1

여기에 묶는 데 도움이되는 컨트롤은 WinJS.UI 네임 스페이스에있는 ViewBox control입니다.

ViewBox 컨트롤은 UI 요소를 자동으로 조정하므로 UI를 현재 해상도에 맞추는 방법을 수동으로 파악하는 것에 대해 걱정할 필요가 없습니다.

Visual Studio에서 고정 레이아웃 앱 템플릿을 확인하면 빠른 방법으로 ViewBox 컨트롤을 시작할 수 있습니다. Windows 개발자 센터의 고정 레이아웃 앱 템플릿을 비롯하여 앱 템플릿에 대해 자세히 읽어 볼 수 있습니다.

또한 guidelines for scaling to screens을 확인하십시오.

Windows 스토어 응용 프로그램 개발에 대한 자세한 내용은 Generation App에 등록하십시오.