새로운 프로그래밍언어나 개발방식을 습득할때 게임만들기만큼 좋은 방법은 없다고 생각한다.

좋은 학습을 위해서는 목표의식과 흥미유발이 중요하다고 하는데,

게임을 만든다는 것 자체가 분명한 목표이고, 엄청난 흥미유발요소이기 때문이다.

게다가 게임개발에는 상당한 수준의 스킬이 필요하기 때문에 게임개발만큼 훌륭한 교보재는 없는 듯 하다.


지난 포스팅에서 HTML5 표준으로 잡힌 Canvas를 이용해서 2D 비행기게임을 만들어봤는데,

Canvas를 이용하면 생각보다 훨씬 쉽게 2D게임을 구현할 수 있었다.

이번 포스팅부터는 HTML5 Canvas위에서 3D구현을 공부할 건데, 역시나 간단한 게임개발을 목표로 진행해보겠다.


WebGL은 이름에서 알수있듯이 OpenGL과 관련이 있는 녀석인데,

2007년 출시된 OpenGL EmbadedSystem(ES) 2.0을 기반으로 나온 웹용 그래픽API이다.

OpenGL은 MS의 Direct3D와 비슷한 역활을 하는 표준 그래픽스 API로써

지금이야 DirectX가 Windows와 콘솔용 3D개발을 상당히 잠식했지만, 2000년대 초까지만 하더라도 OpenGL도 꽤나 많이 사용 되었다.


OpenGL을 익힌적 있는 개발자라면 쉽게 WebGL을 시작할 수 있지만,

내가 2000년대 초반 잠시 공부했던 OpenGL은  1.0버젼이라....

현재의 OpenGL과는 모습도 많이 다르고, 무엇보다 기억도 나지 않는다.

따라서 아주 기초부터 차근차근 할 것이다.

Javascript는 따로 공부해본적도 없고,

WebGL은 처음 접하기 때문에 둘다 시작하는 입장에서 쉽게 쉽게 가보겠다.


우선 아주 기초적인 WebGL을 해보겠다.

HTML5 Canvas 3D를 지원하는 브라우저를 쓰고 있다면 아래의 초록 Canvas영역이 보일 것이다.

Sorry, Your browser doesn't support HTML5 CANVAS









Google AdSense

지난번 뱅기게임 완성작에 터치 이벤트를 추가해봤다.

인터넷익스플로어를 사용하는 PC에서는 canvas게임을 할 수 없지만,

스마트폰으로 이 포스트를 본다면 게임이 가능할 것이다.



Canvas위에 떠있는 반투명레이어를 올리고, 그 레이어에 마우스 또는 터치 이벤트를 추가했다.





Sorry, Your browser doesn't support HTML5 CANVAS

Google AdSense

지난번 포스팅에 덧붙여서 좀더 게임답게 만들어보겠다.




1. 적총알 하나 추가 (귀찮아서 일단 하나ㅋㅋㅋ)

2. 충돌로직 추가(뱅기가 총알 맞는지 계산)

3. Enter키로 게임시작

4. 종료시 경과시간 기록보여주기


충돌로직은 원과 원으로 검사하며,

피타고라스의 정리(아군비행기크기제곱 + 공의크기제곱 = 두사이거리의제곱)을 이용하면 된다.


아래 소스코드에 있는 

function checkHitPlayer()

{

  var rtnVal = false;

  var distanceX = (playerUnit.x +  playerUnit.width/2) - enemyBall.x;

  var distanceY = (playerUnit.y +  playerUnit.height/2) - enemyBall.y;

  var distance = distanceX*distanceX + distanceY*distanceY;

  

  if(distance <= (enemyBall.radius + (playerUnit.width/2 -5))

                  * (enemyBall.radius + (playerUnit.height/2 -5)))

    rtnVal = true;

  

  return rtnVal;

}

부분이다.

Sorry, Your browser doesn't support HTML5 CANVAS








Google AdSense

꽤 오래전에 Canvas이미지 처리를 올리고 포스팅이 멈춰 있었다.

오늘은 키입력을 받아서 이미지를 이동시키는 걸 포스팅해본다.

슈팅게임제작의 서막이라고나 할까?





움직이는 이미지는 아래의 그림을 불러들여서 비행기 하나만 뽑아쓰려고 한다.



주의사항1 - 키 멀티입력

키 입력을 받더라도...

javascript는 한번에 하나의 키입력만 인식한다.

키입력을 하나씩 받으면 물체를 상/하/좌/우로 움직이는건 가능한데,

대각선 움직임처럼 상+좌를 인식하기 위해 다른 방법을 강구해봤다.


주의사항2 - 더블버퍼링

지금은 오브젝트 하나 출력이라 깜빡임이 없겠지만,

총알등이 늘어나면 깜빡임이 생긴다.

가상의 추가캔버스를 이용한 더블버퍼링을 사용하도록 한다.



아래의 캔버스 화면은 화살키 또는 W,A,S,D로 비행기를 움직이게 되어있다.

(크롬이면 잘 될꺼고, InternerExplorer는 아마 10버젼부터 나오질않을까.. 말까.. 한다)

Sorry, Your browser doesn't support HTML5 CANVAS








Google AdSense

HTML5 Canvas에서 이미지를 표시하는걸 알아보겠다.

이미지API에서 허를 찌르는 요소가 있는데, 잘 보길 바란다.

 

 

여기서 쓰일 이미지는 아래의 이미지이다.

 

<64x64이미지가 4장 붙어 있는 이미지. 출처-http://opengameart.org>

 

 

1. 이미지 처리 기본

  canvas의 이미지뿌리는 API는 drawImage()이다.

 

Javascript를 통해 Canvas에서 이미지 정보를 읽어들이는 부분을 작성해보자

var canvas1 = document.getElementById("CANVAS_1");

var context1 = canvas1.getContext("2d"); 

var catImage = new Image();

 

catImage.src = "https://t1.daumcdn.net/cfile/tistory/25679E435319402A2B";

catImage라는 변수에 Image를 생성해서 넣고,

catImage.src를 통해 그림의 위치를 지정해 넣었다.

 

이제 그림이 성공적으로 로딩되면,

그 그림을 뿌리는 부분을 작성해보자

catImage.addEventListener('load', eventCatImageLoaded, false);

function eventCatImageLoaded()

{

    context1.drawImage(catImage, 0, 0);

}

catImage에 load이벤트를 걸었다.

load가되면 eventCatImageLoaded()라는 함수를 호출하게 했고,

함수안에선 캔버스 컨텍스트에 이미지 좌표 0,0에 그리게 했다.

 

 

2. 이미지 확대/축소

 앞에서 사용했던 drawImage()함수에 가로, 세로 인자를 추가하면 이미지를 확대/축소할 수 있다. 

 

 

 

3. 이미지 자르기

 앞에서 사용했던 drawImage()함수에 이미지 자르는 지점을 추가하면 이미지를 자르고, 확대/축소할 수 있다.

다만, 인자값의 순서를 조심하라!!! 진짜 허를 찌르는 인자구성이다.

 

 

 

다음 포스트에서는 이미지자르기와 setInterval()을 이용한 기본적인 sprite기능을 알아보겠다.

.... 라고 했지만, 2015년 2월 11일 현재, 글쓰기 귀찮아짐.

이전 포스트의 index.html파일을 다운받아서 소스를 보면 됨


 

 

Google AdSense

+ Recent posts