Top Banner
JS+html5 with Game engine cocos2d-html5 분석 ANBSoft 게임공학기술연구소 송찬호 [email protected] twitter : copperwhale
82

Html5+js with game engine cocos2d-html5 분석 @KGC2012

Jan 13, 2015

Download

Technology

Chanho Song

KGC 2012 에서 발표한 내용입니다.
질문이 있으시면 메일이나 트윗 주세요.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

JS+html5 with Game engine

cocos2d-html5 분석

ANBSoft게임공학기술연구소 송찬호

[email protected] : copperwhale

Page 3: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Cocos2D

Page 4: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

cocos2d

2D 게임 같은 인터렉티브 어플리케이션을 만들기 위한 오픈 소스 프레임워크

Page 5: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

cocos2d 기본 컨셉

1. CocosNode2. Director3. Scene4. Layer5. Sprite6. Action

Page 6: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

cocos2d 기본 컨셉 - CocosNode

cocos2d의 모든 클래스가 CocosNode를 상속 하여 구현

● position, scale, visible 등 기본 속성● 계층 구조를 위한 add, remove, reorder● schedule 기능

Page 7: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

cocos2d 기본 컨셉 - Director

어플리케이션을 구성하는 여러 Scene들 가운데 무엇이 활성화 되는지 흐름을 관리

Page 8: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

cocos2d 기본 컨셉 - Scene

스테이지 나 타이틀 처럼 어플리케이션의 흐름의 독립적인 한 부분을 정의하는 단위

Page 9: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

cocos2d 기본 컨셉 - Layer

화면을 구성하는 단위로 하나 이상의 Layer를 정의하여 하나의 Scene을 구성

Page 10: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

cocos2d 기본 컨셉 - Sprite

이동, 회전, 크기변환, 애니메이션 등을 적용할 수 있는 2D 이미지

Page 11: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

cocos2d 기본 컨셉 - Action

CocosNode 객체(Scene, Layer, Sprite 해당 됨)에 position, rotation, scale 등과 같이 객체의 속성을 시간에 따라 변경하는 것을 처리

Page 12: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

cocos2d의 가족

cocos2d +cocos2d-iphone +cocos2d-android +cocos2d-javascript +cocosBuilder +cocos2d-x +cocos2d-html5 <- !!!

Page 13: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

cocos2d-html5

Page 14: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

cocos2d-html5

현재 버전은 2.0

● files must load from HTTP server● Google Closure Compiler surpport● Unified Javascript API style● DOM Menu/UI● Updated API to Cocos2d-x V2.0

Page 15: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Google Closure Compiler - 1

Javascript를 최적화 해서 브라우져에서 다운로드와 실행 속도를 향상

Page 16: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Google Closure Compiler - 2

"Advanced mode" 적용

● 게임 로직과 묶어서 하나의 파일로 패키징 가능

● 코드 최소화(주석 및 비칸 제거 등)● 사용하지 않는 코드 제거● 코드 난독화

Page 17: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

DOM Menu / UI

html DOM 방식으로 메뉴 구성 가능

● 정적인 메뉴를 구성시 매 프레임 다시 그리지 않아 속도향상

● 텍스트 출력 속도 향상

Page 18: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Unified Javascript API style

cocos2d-iphone 및 cocos2d-x의 JS-Binding의 스크립트와 cocos2d-html5 코드가 같음

For example:var sprite = cc.Sprite.spriteWithFile(s_grossini_dance_atlas, cc.RectMake(x, y, 85, 121)); //is changed to...var sprite = cc.Sprite.create(s_grossini_dance_atlas, cc.RectMake(x, y, 85, 121));

Page 19: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

cocos2d-x 와 cocos2d-html5 1/2

cocos2d-x 기반 제작

비슷한 구조로 비교 분석이 쉽다.

● Cocos2d-html5-v2.0.zip 안의 cocos2d폴더와 cocos2d-2.0-x의 cocos2dx 폴더가 비슷한 구조로 구성 되어 있음

Page 20: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

cocos2d-x 와 cocos2d-html5 2/2

Page 21: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

라이브러리 구성

cocos2d-x● cocos2dx 폴더 내부의 cpp를 컴파일 .lib나 .

a 등 라이버러리 생성

cocos2d-html5● cocos2d 폴더 내부의 js 파일을 google

closure compiler 로 라이브러리 js파일 생성

Page 22: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Cocos2d-html5-v2.0.min.js

Page 23: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

SampleHello HTML5 World

Page 24: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

HelloHTML5World

Page 25: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

게임의 구성

html 파일 + js 파일 로 구성

● html 파일은 canvas 정의 - id와 크기 지정● js 파일은 어플리케이션 로직 및 엔진

Page 26: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

파일 구성

index.html - 캔버스 정의 및 cocos2d.js 로딩

cocos2d.js - 엔진 초기화 및 게임 코드 파일 로딩

main.js - 엔진에 게임 객체 생성 및 전달

resource.js - 리소스 목록 정의

myApp.js - 'Hello World' 메시지 및 이미지 출력

build.xml - google closure compiler를 이용한 통합 파일 생성을 위한

ant 빌드 스크립트

Page 27: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

html 파일 - index.html

x

Canvas 정의

JS 호출

Page 28: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

JS 파일 - cocos2d.js 1/2

엔진 정보 설정

게임 로딩 정보 설정

Page 29: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

JS 파일 - cocos2d.js 2/2

패키지 및 엔진 로딩 방법 정의

게임의 코드 파일 목록

Page 30: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

JS 파일 - main.js 1/3

게암 객체 생성

게임 객체 정의

Page 31: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

JS 파일 - main.js 2/3

엔진 초기화

디렉터 초기화 (AppDelegate)

Page 32: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

JS 파일 - main.js 3/3

게임 초기화 완료

게임의 시작 씬

Page 33: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

JS 파일 - resource.js

리소스 과련 매직 넘버 정의

전체 리소스 목록

Page 34: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

JS 파일 - myApp.js 1/2

Hello World

종료 버튼

화면 갱신 알림

엔진 정보

엔진 로고

Page 35: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

JS 파일 - myApp.js 2/2

CircleSprite (화면 갱신 알림)

● 매 프레임 갱신되는 객체

● 기본 도형 그리는 함수로 그림

Helloworld (cc.Layer 확장)

● 종료 버튼 이미지 및 이벤트 정의

● 'Hello World' 문구, 화면 갱신 알림 및 엔진 로고 이미지 객체 생성 및 에이메이션 정의

HelloworldScene (cc.Scene 확장)

● Helloworld 레이어 생성 및 등록

Page 37: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

xml 파일 - build.xml 1/2

컴파일러 정의(google closure compiler)

컴파일 결과 정의

Page 38: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

xml 파일 - build.xml 2/2

엔진 소스 목록

게임 소스 목록

Page 39: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

ant 빌드 1/2

ant 빌드 실패

엔진 파일 목록에 존재하지 않는 파일이 있어 빌드 실패 <file name="keypad_dispatcher/CCKeypadDelegate.js"/>

<file name="keypad_dispatcher/CCKeypadDispatcher.js"/>

Page 40: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

ant 빌드 2/2

ant 빌드 성공

!! 정상적인 결과 파일을 만들기 위해 build.xml 을 수정해야 합니다. !! <file name="keypad_dispatcher/CCKeypadDelegate.js"/>

<file name="keypad_dispatcher/CCKeypadDispatcher.js"/>를

<file name="touch_dispatcher/CCTouchDelegateProtocol.js"/><file name="touch_dispatcher/CCTouchHandler.js"/>

<file name="touch_dispatcher/CCTouchDispatcher.js"/> <file name="keyboard_dispatcher/CCKeyboardDelegate.js"/>

<file name="keyboard_dispatcher/CCKeyboardDispatcher.js"/>로 수정해야 합니다.

Page 41: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

빌드 결과 - myApp-v0.1.js

Page 42: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

cocos2d-html5게임 시작 과정 분석

Page 43: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

boot engine - cocos2d-x win32 1/3

run() 호출

Page 44: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

boot engine - cocos2d-x win32 2/3

mainLoop() 호출

Page 45: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

boot engine - cocos2d-x win32 3/3

1. main.cppa. CCApplication::sharedApplication()->run();

2. platform/CCApplication.cpp - run()

b. applicationDidFinishLaunching()c. looping CCDirector::sharedSirector()->mainLoop()

Page 46: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

boot engine - cocos2d-html5 1/8

cocos2d.js 로딩

Page 47: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

boot engine - cocos2d-html5 2/8

엔진 및 게임 스크립트 파일 정의

DOM 로딩 완료

스크립트 로딩 (jsloader.js)

Page 48: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

boot engine - cocos2d-html5 3/8

엔진 로딩 목록

main.js 로딩 목록 추가

Page 49: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

boot engine - cocos2d-html5 4/8

리소스 로딩중 표시

로딩 완료 후 호출

Page 50: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

boot engine - cocos2d-html5 5/8

run() 호출

Page 51: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

boot engine - cocos2d-html5 6/8

mainLoop() 호출

mainLoop() 호출

applicationDidFinishLaunching() 호출

Page 52: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

1. index.htmla. cocos2d.js 로딩

2. cocos2d.jsb. 즉시 실행 함수에서 DOM로딩 직후 jsloader.js 로딩

3. jsloader.js - (여러 js을 읽는 경우)

c. 즉시 실행 함수에서 모든 엔진 코드 및 main.js 로딩

boot engine - cocos2d-html5 7/8

Page 53: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

4. main.js - ctor()

a. cc.Loader.shareLoader().onload 이벤트로 cc.AppController.shareAppController().didFinishLaunchingWithOptions() 호출

5. AppControl.js - didFinishLaunchingWithOptions()

b. cc.Application.sharedApplication().run();

6. CCApplication.js - run()

c. applicationDidFinishLaunching()d. looping cc.Director.getInstance().mainLoop();

boot engine - cocos2d-html5 8/8

Page 54: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

boot up 비교

cocos2d-x● 플랫폼 별 다른 엔트리 포인트에서 CCApplication.cpp

의 run() 호출● 윈도의 경우 platform/win32/CCApplication.cpp 의

run() 에서 mainLoop() 호출

cocos2d-html5● 엔진 및 어플리케이션 코드 로딩● 로딩 과정에서 즉시 실행 함수로 초기화● 로딩 완료 이벤트 수신 후 platform/CCApplication.js

의 run() 에서 mainLoop() 호출

Page 55: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

etc - 2개의 mainLoop() ??

mainLoop() 호출

mainLoop() 호출

Looping callback 등록

Looping callback 등록

Page 56: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

html5 - javascript게임 개발을 위한 기능들

Page 57: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

게임을 위한 Javascript 사용 패턴 1/2

모듈 패턴 - 네임스페이스 패턴, 즉시 실행 함수 등

상속 패턴 - 프로토타입 목록 및 객체 정보 복사를 이용

Page 58: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

게임을 위한 Javascript 사용 패턴 2/2

객체 상수 - 매직 넘버를 정의하기 위한 객체 정의 방법

...JavaScript Patterns - 자바스크립트 코딩 기법과 핵심 패턴

Page 59: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Display - Canvas

Page 60: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Display - WebGL

Page 61: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Display - Canvas vs WebGL

Canvas● 모든 시스템에서 지원● 상대적으로 느리지만 지속적으로 개선

WebGL● gles 2.0 과 비슷한 사양● Canvas에 비해 매우 빠르고 동작 한다면 호환성 이슈 적

음● WebGL tutorial - Opera 개발자(Erik Moller)● WebGL Terrain Editor

Page 62: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Display - performance test 1/2

2012-3-19 internet-explorer-10-fast-and-native-has-gone-to-other-browsers

Page 63: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Display - performance test 2/2

2011-11-18 html5-2d-gaming-performance-analysis

Page 64: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Display - cocos2d-html5

canvas 생성

Page 65: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Input

addEventHandler● 첫번째 인자로 원하는 이벤트를 지정

○ 'keyup', 'keydown'○ 'mousedown', 'mouseup', 'mousemove'○ 'touchstart', 'touchmove', 'touchend', 'touchcancel'

● 두번째 인자로 이벤트 처리 함수 지정● 세번째 인자로 캡쳐 방식의 이벤트 처리

○ 일반적인 경우 부모 객체에게 이벤트 전달○ 캡쳐 방식의 경우 부모객체에게 이벤트 전달을 하지

않음

Page 66: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Input - keyboard cocos2d-html5

키 이벤트 등록

Page 67: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Input - mouse cocos2d-html5

마우스 버튼 업 이벤트

마우스 버튼 누름 이벤트

마우스 이동 이벤트

Page 68: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Audio

Page 69: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Audio - codec in browser

Page 70: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Audio

현재● 단순한 기능● 메모리에 로딩된 사운드만 출력● 브라우져 별 지원 코덱 다름● 아이폰의 경우 전체 화면이 아닌 경우 출력되지 않음미래

● 기능 확장을 위한 다양한 시도중○ 스트리밍 처리에 대해 W3C 제안○ 하위 수준의 API 개발

Page 71: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Audio - cocos2d-html5

Page 72: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Network - Web socket

Page 73: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Network - Web socket client

Web socket - client● TCP 기반의 실시간 양방향 통신 가능● 다수의 사용자와 통신 가능● 사용하기 쉽다

안드로이드 계열에서는 지원하지 않음 ;;;

● iframe 나 Ajax 등 비동기 JS 계열의 기술을 이용

Page 74: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Network - Web socket server

Web socket - server● 기존 TCP 소켓 서버와 약간 다른 구현이 필요● 다양한 언어를 위한 오픈 소스 서버 프레임 존재

○ jwebsocket

○ pywebsocket

○ phpwebsocket

○ web-socket-ruby

○ socket.io-node

○ ...

Page 75: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

high performance

변수 선언 위치

성능 향상을 위한 코딩 패턴

...● Extreme JavaScript Performance

참고자료

● JavaScript 자바스크립트 성능 최적화

Page 76: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

multi browser

브라우져 마다 특성 다름...;;● 시각적 결과● 지원 기능● 성능

● 개개의 브라우져에 대응하도록 소스 코드 튜닝● 특정 브라우져만 지원, 해당 브라우져 설치 유도

Page 77: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

debug - html5 & javascript

Firefox - FirebugChrome - Chrome developer tool● 브레이크 포인터, 라인 단위 실행 등 디버깅 기능● 변수값 표시● 로그 출력● 성능 프로파일링● 호출 스텍 표시● 리소스 로딩 모니터링● 기타 등등

Page 79: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

IDE - cocosBuilder

Page 80: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

IDE - cocosBuilder

CocosBuilder 3 Animation Editor

Page 81: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

html5 - javascript그래서...

Page 82: Html5+js with game engine   cocos2d-html5 분석 @KGC2012

Q & A살살요 ... ^^ 굽신~