게임 기능 추가하기
각 이벤트를 이전처럼 자세하게 설명하면, 꽤 긴 튜토리얼이 될 것입니다. 다음 이벤트를 위하여 좀 더 간단하게 진행해 보겠습니다. 기억하십시오, 조건 또는 동작을 추가하는 단계는 다음과 같습니다:
1. 새 이벤트를 삽입하려면 더블 클릭을 하거나 동작을 추가하기 위해 Add action 링크를 클릭합니다.
2. 조건/작동이 속한 객체를 더블 클릭합니다.
3. 당신이 원하는 조건/동작을 더블 클릭합니다.
4. 만약 필요하다면, 매개 변수를 입력합니다.
지금부터 이벤트는 조건 / 동작이 따르고, 매개 변수가 따르는 객체처럼 설명될 것입니다. 예를 들어, 우리가 삽입한 그 이벤트는 기록될 수 있습니다:
System 상태 추가 -> Every tick
Player 액션 추가 -> Set angle towards position -> X: Mouse.X, Y: Mouse.Y
총알 쏘기
플레이어가 클릭을 하면, 총알을 쏴야 합니다. 이는 같은 위치와 각도로 새로운 임시 객체를 생성하는 것으로서, Player의 Spawn an object (객체 생성) 동작과 함께 행해질 수 있습니다. Bullet movement (총알의 움직임)은 우리가 이전에 추가했듯이 앞으로 날아갈 것입니다. 다음 이벤트를 확인합니다:
상태: Mouse -> On click-> Left clicked (the default) (왼쪽 클릭(기본))
동작: Player -> Spawn another object -> Object(객체)를 위해, Bullet(총알)을 선택. Layer (레이어)를 위해, 1을 입력(“핵심” 레이어는 레이어 1. 컨스트럭트2는 0부터 카운트합니다.). Image point 를 0으로 둡니다.
이벤트는 이제 다음과 같을 것입니다:
게임을 실행하면, 총알이 총의 끝이 아니라, 플레이어의 중앙에서 발사되는 것을 알게 될 것입니다. 이미지 포인트를 총의 끝으로 수정해 봅시다. (이미지 포인트는 이미지 객체가 생성되는 위치를 말하는 것입니다.)
프로젝트 또는 객체 표시 줄의 Edit animations를 오른쪽 클릭합니다.
플레이어의 이미지 편집기가 다시 보일 것입니다. origin and image points 도구를 클릭합니다:
…그리고 이미지 포인트 대화 창이 열립니다:
객체의 원점이 붉은 점으로 나타나는 것을 알 수 있습니다. 그것은 객체의 “핫스팟” 또는 “피봇 포인트”라고 합니다. 만약 객체를 회전시키면, 그 원점을 중심으로 회전이 됩니다. 우리는 총을 의미하는 또 다른 이미지 포인트를 추가하기 위해, 녹색 add 버튼을 클릭합니다. 파란 점이 나타났습니다 – 우리의 새로운 이미지 포인트입니다. 플레이어의 총 끝을 왼쪽 클릭하면 이미지 포인트가 그곳에 위치할 것입니다:
이지미 편집기를 닫습니다. 앞서 추가한 Spawn an object(소환 객체)를 더블 클릭하고, Image point를 1로 변경합니다. (원점은 항상 첫 번째 이미지 포인트입니다, 컨스트럭트2는 0부터 카운트한다는 것을 기억하십시오.) 이벤트는 이제 아래와 같이 보일 것입니다. – 이제는 Image point 1 로 보일 것입니다:
게임을 실행합니다. 이제 총알이 총의 끝에서 발사될 것입니다! 하지만, 총알은 아직 아무 것도 하지 않습니다. 그렇지만, 다행히도 당신이 이벤트 시스템을 손에 넣으면, 당신은 매우 빠르게 함께 기능을 추가할 수 있습니다.
몬스터를 죽일 총알을 만들어 봅시다. 다음 이벤트를 추가합니다:
Condition: Bullet -> On collision with another object -> Monster를 선택.
Action: Monster -> Destroy
Action: Bullet -> Spawn another object -> Explosion, layer 1
Action: Bullet -> Destroy
폭발 이펙트
게임을 실행하고, 괴물을 쐈습니다. 아차, 폭발에 큰 검은 테두리가 있습니다!
당신은 처음부터 그걸 예상했고, 우리의 게임이 정말 그런 식으로 끝날 것인가에 대해 궁금했을 수 있습니다! 걱정 마세요, 그렇지 않습니다. 오른쪽 아래에 있는 객체 바(Object Bar) 또는 프로젝트 바(레이어 바와 함께 묶여 있는)에서 폭발 객체(Explosion object)를 클릭합니다. 객체의 속성은 왼쪽에 있는 속성 바에 나타납니다. 맨 아래에 있는 Blend mode의 속성을 Additive로 설정하십시오. 자 이제 게임을 다시 실행해 봅니다.
왜 이렇게 작동할까요? 바탕이 사라지고, 일반적인 이미지가 pasted on top [화면 상단]에 나타납니다. 부가적인 효과와 함께, 각 픽셀은 뒤의 배경 픽셀에 added [추가](또는 합산)됩니다. 검은 색은 제로 픽셀 값입니다, 그래서 아무것도 추가되지 않습니다 – 당신은 검은 배경을 볼 수 없습니다. 밝은 색상을 추가하면, 더 강하게 나타납니다. 그것은 폭발과 조명 효과를 위해 중요한 것입니다.
좀 더 똑똑한 몬스터 만들기
지금 몬스터들은 오른쪽 레이아웃에서 방황하고 있습니다. 그들을 좀 더 재미있게 만들어 봅시다. 우선, 그들이 임의의 각도에서 시작하도록 합시다.
Condition: System -> On start of Layout
Action: Monster -> Set angle -> random(360)
그들은 다시 볼 수 없는 곳으로, 영원히 레이아웃을 떠날 때 그들은 여전히 방황하고 있을 것이다. 그들을 내부에 있게 만듭시다. 우리가 할 일은 그들이 레이아웃을 떠날 때 플레이어를 향해 돌아오게 해야 합니다. 이것은 두 가지 방법이 있습니다: 그들을 항상 레이아웃 안에 머물게 하거나, 만약 플레이어가 살아있다면, 몬스터들이 다가오도록 하는 것입니다!
Condition: Monster -> Is outside layout
Action: Monster -> Set angle toward position -> For X, Player.X - for Y, Player.Y.
게임을 실행해 봅니다. 당신이 주변을 잠시 동안 서성거리면, 몬스터 역시 레이아웃 주위에 머문다는 것과, 그들이 모든 방향으로 이동하는 것을 알 수 있습니다. 그것은 어려운 AI이지만, 그것을 할 수 있습니다!
Now, suppose we want to have to shoot a monster five times before it dies, rather than instant death like it is at the moment. How do we do that? If we only store one "Health" counter, then once we've hit a monster five times, all the monsters will die. Instead, we need each monster to remember its own health. We can do that with instance variables.
이제, 몬스터를 순식간에 죽이는 것보다, 5번을 쏴야 죽는다고 가정해 봅시다. 우리가 어떻게 해야 합니까? 우리가 하나의 “체력” 카운터를 저장하는 경우, 우리가 몬스터를 다섯 번 맞추면 all [모든] 몬스터가 죽을 것입니다. 따라서, 우리는 own [자신의] 체력을 저장하는 each [각각의] 몬스터가 필요합니다. 우리는 그것을 instance variables [인스턴스 변수]를 통해 할 수 있습니다.