본문 바로가기

프로그래밍/web

Ejecta - HTML5 Canvas to iPhone native

Ejecta는 자바스크립트 게임엔진을 만든 ImpactJS팀에서 만들었습니다. Ejecta는 브라우저 없이 HTML5의 Canvas를 구현한것입니다. 그러니까 HTML의 다른 요소들은 모두 빼고 오직 Canvas만(그리고 Audio API도) 사용할 수 있습니다. Div, Table, Form등 다른 HTML 요소들은 Ejecta에서 구현되지 않습니다. Ejecta는 HTML5의 Canvas를 아이폰에서 사용할 수 있게 OpenGL API를 이용하여 Object-C로 바꾸어 줍니다. 즉, 네이티브 앱으로 전환이 되는 겁니다.

Ejecta: http://impactjs.com/ejecta

ImpactJS팀에서 Ejecta를 만든 이유는 분명합니다. ImpactJS로 만들어진 게임을 아이폰 네이티브앱으로 바로 변환시켜서 상당한 성능 향상을 가지고 오는 것이지요. 자바스크립트로 만든 게임의 가장 큰 단점은 속도입니다. 아직 자바스크립트로 훌륭한 게임이 많이 나오지 않은 이유도 바로 속도가 발목을 붙잡고 있기 때문이죠. 데스크탑은 성능이 어느정도 받쳐 주니까 그나마 상황이 좋지만 스마트폰에서는 엄청난 끊김현상이 발생합니다. 이런 현상을 해소하기 위해 나온것이 Ejecta이죠. 

위의 동영상에서 볼 수 있듯이 Ejecta를 통해 iPhone 네이티브앱으로 포딩된 앱들의 성능이 기존 웹뷰를 통한 렝더링보다 훨씬 빠르다는것을 확인할 수 있습니다. CAAT이나 Three.js로 만든 웹도 Ejecta를 이용하면 바로 아이폰 앱으로 만들 수 있습니다. 방법도 굉장히 간단합니다. 

단순히 Canvas만 구현한다면 게임을 구현할 수 없을 것입니다. Ejecta는 Audio 또한 OpenAL 라이브러리를 이용하여 Object-C로 포팅이 됩니다. 그 뿐만이 아니라 touch, accelerometer, localStorage 또한 Object-C로 포팅되어 실제 브라우저에서 실행되는 것과 거의 비슷하게 실행됩니다.

하지만 Ejecta가 모든 Canvas API를 구현하지는 않았습니다. Gradient, shadow, text drawing등 몇가지 기능은 구현되지 않았습니다. Canvas에서 글자를 쓰고 싶으면 text drawing을 쓸 수 없고, 비트맵 폰트를 통해 글자를 써 넣을 수 밖에 없습니다. 이 부분은 조금 아쉽군요. 하지만 앞으로 Ejecta가 더 발전하면 문제가 해결될 수 있을것 같습니다.