SlideShare a Scribd company logo
Gam
   html5 with  e engine
JS+
cocos2d- html5 분석
                   ANBSoft
          게임공학기술연구소 송찬호
              yellow@anbgames.com
                twitter : copperwhale
d game eng ine or lib
J S+html5 an




 FlashJS
                             LimeJS
                     Jaws HTML5

                          From : jswiki/Game-Engines
Cocos2D
cocos2d

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

1.   CocosNode
2.   Director
3.   Scene
4.   Layer
5.   Sprite
6.   Action
본 컨셉 - CocosNode
   cocos2d 기

cocos2d의 모든 클래스가 CocosNode를 상속
하여 구현
● position, scale, visible 등 기본 속성
● 계층 구조를 위한 add, remove, reorder
● schedule 기능
기본 컨셉 - Director
  cocos2d

어플리케이션을 구성하는 여러 Scene들 가운
데 무엇이 활성화 되는지 흐름을 관리
- Scene
  cocos 2d 기본 컨셉

스테이지 나 타이틀 처럼 어플리케이션의 흐름
의 독립적인 한 부분을 정의하는 단위
- Layer
  cocos 2d 기본 컨셉

화면을 구성하는 단위로 하나 이상의 Layer를
정의하여 하나의 Scene을 구성
- Sprite
  cocos 2d 기본 컨셉

이동, 회전, 크기변환, 애니메이션 등을 적용할
수 있는 2D 이미지
- Action
   cocos 2d 기본 컨셉

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

cocos2d
  +cocos2d-iphone
   +cocos2d-android
   +cocos2d-javascript
   +cocosBuilder
 +cocos2d-x
   +cocos2d-html5      <- !!!
cocos2d-html5
coc os2d-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
Closure Co mpiler - 1
  Google

Javascript를 최적화 해서 브라우져에서 다운로
드와 실행 속도를 향상
Closure Co mpiler - 2
  Google

"Advanced mode" 적용
● 게임 로직과 묶어서 하나의 파일로 패키징
   가능
● 코드 최소화(주석 및 비칸 제거 등)
● 사용하지 않는 코드 제거
● 코드 난독화
DOM M enu / UI

html DOM 방식으로 메뉴 구성 가능
● 정적인 메뉴를 구성시 매 프레임 다시 그리
  지 않아 속도향상
● 텍스트 출력 속도 향상
d Javascript API style
            Uni      fie

   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));
cocos2d -html5 1/2
   cocos2d-x 와

cocos2d-x 기반 제작
비슷한 구조로 비교 분석이 쉽다.
● Cocos2d-html5-v2.0.zip 안의 cocos2d폴더
  와 cocos2d-2.0-x의 cocos2dx 폴더가 비슷
  한 구조로 구성 되어 있음
cocos2d -html5 2/2
cocos2d-x 와
라이 브러리 구성

cocos2d-x
● cocos2dx 폴더 내부의 cpp를 컴파일 .lib나 .
  a 등 라이버러리 생성
cocos2d-html5
● cocos2d 폴더 내부의 js 파일을 google
  closure compiler 로 라이브러리 js파일 생
  성
d-html5-v2 .0.min.js
Cocos2
Sample
Hello HTML5 World
HelloH TML5World
게 임의 구성

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

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

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

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

resource.js -   리소스 목록 정의

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

build.xml -   google closure compiler를 이용한 통합 파일 생성을 위한
              ant 빌드 스크립트
l 파일 - in dex.html
    htm




                             Canvas 정의
x

                                JS 호출
파일 - coc os2d.js 1/2
JS
                      엔진 정보 설정




                   게임 로딩 정보 설정
파일 - coc os2d.js 2/2
JS


                   게임의 코드 파일 목록

              패키지 및 엔진 로딩 방법 정의
JS 파일 - m ain.js 1/3
                       게임 객체 정의




                       게암 객체 생성
JS 파일 - m ain.js 2/3

                        엔진 초기화



               디렉터 초기화 (AppDelegate)
JS 파일 - m ain.js 3/3




                       게임 초기화 완료




             게임의 시작 씬
JS 파일 - r esource.js


               리소스 과련 매직 넘버 정의

                       전체 리소스 목록
파일 - myA pp.js 1/2
  JS

                Hello World


화면 갱신 알림

                     엔진 로고


엔진 정보                         종료 버튼
파일 - myA pp.js 2/2
    JS

CircleSprite (화면 갱신 알림)
● 매 프레임 갱신되는 객체
● 기본 도형 그리는 함수로 그림
Helloworld (cc.Layer 확장)
● 종료 버튼 이미지 및 이벤트 정의
● 'Hello World' 문구, 화면 갱신 알림 및 엔진 로고 이미지 객체 생성 및 에이
  메이션 정의

HelloworldScene (cc.Scene 확장)
● Helloworld 레이어 생성 및 등록
Hello HTM L5 World




           hello HTML5 world
l 파일 - build.xml 1/2
xm
                          컴파일러 정의
                     (google closure compiler)



                      컴파일 결과 정의
l 파일 - build.xml 2/2
xm


                          엔진 소스 목록




                          게임 소스 목록
ant 빌드 1/2

                                                               ant 빌드 실패




     엔진 파일 목록에 존재하지 않는 파일이 있어 빌드 실패
       <file name="keypad_dispatcher/CCKeypadDelegate.js"/>
      <file name="keypad_dispatcher/CCKeypadDispatcher.js"/>
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"/>
                             로 수정해야 합니다.
과 - myAp p-v0.1.js
빌드 결
cocos2d-html5
게임 시작 과정 분석
- cocos2d- x win32 1/3
b oot engine




                            run() 호출
- cocos2d- x win32 2/3
b oot engine




                        mainLoop() 호출
- cocos2d- x win32 3/3
     b oot engine

1. main.cpp
  a. CCApplication::sharedApplication()->run();
2. platform/CCApplication.cpp - run()
  b. applicationDidFinishLaunching()
  c. looping CCDirector::sharedSirector()->mainLoop()
- cocos2d- html5 1/8
b oot engine




                       cocos2d.js 로딩
- cocos2d- html5 2/8
b oot engine




                        DOM 로딩 완료

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


                        스크립트 로딩
                        (jsloader.js)
- cocos2d- html5 3/8
b oot engine
                        엔진 로딩 목록




                   main.js 로딩 목록 추가
- cocos2d- html5 4/8
b oot engine


                      리소스 로딩중 표시

                       로딩 완료 후 호출
- cocos2d- html5 5/8
b oot engine



                           run() 호출
- cocos2d- html5 6/8
b oot engine

               applicationDidFinishLaunching()
                             호출

                           mainLoop() 호출

                           mainLoop() 호출
- cocos2d- html5 7/8
   b oot engine

1. index.html
  a. cocos2d.js 로딩
2. cocos2d.js
  b. 즉시 실행 함수에서 DOM로딩 직후 jsloader.js 로딩
3. jsloader.js - (여러 js을 읽는 경우)
  c. 즉시 실행 함수에서 모든 엔진 코드 및 main.js 로딩
- cocos2d- html5 8/8
     b oot engine

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 up 비교

cocos2d-x
● 플랫폼 별 다른 엔트리 포인트에서 CCApplication.cpp
  의 run() 호출
● 윈도의 경우 platform/win32/CCApplication.cpp 의
  run() 에서 mainLoop() 호출
cocos2d-html5
● 엔진 및 어플리케이션 코드 로딩
● 로딩 과정에서 즉시 실행 함수로 초기화
● 로딩 완료 이벤트 수신 후 platform/CCApplication.js
  의 run() 에서 mainLoop() 호출
2개의 main Loop() ??
      etc -




                           mainLoop() 호출
Looping
callback 등록                mainLoop() 호출
Looping
callback 등록
html5 - javascript
게임 개 발을 위한 기능들
패턴 1/2
     을 위한 Jav ascript 사용
  게임

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




상속 패턴 -   프로토타입 목록 및 객체 정보 복사를 이용
패턴 2/2
      을 위한 Jav ascript 사용
   게임

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




                      ...
 JavaScript Patterns - 자바스크립트 코딩 기법과 핵심 패턴
Displa y - Canvas
Displa y - WebGL
lay - Canva s vs WebGL
   Disp

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

WebGL
● gles 2.0 과 비슷한 사양
● Canvas에 비해 매우 빠르고 동작 한다면 호환성 이슈 적
  음
● WebGL tutorial - Opera 개발자(Erik Moller)
● WebGL Terrain Editor
performanc e test 1/2
     Display -




2012-3-19 internet-explorer-10-fast-and-native-has-gone-to-other-browsers
performanc e test 2/2
Display -




   2011-11-18 html5-2d-gaming-performance-analysis
D isplay - cocos2d-html5




                           canvas 생성
Input

addEventHandler
● 첫번째 인자로 원하는 이벤트를 지정
  ○ 'keyup', 'keydown'
  ○ 'mousedown', 'mouseup', 'mousemove'
  ○ 'touchstart', 'touchmove', 'touchend', 'touchcancel'
● 두번째 인자로 이벤트 처리 함수 지정
● 세번째 인자로 캡쳐 방식의 이벤트 처리
  ○ 일반적인 경우 부모 객체에게 이벤트 전달
  ○ 캡쳐 방식의 경우 부모객체에게 이벤트 전달을 하지
    않음
yboard coc os2d-html5
Input - ke




                          키 이벤트 등록
- mouse coc os2d-html5
Input


                    마우스 버튼 누름 이벤트




                     마우스 버튼 업 이벤트




                      마우스 이동 이벤트
Audio
io - codec in browser
Aud
Audio

현재
● 단순한 기능
● 메모리에 로딩된 사운드만 출력
● 브라우져 별 지원 코덱 다름
● 아이폰의 경우 전체 화면이 아닌 경우 출력되지 않음
미래
● 기능 확장을 위한 다양한 시도중
  ○ 스트리밍 처리에 대해 W3C 제안
  ○ 하위 수준의 API 개발
A udio - cocos2d-html5
N etwork - W eb socket
o rk - Web so cket client
    Netw

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




안드로이드 계열에서는 지원하지 않음 ;;;
● iframe 나 Ajax 등 비동기 JS 계열의 기술을 이용
o rk - Web so cket server
    Netw

Web socket - server
● 기존 TCP 소켓 서버와 약간 다른 구현이 필요
● 다양한 언어를 위한 오픈 소스 서버 프레임 존재
  ○ jwebsocket
  ○ pywebsocket
  ○ phpwebsocket
  ○ web-socket-ruby
  ○ socket.io-node
  ○ ...
high p erformance

변수 선언 위치
성능 향상을 위한 코딩 패턴
...
● Extreme JavaScript Performance

참고자료
● JavaScript 자바스크립트 성능 최적화
multi browser

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

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

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




         Make HTML5 games with Construct 2
IDE - coc osBuilder
IDE - coc osBuilder




          CocosBuilder 3 Animation Editor
html5 - javascript
    그래서...
Q&A
살살요 ... ^^ 굽신~

More Related Content

What's hot (20)

PDF
하이퍼레저 프로젝트 개요
Seung-Woo Kang
 
PPT
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
상현 조
 
PDF
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XpressEngine
 
PDF
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
Ji-Woong Choi
 
PDF
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
David Lee
 
PPTX
Docker 로 Linux 없이 Linux 환경에서 개발하기
iFunFactory Inc.
 
PDF
Hyperledger Fabric practice (v2.0)
wonyong hwang
 
PDF
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XpressEngine
 
PDF
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XpressEngine
 
PPTX
Manage book project
Ann Byung Hyun
 
PPTX
Ffmpeg for android
seunghyuk choi
 
PDF
안드로이드 와 디바이스 드라이버 적용 기법
chon2010
 
PDF
Docker 기반 개발환경 구축 - XE Open seminar #2
XpressEngine
 
PDF
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
Jaeseung Ha
 
PDF
Grunt 사용법 간단정리
SuHyun Jeon
 
PDF
Docker (Compose) 활용 - 개발 환경 구성하기
raccoony
 
PDF
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
현철 조
 
PPTX
Startup JavaScript 9 - Socket.IO 실시간 통신
Circulus
 
PDF
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
pyrasis
 
PDF
제 5회 Lisp 세미나 - 클로저 개발팀을 위한 지속적인 통합
NAVER D2
 
하이퍼레저 프로젝트 개요
Seung-Woo Kang
 
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
상현 조
 
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XpressEngine
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
Ji-Woong Choi
 
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
David Lee
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
iFunFactory Inc.
 
Hyperledger Fabric practice (v2.0)
wonyong hwang
 
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XpressEngine
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XpressEngine
 
Manage book project
Ann Byung Hyun
 
Ffmpeg for android
seunghyuk choi
 
안드로이드 와 디바이스 드라이버 적용 기법
chon2010
 
Docker 기반 개발환경 구축 - XE Open seminar #2
XpressEngine
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
Jaeseung Ha
 
Grunt 사용법 간단정리
SuHyun Jeon
 
Docker (Compose) 활용 - 개발 환경 구성하기
raccoony
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
현철 조
 
Startup JavaScript 9 - Socket.IO 실시간 통신
Circulus
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
pyrasis
 
제 5회 Lisp 세미나 - 클로저 개발팀을 위한 지속적인 통합
NAVER D2
 

Similar to Html5+js with game engine cocos2d-html5 분석 @KGC2012 (20)

PDF
17. cocos2d 기초
Sangon Lee
 
PDF
동국대 앱창작터 1일차:Cocos2d-X 소개, 환경설정, 주요개념
Changhwan Yi
 
PPTX
Cocos2d x a to z (상)
SeungIl Choi
 
PPTX
Cocos2d x v3.0 무엇이 달라졌나? (20140426)
SeongWan Kim
 
PDF
Cocos2d 기초
Changwon National University
 
PDF
Html5 게임 기술의 개요
Changhwan Yi
 
PDF
HTML5 게임 엔진 - OK캐쉬백 게임이벤트 개발 사례
Junki Kim
 
PPTX
[IGC 2017] 엔지메이킹 이대희 - 이제는 웹에서 게임을 만들 수 있는 환경 'Construct3를 바탕으로'
강 민우
 
PDF
[111217 아꿈사연말모임] 웹소켓과온라인게임
sung ki choi
 
PDF
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
funmeate
 
PPTX
2016.02.20 어쩌다보니 cocos2d x 사용하게 된 이야기 업로드용
은아 정
 
PDF
2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈
Changhwan Yi
 
PDF
Cocos2 d 모바일 게임 개발하기 & 게임 서비스 준비를 위한 tip
Alex Kang
 
PDF
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
JinKwon Lee
 
PDF
Ccx03.cocos builder
우진 이
 
PDF
동국대 앱창작터 5일차:Cocos2d-X 확장기능
Changhwan Yi
 
PPTX
Cocos2dx와 c++11를 이용한 게임 개발
권 태혁
 
PPTX
초코파이 엔진 프로토타입 기능
준철 박
 
PDF
Sencha touch2-sdk-tools-window
Byoung Do Ahn
 
PDF
동국대 앱창작터 2일차:Cocos2d-X 기본기능
Changhwan Yi
 
17. cocos2d 기초
Sangon Lee
 
동국대 앱창작터 1일차:Cocos2d-X 소개, 환경설정, 주요개념
Changhwan Yi
 
Cocos2d x a to z (상)
SeungIl Choi
 
Cocos2d x v3.0 무엇이 달라졌나? (20140426)
SeongWan Kim
 
Cocos2d 기초
Changwon National University
 
Html5 게임 기술의 개요
Changhwan Yi
 
HTML5 게임 엔진 - OK캐쉬백 게임이벤트 개발 사례
Junki Kim
 
[IGC 2017] 엔지메이킹 이대희 - 이제는 웹에서 게임을 만들 수 있는 환경 'Construct3를 바탕으로'
강 민우
 
[111217 아꿈사연말모임] 웹소켓과온라인게임
sung ki choi
 
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
funmeate
 
2016.02.20 어쩌다보니 cocos2d x 사용하게 된 이야기 업로드용
은아 정
 
2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈
Changhwan Yi
 
Cocos2 d 모바일 게임 개발하기 & 게임 서비스 준비를 위한 tip
Alex Kang
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
JinKwon Lee
 
Ccx03.cocos builder
우진 이
 
동국대 앱창작터 5일차:Cocos2d-X 확장기능
Changhwan Yi
 
Cocos2dx와 c++11를 이용한 게임 개발
권 태혁
 
초코파이 엔진 프로토타입 기능
준철 박
 
Sencha touch2-sdk-tools-window
Byoung Do Ahn
 
동국대 앱창작터 2일차:Cocos2d-X 기본기능
Changhwan Yi
 
Ad

More from Chanho Song (8)

PDF
Unicode @KASA
Chanho Song
 
PDF
스마트폰 해킹과 대응 @KGC2013
Chanho Song
 
PDF
스마트폰 해킹과 대응 @KASA
Chanho Song
 
PPT
No silver bullet @KASA open seminar
Chanho Song
 
PPT
No silver bullet
Chanho Song
 
PPT
No silver bullet
Chanho Song
 
PPT
No silver bullet
Chanho Song
 
PPT
No silver bullet
Chanho Song
 
Unicode @KASA
Chanho Song
 
스마트폰 해킹과 대응 @KGC2013
Chanho Song
 
스마트폰 해킹과 대응 @KASA
Chanho Song
 
No silver bullet @KASA open seminar
Chanho Song
 
No silver bullet
Chanho Song
 
No silver bullet
Chanho Song
 
No silver bullet
Chanho Song
 
No silver bullet
Chanho Song
 
Ad

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

  • 1. Gam html5 with e engine JS+ cocos2d- html5 분석 ANBSoft 게임공학기술연구소 송찬호 [email protected] twitter : copperwhale
  • 2. d game eng ine or lib J S+html5 an FlashJS LimeJS Jaws HTML5 From : jswiki/Game-Engines
  • 4. cocos2d 2D 게임 같은 인터렉티브 어플리케이션을 만들 기 위한 오픈 소스 프레임워크
  • 5. cocos 2d 기본 컨셉 1. CocosNode 2. Director 3. Scene 4. Layer 5. Sprite 6. Action
  • 6. 본 컨셉 - CocosNode cocos2d 기 cocos2d의 모든 클래스가 CocosNode를 상속 하여 구현 ● position, scale, visible 등 기본 속성 ● 계층 구조를 위한 add, remove, reorder ● schedule 기능
  • 7. 기본 컨셉 - Director cocos2d 어플리케이션을 구성하는 여러 Scene들 가운 데 무엇이 활성화 되는지 흐름을 관리
  • 8. - Scene cocos 2d 기본 컨셉 스테이지 나 타이틀 처럼 어플리케이션의 흐름 의 독립적인 한 부분을 정의하는 단위
  • 9. - Layer cocos 2d 기본 컨셉 화면을 구성하는 단위로 하나 이상의 Layer를 정의하여 하나의 Scene을 구성
  • 10. - Sprite cocos 2d 기본 컨셉 이동, 회전, 크기변환, 애니메이션 등을 적용할 수 있는 2D 이미지
  • 11. - Action cocos 2d 기본 컨셉 CocosNode 객체(Scene, Layer, Sprite 해당 됨)에 position, rotation, scale 등과 같이 객체 의 속성을 시간에 따라 변경하는 것을 처리
  • 12. co cos2d의 가족 cocos2d +cocos2d-iphone +cocos2d-android +cocos2d-javascript +cocosBuilder +cocos2d-x +cocos2d-html5 <- !!!
  • 14. coc os2d-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
  • 15. Closure Co mpiler - 1 Google Javascript를 최적화 해서 브라우져에서 다운로 드와 실행 속도를 향상
  • 16. Closure Co mpiler - 2 Google "Advanced mode" 적용 ● 게임 로직과 묶어서 하나의 파일로 패키징 가능 ● 코드 최소화(주석 및 비칸 제거 등) ● 사용하지 않는 코드 제거 ● 코드 난독화
  • 17. DOM M enu / UI html DOM 방식으로 메뉴 구성 가능 ● 정적인 메뉴를 구성시 매 프레임 다시 그리 지 않아 속도향상 ● 텍스트 출력 속도 향상
  • 18. d Javascript API style Uni fie 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));
  • 19. cocos2d -html5 1/2 cocos2d-x 와 cocos2d-x 기반 제작 비슷한 구조로 비교 분석이 쉽다. ● Cocos2d-html5-v2.0.zip 안의 cocos2d폴더 와 cocos2d-2.0-x의 cocos2dx 폴더가 비슷 한 구조로 구성 되어 있음
  • 21. 라이 브러리 구성 cocos2d-x ● cocos2dx 폴더 내부의 cpp를 컴파일 .lib나 . a 등 라이버러리 생성 cocos2d-html5 ● cocos2d 폴더 내부의 js 파일을 google closure compiler 로 라이브러리 js파일 생 성
  • 25. 게 임의 구성 html 파일 + js 파일 로 구성 ● html 파일은 canvas 정의 - id와 크기 지정 ● js 파일은 어플리케이션 로직 및 엔진
  • 26. 파일 구성 index.html - 캔버스 정의 및 cocos2d.js 로딩 cocos2d.js - 엔진 초기화 및 게임 코드 파일 로딩 main.js - 엔진에 게임 객체 생성 및 전달 resource.js - 리소스 목록 정의 myApp.js - 'Hello World' 메시지 및 이미지 출력 build.xml - google closure compiler를 이용한 통합 파일 생성을 위한 ant 빌드 스크립트
  • 27. l 파일 - in dex.html htm Canvas 정의 x JS 호출
  • 28. 파일 - coc os2d.js 1/2 JS 엔진 정보 설정 게임 로딩 정보 설정
  • 29. 파일 - coc os2d.js 2/2 JS 게임의 코드 파일 목록 패키지 및 엔진 로딩 방법 정의
  • 30. JS 파일 - m ain.js 1/3 게임 객체 정의 게암 객체 생성
  • 31. JS 파일 - m ain.js 2/3 엔진 초기화 디렉터 초기화 (AppDelegate)
  • 32. JS 파일 - m ain.js 3/3 게임 초기화 완료 게임의 시작 씬
  • 33. JS 파일 - r esource.js 리소스 과련 매직 넘버 정의 전체 리소스 목록
  • 34. 파일 - myA pp.js 1/2 JS Hello World 화면 갱신 알림 엔진 로고 엔진 정보 종료 버튼
  • 35. 파일 - myA pp.js 2/2 JS CircleSprite (화면 갱신 알림) ● 매 프레임 갱신되는 객체 ● 기본 도형 그리는 함수로 그림 Helloworld (cc.Layer 확장) ● 종료 버튼 이미지 및 이벤트 정의 ● 'Hello World' 문구, 화면 갱신 알림 및 엔진 로고 이미지 객체 생성 및 에이 메이션 정의 HelloworldScene (cc.Scene 확장) ● Helloworld 레이어 생성 및 등록
  • 36. Hello HTM L5 World hello HTML5 world
  • 37. l 파일 - build.xml 1/2 xm 컴파일러 정의 (google closure compiler) 컴파일 결과 정의
  • 38. l 파일 - build.xml 2/2 xm 엔진 소스 목록 게임 소스 목록
  • 39. ant 빌드 1/2 ant 빌드 실패 엔진 파일 목록에 존재하지 않는 파일이 있어 빌드 실패 <file name="keypad_dispatcher/CCKeypadDelegate.js"/> <file name="keypad_dispatcher/CCKeypadDispatcher.js"/>
  • 40. 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"/> 로 수정해야 합니다.
  • 41. 과 - myAp p-v0.1.js 빌드 결
  • 43. - cocos2d- x win32 1/3 b oot engine run() 호출
  • 44. - cocos2d- x win32 2/3 b oot engine mainLoop() 호출
  • 45. - cocos2d- x win32 3/3 b oot engine 1. main.cpp a. CCApplication::sharedApplication()->run(); 2. platform/CCApplication.cpp - run() b. applicationDidFinishLaunching() c. looping CCDirector::sharedSirector()->mainLoop()
  • 46. - cocos2d- html5 1/8 b oot engine cocos2d.js 로딩
  • 47. - cocos2d- html5 2/8 b oot engine DOM 로딩 완료 엔진 및 게임 스크립트 파일 정의 스크립트 로딩 (jsloader.js)
  • 48. - cocos2d- html5 3/8 b oot engine 엔진 로딩 목록 main.js 로딩 목록 추가
  • 49. - cocos2d- html5 4/8 b oot engine 리소스 로딩중 표시 로딩 완료 후 호출
  • 50. - cocos2d- html5 5/8 b oot engine run() 호출
  • 51. - cocos2d- html5 6/8 b oot engine applicationDidFinishLaunching() 호출 mainLoop() 호출 mainLoop() 호출
  • 52. - cocos2d- html5 7/8 b oot engine 1. index.html a. cocos2d.js 로딩 2. cocos2d.js b. 즉시 실행 함수에서 DOM로딩 직후 jsloader.js 로딩 3. jsloader.js - (여러 js을 읽는 경우) c. 즉시 실행 함수에서 모든 엔진 코드 및 main.js 로딩
  • 53. - cocos2d- html5 8/8 b oot engine 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();
  • 54. boot up 비교 cocos2d-x ● 플랫폼 별 다른 엔트리 포인트에서 CCApplication.cpp 의 run() 호출 ● 윈도의 경우 platform/win32/CCApplication.cpp 의 run() 에서 mainLoop() 호출 cocos2d-html5 ● 엔진 및 어플리케이션 코드 로딩 ● 로딩 과정에서 즉시 실행 함수로 초기화 ● 로딩 완료 이벤트 수신 후 platform/CCApplication.js 의 run() 에서 mainLoop() 호출
  • 55. 2개의 main Loop() ?? etc - mainLoop() 호출 Looping callback 등록 mainLoop() 호출 Looping callback 등록
  • 56. html5 - javascript 게임 개 발을 위한 기능들
  • 57. 패턴 1/2 을 위한 Jav ascript 사용 게임 모듈 패턴 - 네임스페이스 패턴, 즉시 실행 함수 등 상속 패턴 - 프로토타입 목록 및 객체 정보 복사를 이용
  • 58. 패턴 2/2 을 위한 Jav ascript 사용 게임 객체 상수 - 매직 넘버를 정의하기 위한 객체 정의 방법 ... JavaScript Patterns - 자바스크립트 코딩 기법과 핵심 패턴
  • 59. Displa y - Canvas
  • 60. Displa y - WebGL
  • 61. lay - Canva s vs WebGL Disp Canvas ● 모든 시스템에서 지원 ● 상대적으로 느리지만 지속적으로 개선 WebGL ● gles 2.0 과 비슷한 사양 ● Canvas에 비해 매우 빠르고 동작 한다면 호환성 이슈 적 음 ● WebGL tutorial - Opera 개발자(Erik Moller) ● WebGL Terrain Editor
  • 62. performanc e test 1/2 Display - 2012-3-19 internet-explorer-10-fast-and-native-has-gone-to-other-browsers
  • 63. performanc e test 2/2 Display - 2011-11-18 html5-2d-gaming-performance-analysis
  • 64. D isplay - cocos2d-html5 canvas 생성
  • 65. Input addEventHandler ● 첫번째 인자로 원하는 이벤트를 지정 ○ 'keyup', 'keydown' ○ 'mousedown', 'mouseup', 'mousemove' ○ 'touchstart', 'touchmove', 'touchend', 'touchcancel' ● 두번째 인자로 이벤트 처리 함수 지정 ● 세번째 인자로 캡쳐 방식의 이벤트 처리 ○ 일반적인 경우 부모 객체에게 이벤트 전달 ○ 캡쳐 방식의 경우 부모객체에게 이벤트 전달을 하지 않음
  • 66. yboard coc os2d-html5 Input - ke 키 이벤트 등록
  • 67. - mouse coc os2d-html5 Input 마우스 버튼 누름 이벤트 마우스 버튼 업 이벤트 마우스 이동 이벤트
  • 68. Audio
  • 69. io - codec in browser Aud
  • 70. Audio 현재 ● 단순한 기능 ● 메모리에 로딩된 사운드만 출력 ● 브라우져 별 지원 코덱 다름 ● 아이폰의 경우 전체 화면이 아닌 경우 출력되지 않음 미래 ● 기능 확장을 위한 다양한 시도중 ○ 스트리밍 처리에 대해 W3C 제안 ○ 하위 수준의 API 개발
  • 71. A udio - cocos2d-html5
  • 72. N etwork - W eb socket
  • 73. o rk - Web so cket client Netw Web socket - client ● TCP 기반의 실시간 양방향 통신 가능 ● 다수의 사용자와 통신 가능 ● 사용하기 쉽다 안드로이드 계열에서는 지원하지 않음 ;;; ● iframe 나 Ajax 등 비동기 JS 계열의 기술을 이용
  • 74. o rk - Web so cket server Netw Web socket - server ● 기존 TCP 소켓 서버와 약간 다른 구현이 필요 ● 다양한 언어를 위한 오픈 소스 서버 프레임 존재 ○ jwebsocket ○ pywebsocket ○ phpwebsocket ○ web-socket-ruby ○ socket.io-node ○ ...
  • 75. high p erformance 변수 선언 위치 성능 향상을 위한 코딩 패턴 ... ● Extreme JavaScript Performance 참고자료 ● JavaScript 자바스크립트 성능 최적화
  • 76. multi browser 브라우져 마다 특성 다름...;; ● 시각적 결과 ● 지원 기능 ● 성능 ● 개개의 브라우져에 대응하도록 소스 코드 튜닝 ● 특정 브라우져만 지원, 해당 브라우져 설치 유도
  • 77. - html5 & javascript debug Firefox - Firebug Chrome - Chrome developer tool ● 브레이크 포인터, 라인 단위 실행 등 디버깅 기능 ● 변수값 표시 ● 로그 출력 ● 성능 프로파일링 ● 호출 스텍 표시 ● 리소스 로딩 모니터링 ● 기타 등등
  • 78. IDE - C onstruct 2 Make HTML5 games with Construct 2
  • 79. IDE - coc osBuilder
  • 80. IDE - coc osBuilder CocosBuilder 3 Animation Editor
  • 81. html5 - javascript 그래서...