본문으로 바로가기

CHAR 1. HTML5 캔버스 소개

category HTML5 Canvas 2012. 2. 21. 17:39
▼ HTML5 코드 연습장: 코드를 수정해서 바로 실행결과를 확인할 수 있다 [열기]

▼ Canvas는?
- Canvas는 HTML에서 엘리먼트(요소)라고 불린다.
- 원리: JavaScript의 캔버스API로 코드를 만들면 Canvas는 프레임마다 비트맵 화면을 다시 그린다.
- Canvas는 즉시모드(imediate mode)를 사용한다. ↔ 보류모드(retained mode): 플래시, 실버라이트, SVG

- JavaScript 코드 충돌에 유의한다 (scope/namespace 이용해서 충돌을 피한다)

1.1 기본적인 HTML 페이지
// 브라우저에게 렌더링 타입을 알려준다.
<!doctype html>
<html lang="ko"> // 영어: en, 일본어: ja
<head>
// 문자인코딩 방법

Basic Hello World HTML Page
</head>
<body>
Hello World!
</body>
</html>
1.2 사용할 기본적인 HTML
▼ div & canvas
<body>
Your browser does not support the HTML 5 Canvas.
</body>
1.3 DOM과 캔버스
▼ window
    - DOM의 최상위 레벨 객체
    - 캔버스 애플리케이션 시작전에 모든 코드와 값이 올라왔는지 확인하는데 사용
window.addEventListner("load", eventFuncName, false/*하위객체전달여부*/);
▼ document
    - HTML페이지 안의 모든  HTML 태그를 가진다.
    - 자바스크립트로 canvas 인스턴스에 접근할때 사용
var canvas = document.getElementById("canvas");
if( !canvas ) {
	return;
}



1.4 자바스크립트와 캔버스
    - [도서] 자바스크립트 핵심 가이드(한빛미디어,2008)
    - 자바스크립트 프레임워크&라이브러리: jQuery(프), Processing.js(프), Modernize, JSColor, WebGL
    ▼ 자바스크립트를 넣는 위치
        - head에 넣을때는 스크립트 동작전에 HTML페이지가 올라왔는지 확인 필요
        - 아니면 </body> 바로 앞에 넣기도 한다.

1.5 HTML5 캔버스로 만드는 "Hello World!"
- 자바스크립트 작성시 변수나 함수명이 HTML 페이지의 다른 JS 코드와 충돌되지 않도록 유의한다.
- 충돌방지를 위해 캡슐화를 사용한다.
function canvasApp() {
    drawScreen();
    ...
    function drawScreen() {
        ...
    }
}
▼ Canvas 지원여부 확인법
방법1) 테스트용캔버스 이용 (출처 - http://diveintohtml5.org)
funtion canvasSupport() {
    return !!document.createElement('testcanvas').getContext;
}
방법2) [추천] modernizr : 웹 기반 기술의 지원여부 확인용 라이브러리
<script src="http://www.modernizr.com/downloads/modernizr-latest.js"></script>
function supportCanvas() {
    return Modernizr.canvas;
}
▼ 컨텍스트로 캔버스에 그리기(full source)

1.6 Console.log로 디버깅하기
- 이 함수는 자바스크립트 콘솔에 로그 문자 메시지를 남긴다.
- 지원되지 않는 브라우저에서 에러가 나지 않도록 console.log 감싼 코드 ▽아래
var Debugger = function () { };
Debugger.log = function (message) {
	try {
		console.log(message);
	} catch (exception) {
		return;
	}
}
...
Debugger.log("메시지"); // Usage
1.7 2D 컨텍스트와 현재 상태 정보
- CanvasRenderingContext2D는 캔버스에 그릴 때 필요한 모든 메서드와 속성을 가진다.
- 현재 상태 정보란? 캔버스 전역에 적용되는 그리기 상태를 모아놓은 스택
▼ 상태정보
    - 변환행렬: 크기 조절, 회전, 변환, 이동을 위한 메서드
    - 자르기 영역: clip() 메서드롤 생성된 영역
    - 컨텍스트의 속성: strokeStyle, fillStyle, globalAlpha, globalCompositeOperation, lineWidth, lingCap, lineJoin, miterLimit, shadowOffsetX, shadowOffsetY, shadowBlur, shadowColor, font, textAlign, textBaseline
▼ 즉시 모드와 보류 모드
- 즉시 모드(Canvas): 변경이 있을때마다 다시 그린다.
   장점: 전역 속성 사용으로 화면 전체에 변경사항 적용하기가 용이
- 보류 모드(플래시, 실버라이트, SVG): 그리기 관련 객체를 저장해 놓고 출력 리스트로 작업
   장점: 독립적인 상태 정보를 갖는 여러 객체로 이루어진 애플리케이션 제작에 용이

1.8 HTML 캔버스 객체
- var theCanvas = document.createElement("canvas");
- theCanvas.width = 200; theCanvas.height = 300;  
▼ 캔버스 공개 메서드:  
    - theCanvas.getContext("2d")
    - theCanvas.toDataURL(): 지금 그리는 캔버스 객체의 비트맵 이미지의 스트링 정보를 넘긴다.(화면 스냅샷?)

1.9 또 다른 예제: Guess The Letter(문자 맞추기)
▼ 목표: 컴퓨터가 임의로 선택한 알파벳문자를 사용자가 맞추는 게임
▼ 기능: 참가자가 몇 번 추측했는지 기록, 나온 문자(history) 나열, 정답이 추측보다 높은지 낮은 알파벳인지 알려준다.
▼ Step by Step 구현
   ① 변수 구상하기
   ② 초기화 함수: initGame()
   ③ 이벤트 함수: eventKeyPressed() - 게임오버확인 → 나온 문자 저장(history) → 예외처리 → 비교 → 출력
▼ drawScreen()
    - 문자배열 출력: variable.toString() - ',' 넣어서 나열
▼ 캔버스에서 이미지로 바꾸기 - toDataURL() 
...
function createImageDataPressed(e) {
	window.open(theCanvas, toDataURL(), "canvasImage", "left=0, top=0, width="
			+theCanvas.width + ", height=" + theCanvas.height + ", toolbar=0, resizable=0");
}
...

반응형

'HTML5 Canvas' 카테고리의 다른 글

CHAR 4. 캔버스에서의 이미지  (0) 2012.03.01
CHAR 3. HTML5 캔버스 문자 API  (6) 2012.02.29
HTML5 Canvas 관련 사이트  (0) 2012.02.27
CHAR 2. 캔버스에 그리기  (0) 2012.02.22
html5canvas 도서 스터디 시작(2/18-3/31)  (0) 2012.02.21