Game Maker 8 실행화면 스냅샷.

한글판 'Game Maker 8'으로 어제 만들었던 팡 게임을 기억대로 따라만들기.

별 문제 없이 다 되는데 키보드에 따른 주인공의 좌우 이동이 작동안되고 있다.
알고보니 이동-좌표 점프 액션을 추가해야 하는데 1스탭 이동을 추가하여 생긴 문제였다. 바꿔서 문제 해결.

주인공 화살표로 좌우로 이동시키고 화살표 위로 화살 발사, 화살이 풍선에 닿으면 풍선이 한 단계 작은 풍선 2개로 변하고 폭죽효과 나타내기까지 적용 테스트 성공.

저장체계가 좀 다르고 실행 파일로 만드는 것도 단순한 편. 그외 본질적인 부분에선 그리 큰 차이는 없어 보인다. 그리고 winXP에서 아무 문제없이 잘 작동되고 가볍다.

16/8/16 화


나무 베기 게임 실행 스냅샷.

GameMaker 8.0 Pro로 '게임메이커 프로그래머' 책 보며 예제 16-24장 따라하기.

16장 나무 베기 게임 만들기. 게이지의 애니메이션이 안되어 헤메는 중.
낱장의 스프라이트를 적용하는게 아닌 png 파일 내부에 10개의 이미지가 있는 것을 적용해야 하는 것이었다. 따라하기 성공.

* 움직이는 스프라이트 불러와 속도 지정하기:
애니메이션 그림 파일이 포함된 파일 불러오기.
Create 이벤트 > Control-Set Variable(var: image_speed, value: 0.2) image_speed는 기지정 내부 변수로 움직이는 스프라이트 속도를 뜻하고 기본 값은 1. 0.2인 경우 원 속도의 1/5로 움직임.
* 게이지가 꽉 찼을 때 도끼 휘두르면 액션 실행되게 하기:
press Space 이벤트 > Control-Test Variable(var: floor(image_index), value: 5) 액션. floor(image_index) 중 image_index는 애니메이션 스프라이트 내부의 이미지 번호 (여기서 설정한 5번은 게이지가 꽉찬 이미지의 번호), floor()는 정수로 만드는 함수.
Main1-Change Sprite(오브젝트 선택: objWood(기본 장작 그림), 스프라이트 선택: objWoodCut(둘로 쪼개진 장작 그림)) 액션. 동일한 방식으로 도끼의 기본 그림과 내리친 모양 그림으로 설정한 Change Sprite 액션 추가.
Score-Set Score(new score: 1, Relative: On) 액션 추가하여 점수 올리기.
* 게이지가 최고가 아닐 때 도끼 휘두르면 망가진 도끼로 변하게 하기:
Else 추가, Main1-Change Sprite(오브젝트 선택: objAxe(기본 도끼 그림), 스프라이트 선택: objAxeBroken(망가진 도끼 그림)) 액션 추가.
* 큰 사이즈 폰트 사용하기:
상단 도구 모음 중 폰트 아이콘 클릭, Name: fontBig, Size: 32로 변경.
objControl의 Draw 이벤트 > Draw-Set Font(fontBig 선택) 액션 추가하여 폰트를 크게 나오게 처리. 이후 Draw Score, Draw Variable 액션으로 점수, 남은 시간 표시하게 하기.


틀린 그림 찾기 게임 실행화면 스냅샷.

17-20장 틀린 그림 찾기 게임 만들기 1-4 따라하기.

* 이미지 불러온 후 룸에 삽입
* 마우스 커서 변경 및 배경음악 삽입:
Create 이벤트 > extra-Set Cursor 액션, main1-Play Sound 액션.
* 정답 체크 오브젝트 만들기:
빨간색 네모 이미지 불러오기 스프라이트 > objClick 오브젝트로 만든 뒤 Visible 체크를 꺼서 안보이게 하기.
* 틀린 그림 클릭하면 별 표시 나오게 하기:
별모양 이미지 불러들여 objStar로 만들고
objClick에 Mouse-Left Pressed 이벤트 > Main1-Create Instance(objStar, x: mouse_x, y: mouse_y) 액션, Main1-Destroy Instance(self) 액션 추가하여 보이지 않는 빨간색 네모를 마우스로 클릭하면 빨간색 네모는 제거되고 클릭한 자리에 별모양을 그린다. 이 빨간색 네모를 룸 상의 틀린 그림이 있는 곳에 위치시키면 된다.
*틀린 그림을 모두 찾으면 클리어 이미지 나오게 하기:
Main1-Test Instance Count() 액션 활용.
*마우스로 잘못 클릭시 X 표시 나오게 하기:
검은색 네모 이미지와 X 이미지를 불러와 틀린 그림이 있는 곳을 제외한 모든 영역에 붙여넣기.
* 제한시간이 지나면 게임오버 이미지 띄우기:
objControl의 Create 이벤트 > Control-Set Variable(var: time, value: 60) 액션, Main2-Set Alarm(steps: 30) 액션 추가.
Alarm-Alarm 0 이벤트 > Control-Test Variable(var: time, value: 0, equal to) 액션, Main1-Create Instance(objOver, x: 224, y: 320) 액션 추가.
Else, Set Variable(var: time, value: -1, Relative: On), Set Alarm(steps: 30) 추가하여 제한시간 남았을 경우 1 줄이고 다시 알람 불러 반복하기.
Draw 이벤트 > Control-Draw Variable(var: time, x: 496, y: 16) 액션 넣어 남은 시간을 화면에 표시하기.
* 게임 클리어 / 게임 오버시 더이상의 마우스클릭 막기:
objClear, objOver의 Create 이벤트 > Destroy Instance(objClick / objClickWrong) 액션 2개 추가.

21-24장 자동차 게임 만들기 1-4 따라하기.
'게임메이커 프로그래머' 책 따라하기 완료.

* 좌우로 움직이는 자동차 만들기:
objCar의 Keyboard-Left / Right 이벤트 > Control-Check Empty(x: -8 / 8, Relative: On) 액션, Move-Jump to Position(x: -8 / 8, Relative: On) 액션 각각 추가.

* 자동차 도로 만들고 도로 밖으로 자동차 나가지 못하게 하기:
objBlock 추가, Visible: Off, Solid: On으로 설정, 보이지 않고 막는 효과 주기.
룸 상에서 주인공 차의 도로 좌우 변에 각각 한 개 씩 배치.

* 전역변수 이용, 가속도 만들기:
objControl의 Create 이벤트 > Set Variable(var: global.rpm, value: 0) 액션 추가. 여기서 global. 는 전역변수 선언의 접두어.
Step-Step 이벤트 > Test Variable(var: global.rpm, value: 20, less then) 액션 추가. Set Variable(var: global.rpm, value: 0.1, Relative: On) 액션 추가하여 global.rpm은 20이전까진 0.1씩 증가.
Set Variable(var: background_vspeed, value: global.rpm) 액션 추가하여 배경화면이 global.rpm 속도와 연동되어 변하게 처리.

* 가속도 변수가 적용된 장애물 자동차 만들기:
objCarEnemy의 Step-Step 이벤트 > Move-Speed Vertical(vert.speed: global.rpm) 액션 추가하여 적 자동차의 수직 속도도 global.rpm과 연동되게 처리.

* 자동차가 차선에 맞춰 2대씩 생성되게 하기:
objControl의 Create 이벤트 > Set Alarm(steps: 30) 액션,
Alarm-Alarm 0 이벤트 > Create Instance(objCarEnemy, x: 256 + irandom(7) * 64, y: -60) 액션, Set Alarm(steps: 30) 액션 추가하여 1초마다 적 차량 2대씩이 생성되게 처리.
irandom(num)은 0에서 num까지 정수값 중 한 개.
64는 각 차선간 길이, 256은 도로의 좌측 시작 x값.

* 주인공 차량이 장애물 차량에 닿으면 멈추기:
objCar의 Collision-objCarEnemy 이벤트 > Set Variable(global.rpm, var: 0),
Destroy Instance(other) 액션 적용.

* 자동차에 연료 제한 만들기:
objControl의 Create 이벤트 > Set Variable(var: global.fuel, value: 50) 액션 추가. Set Alarm(steps: 30, Alarm 1 선택) 액션 추가.
Alarm-Alarm 1 이벤트 > Set Variable(var: global.fuel, value: -1, Relative: On), Set Alarm(steps: 30, Alarm 1 선택) 액션 추가.

* 자동차 계기판 만들기:
연료 계기판과 속도계 애니 이미지 불러들이기.
objControl의 Draw-Draw GUI 이벤트 > Draw Sprite(spriteFuel, x: 64, y: 576),
Draw Sprite(spriteSpeed, x: 832, y: 574, subImage: global.rpm) 액션 추가.
subImage는 움직이는 스프라이트의 이미지 번호로 기본값은 -1(이미지 넘버를 따로 정하지 않고 자동으로 움직임). spriteSpeed는 총 21장(0~20)의 이미지로 계기판이 움직이는 형태를 표현한 스프라이트로 global.rpm 값이 커질수록 계기판 속도가 올라가는 듯 보여짐.
Draw Variable(global.Fuel, x: 97, y: 625) 액션 추가하여 연료의 값을 화면에 표시.

* 장애물 자동차가 화면 밖으로 나가면 점수 1점 추가시키기:
objCarEnemy의 Outside Room 이벤트 > Set Score(1, Relative: On), Destroy Instance(self) 액션 추가하여 나간 자동차 제거하고 점수 1점 올리기.

* 모든 연료가 소모되면 연료 고갈 이미지 나온 뒤 게임 재시작:
objControl의 Step 이벤트 > Test Variable(global.fuel, value: 0, equal to),
Create Instance(objTxtGameOver, x: 192, y: 320) 액션 추가해 연료 고갈시 게임오버 이미지 띄우기.

objTxtGameOver의 Create 이벤트 > Set Variable(var: background_vspeed, 0), Set Variable(var: global.rpm, 0) 액션 추가. 게임오버 이미지가 뜨면 배경, 적 자동차 이동 정지. background_vspeed는 배경의 수직속도를 나타내는 내부 변수.
Destroy Instance(object: objControl) 액션으로 objControl 제거.
Draw-Draw GUI 이벤트 > Draw-Draw Self 액션 추가-점수 그리기 등의 그리기 이벤트를 실행시 오브젝트 자체의 모습이 보이지 않게 되므로 이 액션을 추가시켜줘야 자신의 모습이 보인다.
Score-Draw Score(x: 240, y: 128, Relative: On) 액션 추가해 점수 표시.
Key Press-Any Key 이벤트 > Main2-Restart Game 액션 추가.