soma0sd

코딩 & 과학 & 교육

반응형

만드는 게임이 건설 운영 시뮬레이션이다보니 캐릭터의 이동이 아니라 직접 조작으로 화면을 옮기는 기능이 필요합니다. 오른손은 마우스로 바쁠테니 WASD이동을 하는 편이 좋겠죠. 타일맵 이동 소스코드의 move() 메서드 먼저 살펴보면 self.__cam_pos_x 값과 self.__cam_pos_y 값을 변경하는 것을 볼 수 있습니다. 이 값들은 blit_to() 메서드에서 타일 배치 좌표를 보정하는 역할을 합니다. 보정값을 바꿨으니 모든 타일의 위치가 변합니다. def blit_to(self, surface: "Surface"): """지정한 표면에 타일맵을 출력""" surface.fill(pygame.Color(0, 0, 0, 0)) xlim, ylim = self.shape xcenter = sur..

Pygame: 키보드 조작으로 타일맵 이동

게임을 제작하다보니 소스코드의 덩치가 꽤나 커져서 깃허브에 저장소를 만들었습니다. 등축투영(isometric) 타일은 정육면체를 표현할 때 윗면만 보이는 직교좌표계 타일맵과는 다르게 세 면이 동시에 같은 넓이로 보이는 타일맵을 의미합니다. 높이 표현이 수월하며 입체 표현이 용이합니다. 그러나, 타일을 그릴 때 정사각형을 기반으로 하는 직교좌표계 타일보다 그리기가 어렵고, 캐릭터의 이동방향이 기울어져있어 조작의 직관성이 떨어진다는 단점이 있습니다. 오늘은 어제 한 타일 배치에 이어 파이게임(Pygame)의 게임화면에 배치한 등축투영 타일맵을 중앙에 배치하도록 합니다. 타일맵을 그냥 배치하면 제일 위쪽의 타일부터 배치하다보니 게임 타일맵 전체가 한쪽에 치우친 것을 볼 수 있습니다. 게임을 시작할 때 한쪽에 ..

Pygame: 등축투영 타일맵을 가운데 배치하기

오늘은 등축 투영(isometric) 타일배치를 위한 좌표계를 구현해봅니다. 직교 좌표계를 등축투영 좌표계로 변환 하향식 게임에서 사용하는 직교좌표계 타일에서 왼쪽 위가 (0, 0) 좌표일 때, 이 타일 좌표계를 그대로 회전시켜 등축투영(isometric) 좌표계로 변환하면 그림처럼 왼쪽 끝이 (0. 0) 좌표계가 됩니다. 하지만 이대로 타일을 배치하면 문제가 발생합니다. 타일을 x가 0인 지점부터 차례대로 채운다고 하면 랜더링 하는 순서로 인해 그림과 같은 문제가 생깁니다. 원점을 꼭대기 부분으로 바꾸지 않으면 계산이 편하긴 하겠지만 랜더링 순서로 인해 맵에 벽이나 언덕 타일이 있는 경우 심각한 문제가 발생합니다. 타일셋 이미지 예제를 작성하기 전에 타일셋 이미지를 프로젝트 디렉토리 내부의 asset/..

Pygame: 등축투영 타일의 좌표

오늘은 aseprite를 사용하여 64x64 타일을 기준으로 등축 투영(isometric) 바닥 타일을 그려봅니다. 기본 패턴 바닥 타일은 하단의 사각박스로 시작합니다. 실선과 점선 타일의 외곽선을 실선이나 점선으로 표현하는 방법입니다. 패턴 기초적인 패턴과 질감을 표현하는 기초적인 방법입니다. 객체 추가하기 입체감이 필요한 사물을 바닥에 배치하는 방법입니다. 예시는 나무와 숲 타일입니다.

Pygame: 타일셋 그리기(3) - 바닥 타일셋 그리기

어제는 기본 타일셋 이미지 생성을 통해 등축 타일을 픽셀로 옮겼을 때 대략 어떤 모습일지 알아봤습니다. 오늘은 어제 본 기본 타일셋을 가지고 지형 타일셋을 그려봅니다. 사용한 응용프로그램은 다음과 같습니다. aseprite: 픽셀아트를 위한 전문도구입니다. 2D 스프라이트, 타일, 애니메이션 등을 손쉽게 그릴 수 있습니다. 스팀에서 20,500원에 구매했습니다. Tiled: 완성한 타일셋을 배치할 수 있는 맵 에디터입니다. 파이게임을 위한 패키지도 있으며 오늘은 만든 타일셋이 제대로 나오는지 확인하는 용도로 사용했습니다. 타일 크기 2D 게임에서 사용하는 등축투영 타일의 경우 32x32와 64x64, 128x128 중 하나를 사용하는 모양입니다. 32x32 타일 (c) Rodrigo-Vega 64x64 ..

Pygame: 타일셋 그리기(2) - 지형 타일셋 제작

지난번 Pygame: 타일 맵 만들기에서 이어집니다. 저번에는 건설/운영 시뮬레이션 게임에서 자주 사용하는 등축 타일맵을 사용하기로 마음먹고 기본적인 배치 방법을 살펴봤습니다. 타일 셋을 그리는 좋은 그리기 도구들이 많지만 그걸 사용하는 저는 센스가 전혀 없습니다. 무료 에셋도 많고 품질도 괜찮은 게임 에셋 스토어인 itch.io를 사용하는 방법도 있지만 코딩으로 어떻게 해볼수 있는건 해보려고 합니다. 오늘은 타일셋 이미지 하나를 생성하는 프로그램을 만들고, 최종적으로 난수의 신께 도움을 받아 필요한 등축 타일셋을 생성하는 프로그램을 만들어보려고 합니다. Pygame에서도 이미지 저장 기능을 제공하지만 순전히 제가 귀찮아서 Matplotlib을 사용했습니다. 나중에 뭔가 제대로 만들어지면 그때가서 수정할..

Pygame: 타일셋 그리기(1) - 코딩으로 기본 타일셋 생성

제가 만들 게임은 타일 맵을 사용할 계획입니다. 타일 맵은 주로 유저가 위에서 아래로 세계를 보는 형태의 하향식(Top-Down) 게임이나 플랫폼 게임 등에서 지형을 표현할 때 사용하는 방법입니다. 이 방법은 반복해서 나타나는 적은 리소스와 규칙으로 손쉽게 관리할 수 있게 해줍니다. 타일 맵의 종류 타일 맵은 형태나 분류에 따라 다양한 분류기준이 있습니다. 여기서는 하향식 게임에 사용하는 타일맵을 투영 방식에 따라 분류합니다. 우선 가장 단순한 직교좌표계를 사용하는 방식인 Orthogonal Map이 있습니다. RPG등에서 자주 활용하고, 타일을 배치할 격자를 만들기 쉬워서 많이 사용합니다. 다음은 등축 투영법을 사용하는 Isometric Map입니다. 타일 격자의 형태가 마름모꼴입니다. 여러 높이를 표..

Pygame: 타일 맵 만들기

세상에는 게임 개발을 위한 많은 게임엔진들이 있고, 그중에는 파이썬을 위한 게임 엔진들도 많습니다. 이번에는 Pygame을 사용하는 기본적인 방법을 다룹니다. 파이게임(Pygame)은 주로 2D 게임을 개발하기 위한 파이썬 패키지입니다. 파이게임은, 전용 IDE(통합개발환경)이 없습니다: 대부분의 게임개발은 소스코드에디터에서 이루어지며 게임에 사용하는 이미지, 음향 등은 별도로 작업해야 합니다. 하나의 창만 관리합니다: 물론 다른 GUI 패키지를 사용하여 새로운 창을 만들 수는 있지만 두개의 파이게임을 동시에 실행할 수는 없습니다. 3D지원이 굉장히 빈약합니다: 예제에는 3D 랜더링한 작품들이 많이 보입니다만 굉장히 코드가 난해해지고 파이게임의 모듈이 아닌 것들을 활용하기에 게임에 필요한 자원이 급격히 ..

파이썬 게임 개발: Pygame 시작하기

node.js는 자바스크립트를 이용하여 웹 페이지의 프론트엔드, 웹 서버의 백엔드, 웹 애플리케이션 등을 개발할 수 있는 환경을 제공합니다. NVM for Windows는 윈도우 OS를 위한 node.js 버전관리자입니다. nvm을 활용하면 개발하는데 여러 버전이 필요한 경우에 유용하게 사용할 수 있습니다. 윈도우 PC의 경우 여러 버전의 node.js가 필요한 상황이 아니어도 nvm을 사용하는게 큰 장점이 되는데요. 공식 홈페이지에서 시키는대로 설치하면 Windows-Build-Tools를 실행하는 과정에서 수많은 빌드 도구와 비주얼 스튜디오 도구들을 함께 설치하기 때문입니다. 기존에 비주얼 스튜디오에서 C++ 혹은 파이썬 개발을 하는 경우에는 큰 상관이 없겠지만 아닌 경우 굉장히 거추장스러운데다 쓰지..

NVM: node.js 간편 설치와 버전 변경

SCP는 SSH를 사용하여 파일을 복사하는 터미널 명령입니다. 윈도우의 PowerShell에 다양한 SSH 관련 도구가 추가되어 SSH 연결과 비슷한 방식으로 파일을 보내거나 받을 수 있습니다. File1.dat을 호스트에서 클라이언트로 전송 파일을 교환하는 장비 중 하나에는 SSH 서버가 작동중이어야 합니다. 윈도우에서는 SSH 서버 설정이 꽤 난해한편이니 리눅스에서 SSH 서버가 돌아가고 있는 상황을 가정합니다. 윈도우 장비에서 ssh를 사용해 리눅스 장비로 접속할 때, 윈도우 장비를 클라이언트 라고 하고 리눅스 장비를 호스트라고 부르겠습니다. ~는 사용자 홈 폴더를 의미합니다. 리눅스에서는 /home/{유저명}/ 경로를, 윈도우에서는 C:\Users\{유저명}\ 경로를 의미합니다. 호스트에 있는 ~..

SCP: ssh를 이용한 파일 전송

저의 경우 업무를 위해 개발을 시작할 때 대충 절차가 이렇습니다. 회사 VPN 연결 회사의 엣지컴퓨팅 개발보드에 SSH 접속 VSCode로 개발 시작 하는 절차를 거치고 있습니다. 장비마다 네트워크 이름을 별도로 설정해놓지 않아서 매번 포트스캐너를 사용하고, 22번 포트가 열려있는 장치 중에서 내부 호스트이름이 맞는 것을 찾는 것은 매우 귀찮은 일입니다. 언제나 그래왔던 것 처럼 귀찮은 반복작업은 개발자의 큰 적이죠. 파이썬을 사용해서 필요한 헤메는 절차를 자동으로 수행하는 스크립트를 구현합니다. 1 단계. 스캔범위 얻기 import socket MY_IP = socket.gethostbyname(socket.gethostname()) IP_RANGE = [".".join([*MY_IP.split("."..

[Python] 내부 IP 검색, 포트 확인, SSH 호스트네임 확인

NVIDIA 젯슨이나 라즈베리 파이 등 조금 특별한 환경에서 사용하는 파이썬 패키지는 파이썬 패키지 인덱스(PyPI)에서 제공하지 않는 경우가 많습니다. 즉 pip로 설치할 수 없거나 설치했더라도 오류가 발생합니다. 여기서는 무분투를 포함한 데비안 계열의 패키지 관리자인 APT를 사용해서 apt-get install python3-numpy와 같은 방식으로 설치한 패키지를 파이썬 가상환경에 적용하는 방법을 소개하고 간단한 bash 스크립트를 안내합니다. apt-get으로부터 가상환경의 패키지지로 옮기는 절차 apt-get downlad를 사용해서 해당하는 파이썬 패키지가 담긴 리눅스 패키지를 다운로드 dpkg -x를사용해서 패키지 압축 해제 mv를 사용해 데비안 패키지 내부의 dist-packages/ ..

Python 가상환경(venv)에 apt-get으로 설치한 패키지 집어넣기

추론 결과를 GUI에 보여주기 위해 PyQt5를 사용합니다. # PyQt5가 설치되어 있는 경우 sudo apt upgrade python3-pyqt5* # PyQt5를 새로 설치해야 하는 경우 sudo apt install python3-pyqt5* 실행 결과 스크립트 뷰어로는 QGraphicsView를 사용합니다. 비디오를 표시할 때 라벨로 표시하는 방법을 많이 사용하지만 이 때는 위젯의 repaint를 너무 많이 발생하게 만들 수 있다는 이야기를 들어서 그래픽스 위젯을 사용했습니다. 비디오 스트림 작업은 QThread를 사용했습니다. 샘플 동영상은 앞서 동영상 객체인식 예제를 만들 때 사용했던 인텔의 샘플 비디오를 사용했습니다. 앞의 예제에서 설명했던 내용들은 제외하고 주석을 첨부하였습니다. """..

NVIDIA Jetson PyQt5에서 추론도구 사용하기 -Python

이 예제는 기본 제공 모델에 포함되어 있는 ssd-mobilenet-v2를 함께 설치하는 젯슨 추론도구 설치 과정을 마친 후에 실행할 수 있습니다. 작업 공간에 샘플 비디오 다운로드 우선 작업을 위한 디렉토리를 하나 생성하고 그곳에서 인텔이 제공하는 AI 추론 테스트를 위한 샘플 비디오를 작업 공간에 내려받습니다. git clone https://github.com/intel-iot-devkit/sample-videos VSCode를 이용하여 원격 개발을 하는 경우 새로운 디렉토리를 열 때 code ~/Work와 같은 방식으로 터미널 명령을 통해서 열 수 있습니다. Python 스크립트 """Jetson Detectnet Test 샘플 비디오의 객체인식 결과를 출력하는 프로그램 """ import glo..

NVIDIA Jetson 동영상 객체인식 - Python

End of content

No more pages to load

◀ PREVNEXT ▶