raylib:flappy_bird_만들기
flappy bird 만들기
문서의 이전 판입니다!
기본 템플릿을 통해 플래피 버드를 만들기로 하자.
아래 템프릿을 다운받아서 VS CODE를 열자
중력에 의해 내려오는 새 만들기
1. 개념
새가 내려오게 할 것이다. 중력 가속도에 따라 내려오게 할 것이다.
매 프레임마다 속도는 중력에 따라 변화할 것이므로, 가속도를 먼저 설정해주고 매프레임마다 가속도를 더하게 하면 될 것이다.
2. bird.h
다음과 같이 기본 선언을 하였다. 내려오는 속도는 매 프레임마다 가속도를 더해주는 것이므로 맨 처음에는 0이다.
그리고 새의 위치는 raylib에서 기본으로 제공해주는 vector2를 이용하였다.
- bird.h
#include "raylib.h" #define GRAVITY 0.2f; // 중력 값 : 가속도의 값이다. 한 프레임당 가속도이다. class Bird { public: void Init(); void Update(); void Jump(); void Draw(); private: Vector2 pos; float downSpeed = 0; float jumpSpeed = 40; float halfLength = 20; void CheckCollision(); };
2. bird.cpp
다음과 같이 기본 각 선언된 함수를 정의하였다. 여기까지는 코드만 보고도 이해하는데 어려움이 업을 것이다.
- bird.cpp
#include "bird.h" void Bird::Init() { pos = {40, float(GetScreenHeight()) / 2} ; } void Bird::Update() { downSpeed += GRAVITY; pos.y += downSpeed; CheckCollision(); } void Bird::CheckCollision() { if (pos.y - halfLength <= 0) pos.y = halfLength; if (pos.y + halfLength >= GetScreenHeight()) pos.y = GetScreenHeight() - halfLength; } void Bird::Jump() { downSpeed = 0; pos.y -= jumpSpeed; } void Bird::Draw() { DrawRectangle(pos.x - halfLength, pos.y - halfLength, halfLength * 2, halfLength * 2, DARKGREEN); }
3. game.cpp
이제 이것을 game.cpp에 각 구현을 하자. 다음 코드만으로 충분히 이해가 갈 것이다.
다만 Game클래스가 선언되고 나서 전체 스크린의 값을 알 수 있으므로, Game클래스가 생성되고 나서 bird.Init()를 호출해야 한다는 것을 확인하자.
- game.cpp
#include "game.h" #include "bird.h" Bird bird; Game::Game(int width, int height, std::string title) { SetTargetFPS(60); // Set our game to run at 60 frames-per-second InitWindow(width, height, title.c_str()); bird.Init(); } Game::~Game() { CloseWindow(); // Close window and OpenGL context } bool Game::GameShouldClose() const { return WindowShouldClose(); } void Game::Tick() { BeginDrawing(); Update(); Draw(); EndDrawing(); } void Game::Update() { // Update //---------------------------------------------------------------------------------- // TODO: Update your variables here //---------------------------------------------------------------------------------- bird.Update(); if (IsKeyPressed(KEY_UP)) bird.Jump(); } void Game::Draw() { // Draw //---------------------------------------------------------------------------------- ClearBackground(BLACK); bird.Draw(); //---------------------------------------------------------------------------------- }
기존과 달리, IsKeyDown()함수가 아니라 IsKeyPressed()함수를 이용하였다. IsKeyDown()함수는 키가 눌려지고 있는 상태면 계속 점프 함수를 호출하므로 게임이 너무 쉬워진다. 따라서 키를 누른 상태에서는 점프가 한번만 되게 바꿨다.
raylib/flappy_bird_만들기.1696273489.txt.gz · 마지막으로 수정됨: 2023/10/03 04:04 (바깥 편집)
로그인