완전 초보자를 위한 Go 언어로 게임 만들기
(threedots.tech)코딩으로 재미 찾기: 게임 개발로 번아웃 극복하기
- 개발자 커뮤니티에서 자주 보이는 불만: 코딩에 대한 열정이 사라짐
- 번아웃을 해소하기 위한 팁: 코딩을 다시 즐기기 위해 자신만의 게임 만들기
- 게임 개발로 프로그래밍에 빠진 개인 경험 공유
- Go 언어와 Ebitengine 라이브러리를 사용하여 게임 개발 권장
게임 개발의 기본 원리
- 영화와 유사하게, 게임은 빠르게 연속된 이미지(프레임)의 집합
- 게임은 실시간으로 이미지를 생성하고, 사용자 입력에 따라 다음 프레임 변경
- 게임은 기본적으로 무한 루프, 이미지 그리기와 로직 업데이트 반복
프로젝트 설정
- Go 모듈 생성 및 Ebitengine 라이브러리 추가
- 게임 인터페이스의 최소 구현으로 빈 창 실행
자산 로딩
- 프로그래머 아트를 사용하거나 무료 자산 활용 권장
embed패키지를 사용하여 자산을 코드에 로드
이미지 그리기
Draw메소드 내에서 모든 그리기 작업 수행ebiten.Image의DrawImage메소드를 사용하여 다른 이미지 위에 이미지 그리기DrawImageOptions구조체를 통해 이미지의 위치, 회전, 크기 조절
게임 로직
Game구조체는 게임 상태를 유지하고Update메소드로 상태 변경- 예시로 플레이어의 위치를 (X, Y) 벡터로 유지
움직임
Update메소드에서 플레이어의 위치를 업데이트하여 움직임 구현- 키보드 입력에 따라 플레이어의 위치 변경
타이머
- 게임 내에서 시간에 따른 로직 변경을 위한 타이머 구현
Timer구조체를 사용하여 특정 시간 간격으로 이벤트 발생
게임 오브젝트
- 플레이어와 같은 게임 오브젝트를 캡슐화하여 관리
- 각 오브젝트는 자체
Update및Draw메소드를 가짐
오브젝트 생성
- 메테오 오브젝트를 생성하고 화면 가장자리에서 스폰
Game구조체는 메테오 오브젝트를 추적
총알 발사
- 총알 발사 로직과 쿨다운 타이머 구현
Player가 총알을 생성하고Game이 추적
충돌 감지
- 충돌 감지를 위해
Rect구조체와Collider()메소드 구현 - 게임의
Update에서 오브젝트 간 충돌 검사
GN⁺의 의견
이 글에서 가장 중요한 것은 개발자들이 번아웃을 극복하고 코딩에 대한 열정을 되찾을 수 있는 방법을 제시한다는 점이다. 게임 개발은 창의적이고 재미있는 프로젝트를 통해 코딩 기술을 연습하고, 동시에 새로운 언어나 라이브러리를 배울 수 있는 기회를 제공한다. 이 글은 개발자들에게 코딩을 취미로 다시 즐길 수 있는 영감을 주며, Go 언어와 Ebitengine 라이브러리를 사용한 게임 개발의 기본적인 접근 방법을 설명함으로써 흥미를 불러일으킨다.
Hacker News 의견
- 첫 번째 사용자는 새로운 언어나 그래픽 API를 배울 때 성능 테스트를 위해 파이어워크나 간단한 파티클 시뮬레이션을 작성하는 것을 선호함. 2021년에 Go와 Ebitengine을 사용하여 실험했을 때, 60fps에서 많은 픽셀을 움직일 수 있었던 놀라운 성능과 사용의 용이성에 깊은 인상을 받음.
- 두 번째 사용자는 지난해 Go 언어를 사용하여 g3n-engine을 이용한 게임 개발을 진행함. Go 언어를 좋아하고 배우고 싶어 선택했으며, 과거 2D 게임 개발 경험에 이어 3D 작업을 하고 싶어 g3n-engine을 선택함. 게임 제작은 유급 작업보다 훨씬 도전적이고 보람찬 경험이며, 학습해야 할 내용이 끊임없이 있음.
- 세 번째 사용자는 Go 언어를 위한 Ebiten API가 매우 좋으며, API 디자인에서 영감을 받을 수 있음을 언급함. 또한, Go를 C++로 변환하는 사용자 정의 컴파일러를 사용하여 게임 개발에 성능을 향상시키고, C/C++ API에 접근하며, WebAssembly에서도 좋은 성능을 제공함. 이 컴파일러는 Go 코드에서 GLSL을 생성하는 실험도 포함함.
- 네 번째 사용자는 Go 개발자는 아니지만, Go를 사용하여 게임을 만드는 한 YouTuber/Twitch 스트리머를 오랫동안 지켜봄. 해당 스트리머는 Go로 작은 MMO를 개발하고 있으며, OpenGL과 WASM을 사용하여 웹 버전을 개발함. Go의 가비지 컬렉션이 매우 견고하다고 이해함에도 불구하고, 많은 사람들이 "왜 Go로 만드는가?"라고 물음.
- 다섯 번째 사용자는 기사의 첫 부분에만 반응하며, 저자가 설명한 번아웃을 경험하고 있다면 취미를 "재정복"하기보다는 관심사를 발전시키는 것을 제안함. 이는 뇌가 정체되고 있다는 신호일 수 있으며, 프로그래밍과 다르지 않아도 좋지만, 컴퓨터 과학 이론으로 더 깊이 파고들 시기일 수 있음.
- 여섯 번째 사용자는 몇 년 동안 Ebitengine 사용자로서 만족스러운 경험을 함. Ebitengine으로 만들어진 게임의 소스를 보고 싶다면 awesome-ebitengine 목록을 확인할 것을 추천함. 해당 사용자의 itch.io 프로필에 나열된 모든 게임은 Ebitengine을 사용하여 만들어졌으며, 모두 오픈 소스임.
- 일곱 번째 사용자는 Ebitengine을 사용하여 게임을 개발 중이며, 경험이 상쾌하다고 느낌.
- 여덟 번째 사용자는 Go가 큰 게임을 작성하기에 적합한 플랫폼인지, C#을 사용하는 것을 정당화할 만큼 충분한 라이브러리와 성능이 있는지에 대해 의문을 제기함.
- 아홉 번째 사용자는 Go의 고루틴 개념 때문에 게임 제작에 적합한 언어인지 궁금해하며, 언젠가 시도해볼 생각임.
- 마지막으로, Ebitengine을 기반으로 한 게임에 대한 언급이 있으며, "Sprite 컴포넌트 예시가 어떻게 보일 수 있는지"에 대한 문장이 끊겨 있어 수정이 필요함을 지적함.