시행착오

canvas 삽질 정리

조규현15 2015. 1. 15. 13:17
반응형

이미 기존에 풀 스크린 게임 환경을 제공하기 위해 삽질이 했다.


> 웹 브라우저에는 필연적으로 상단의 주소창(safari의 경우에는 하단의 버튼창이 존쟤)

> 이것은 상당히 눈에 거슬리고 게임화면에 불필요한 공간을 낭비함


그렇게 얻은 성과는 각 브라우저별 상단 주소창의 크기를 고려하여 resize를 통해 canvas를 맞춘것으로 마무리함.

하지만 이것은 임시 방편이고 수소문으로 웹 브라우저가 최근 풀 스크린 모드를 제공한다고 함.

조사한 결과는 아래와 같은 API를 제공함


> 다른 오픈 API를 사용할 수 있었으나 공부의 목적이기에 조사하고 구현하려 노력함


var elem = document.getElementById("myvideo");

if (elem.requestFullscreen) {

  elem.requestFullscreen();

} else if (elem.mozRequestFullScreen) {

  elem.mozRequestFullScreen();

} else if (elem.webkitRequestFullscreen) {

  elem.webkitRequestFullscreen();

}


requestFullscreen() API가 핵심인데

보안상의 이유로 automacally한 풀 스크리은 불가능하다고 한다.

> 꼭 사용자의 input(touch, click, key)을 통해 호출됨

> 물론, 우회방법이 있겠지만 고려하지 않음


문제는 requestFullscreen()으로 전체화면을 모바일에서 구현했다.

다만.. canvas의 resize의 경우 window의 크기(innerWidth)로 변경하는데

> canvas는 default로 480 720 의 크기를 가지고 있으며

> 표현할 때에는 현재 window 크기에 맞춰 scale을 재조정하고 출력하는 방식을 사용

> 여러모로 크기에 구애받지 않을 수 있어서사용하고 있다


풀 스크린 모드에 진입하면 window 크기가 줄어든다!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

이게 무엇이냐 모바일 웹 브라우저의 초기에 window 크기는 980( 넥서스5)이지만

스크린 모드로 진입하면 window 크기가 360으로 축소된다.


물론, 360크기로 canvas를 리사이즈해서 문제되지 않는다.

다만 980 해상도 게임에서 360으로 줄어든다면 픽셀의 한계가 360/980으로 줄어드는데

이것을 용납하기 어려웠다.

> 아직 해결법은 찾지 못했지만 일반적으로 document 스크린 모드는 window가 줌인 되는 효과로 이해된다--


아니.. 주소창과 하단 창을 지원하지 않고 싶은데 해상도가 줄어드는게 이해가 안가지만

> webGL과 관련이 있을수도?


아래 링크에서 소개된 3가지 방법의 풀 스크린에서 사용하기가 힘든 webApp 포팅을 사용했다.

> 바탕화면에 AppIcon을 만들고 해당 페이지를 web으로 접속하는 webApp이 된다


이런 방법은 이유를 찾아봐야지만 window 크기가 기기 해상도로 유지된다.

결국, 이 방법을 사용해야겠다..ㅜ


물론 브라우저 마다 적용이 다르다.


crome 

<meta name="mobile-web-app-capable" content="yes">

ios

<meta name="apple-mobile-web-app-capable" content="yes">

firefox

{
  "name": "My App",
  "description": "My elevator pitch goes here",
  "launch_path": "/",
  "icons": {
    "128": "/img/icon-128.png"
  },
  "fullscreen": true
}

> 참고 http://www.html5rocks.com/ko/mobile/fullscreen/

반응형

'시행착오' 카테고리의 다른 글

Hadoop file IO  (0) 2015.01.28
아파치, 톰캣 연동 한글 깨짐 해결  (0) 2015.01.16
블로그에 코드 넣기  (0) 2015.01.08
Jersey 활용기  (0) 2015.01.08
can’t find api database Solution  (0) 2015.01.08