Using Python in the Blender Game Engine - Part 7
아녕하소~! BGE에서 파이썬을 사용해서 게임을 만드는 파트 7이다. 이곳에서 우리는 적을 만들 것이다.
그래서, 필자는 앞으로가서 우리 캐릭터의 base 'template'로부터 적을 만들었다. 우리의 적은 약간 더 뚱뚱하고, 입의 아래를 향하는 엄니를 가지고 있다. 우리는 enemy 오브젝트에 ‘enemy’ property를 만든다. 그것은 우리에게 어떤 오브젝트가 적이 될 것인지를 알려줄 것이다. 우리는 또한 총알(bullet)에도 "bullet" property를 추가했다, 총알이 적과 충돌할 때 우리가 알 수 있게 하기 위해서 이다. 마지막으로, 우리는 Enemy 오브젝트에 bullet collision sensor를 추가했다. 그리고 우리의 Player에도 Enemy collision sensor를 추가했다.
좋다! 이제 우리는 필연적으로 blender property를 변경해야 한다. 이 작업을 하도록 소스코드를 변경해보자! 우리는 새로운 Python 소스 파일을 추가했다. -Enemy.py 파일. 우리의 새로운 모듈을 살펴보자!
------------------------------------------------------
from bge import logic
from bge import events
import math
def Enemy():
cont = logic.getCurrentController()
sce = logic.getCurrentScene()
obj = cont.owner
bulletcol = cont.sensors['BulletCol']
def Init():
if not 'init' in obj:
obj['init'] = 1
obj['hp'] = 3 # Set your HP at the beginning
def Update():
if bulletcol.positive:
obj['hp'] -= 1 # Decrement your HP one
bullet = bulletcol.hitObject # Get the bullet you collided with
bullet.endObject() # And destroy it
if obj['hp'] <= 0: # If you have 0 HP
obj.endObject() # Then destroy yourself
Init()
Update()
------------------------------------------------------
좋다, 이제 우리는 여기에서 Enemy의 소스코드를 볼 수 있다. 실제로 많지 않다. -우리는 enemy 오브젝트의 health 변수를 초기화하고, Update 함수에서, Bullet Collision sensor의 상태를 체크한다. 만약에 sensor가 true를 리턴하면, 우리는 enemy의 health 변수의 값이 감소되도록 만들었다. health 변수의 값이 0과 같을 경우, Enemy는 사라진다.
다음으로, 우리는 Player 코드의 변경된 부분을 보도록 한다. Player code의 이 부분은 Player가 Enemy와 충돌하는 것을 테스트한다. 그리고 충돌 할 경우, 무엇인가 일어나야 한다.
------------------------------------------------------
enemycol = cont.sensors['EnemyCol']
if enemycol.positive:
print ("You've died. Great.")
logic.restartGame()
------------------------------------------------------
그게 다다! 만약에 player가 enemy와 충돌 한다면, 우리는 간단한 디버그 라인을 출력한다. 그것은 우리가 죽임을 당했고 게임을 다시 시작한다는 것이다. Nooooo! Heheh - 지금은 그게 전부이다. 하지만 미래에는 우리가 쉽게 이것을 확장할 수 있을 것이다. 화면에 "You've died. Press Enter to restart"라는 문구를 집어넣을 수도 있다. 혹은 그것보다 더 복잡한 것도 가능하다.
필자는 전체 게임을 재시작하는 코드를 알게 되었다. 이것은 잘 동작한다. 하지만 미래에는, 이것은 단지 현제 scene만 재시작 하도록 변경해야 한다. 혹은 체크포인트로부터 다시 시작할 수 있을 것이다.
이 문서에서 주목할 것은, 모든 게임 프레임에서 logic을 실행해왔다는 것이다. 어떤 게임들에서는 이것이 필수적일 수도 있지만, 어떤 구성요소들은 모든 프레임마다 실행될 필요가 없다. 마치 총알과 같이 말이다. -총알이 충돌하는 것을 검사하는 enemy의 collision sensor는 좋은 편이다. 물론, 우리는 총알의 이동 코드를 모든 프레임에서 실행할 필요가 있다. 예제를 위해서, 아이디어는 마찬가지 이다.
So, that's about it. Download the Part 7 source code here:
MazeCrawlPart7.zip