반응형
간단한 2D 게임 만들기
오늘부터 3일에 걸쳐 간단한 2D 게임을 만들어보겠습니다. 이 프로젝트를 통해 2D 게임 개발의 기본적인 흐름을 이해하고, 게임 루프, 그래픽, 입력 처리 등을 다룰 것입니다. 이 게임은 플레이어가 움직이는 사각형 캐릭터를 조작하여 적을 피하는 간단한 게임입니다.
프로젝트 준비
프로젝트 설정
- Visual Studio에서 프로젝트 생성:
- Visual Studio를 열고, 새 C++ 빈 프로젝트를 생성합니다.
- 프로젝트 이름을
Simple2DGame
으로 지정합니다.
- SFML 설정:
- SFML 라이브러리를 설치하고 프로젝트에 포함시킵니다. 이전 날 설정한 SFML 설치 및 설정을 참조하세요.
- 프로젝트 속성에서
Additional Include Directories
에 SFML의include
디렉토리를 추가하고,Additional Library Directories
에 SFML의lib
디렉토리를 추가합니다. Additional Dependencies
에sfml-graphics.lib
,sfml-window.lib
,sfml-system.lib
을 추가합니다.
게임 루프와 기본 구조
게임 루프는 게임이 실행되는 동안 지속적으로 반복되는 코드 블록입니다. 게임 루프에서는 입력 처리, 게임 로직 업데이트, 그래픽 렌더링 등이 수행됩니다.
main.cpp 파일 작성
- 헤더 파일 포함:
#include <SFML/Graphics.hpp> #include <SFML/Window.hpp> #include <SFML/System.hpp>
- 메인 함수와 게임 루프:
int main() { // 창 생성 sf::RenderWindow window(sf::VideoMode(800, 600), "Simple 2D Game"); // 게임 루프 while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } // 게임 로직 업데이트 // 화면 지우기 window.clear(); // 그래픽 렌더링 // 화면에 그리기 window.display(); } return 0; }
플레이어 캐릭터 추가
플레이어 캐릭터는 사각형 모양으로 만들어 이동할 수 있도록 합니다.
- 플레이어 캐릭터 정의:
// 메인 함수 내부에 추가 sf::RectangleShape player(sf::Vector2f(50.0f, 50.0f)); player.setFillColor(sf::Color::Green); player.setPosition(375.0f, 275.0f); // 창 중앙에 위치
- 플레이어 캐릭터 이동:
// 메인 함수의 게임 루프 내에 추가 const float playerSpeed = 200.0f; sf::Vector2f movement(0.0f, 0.0f); if (sf::Keyboard::isKeyPressed(sf::Keyboard::W)) { movement.y -= playerSpeed * deltaTime; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::S)) { movement.y += playerSpeed * deltaTime; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)) { movement.x -= playerSpeed * deltaTime; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)) { movement.x += playerSpeed * deltaTime; } player.move(movement);
- 그래픽 렌더링에 플레이어 캐릭터 추가:
// 메인 함수의 게임 루프 내에 추가 window.draw(player);
완성된 main.cpp 파일
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <SFML/System.hpp>
int main() {
// 창 생성
sf::RenderWindow window(sf::VideoMode(800, 600), "Simple 2D Game");
// 플레이어 캐릭터 생성
sf::RectangleShape player(sf::Vector2f(50.0f, 50.0f));
player.setFillColor(sf::Color::Green);
player.setPosition(375.0f, 275.0f); // 창 중앙에 위치
// 게임 루프
sf::Clock clock;
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed)
window.close();
}
// deltaTime 계산
float deltaTime = clock.restart().asSeconds();
// 플레이어 이동
const float playerSpeed = 200.0f;
sf::Vector2f movement(0.0f, 0.0f);
if (sf::Keyboard::isKeyPressed(sf::Keyboard::W)) {
movement.y -= playerSpeed * deltaTime;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::S)) {
movement.y += playerSpeed * deltaTime;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)) {
movement.x -= playerSpeed * deltaTime;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)) {
movement.x += playerSpeed * deltaTime;
}
player.move(movement);
// 화면 지우기
window.clear();
// 그래픽 렌더링
window.draw(player);
// 화면에 그리기
window.display();
}
return 0;
}
결론
첫 번째 게임 프로젝트의 첫 번째 단계를 완료했습니다. 게임 루프를 설정하고, 플레이어 캐릭터를 추가하여 움직일 수 있게 만들었습니다. 질문이나 추가적인 피드백이 있으면 언제든지 댓글로 남겨 주세요. 내일은 "Day 5: 첫 번째 게임 프로젝트: 간단한 2D 게임 만들기 (2)"에 대해 학습하겠습니다.
반응형
'-----ETC----- > C++ 게임 개발 시리즈' 카테고리의 다른 글
[C++ 게임 개발 시리즈] Day 6: 첫 번째 게임 프로젝트: 간단한 2D 게임 만들기 (3) (0) | 2024.08.01 |
---|---|
[C++ 게임 개발 시리즈] Day 7: 게임 루프와 기본 게임 구조 (0) | 2024.08.01 |
[C++ 게임 개발 시리즈] Day 5: 첫 번째 게임 프로젝트: 간단한 2D 게임 만들기 (2) (0) | 2024.08.01 |
[C++ 게임 개발 시리즈] Day 3: 개발 환경 설정 (Visual Studio, CMake, SFML/SDL 설치) (0) | 2024.08.01 |
[C++ 게임 개발 시리즈] Day 2: 게임 개발 도구와 엔진 소개 (Unreal, Unity, SFML, SDL) (0) | 2024.08.01 |