iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 7
0
自我挑戰組

寫遊戲初體驗系列 第 7

Day 7 Game Class

  • 分享至 

  • xImage
  •  

Game Class

我們已經知道基本的遊戲循環的基本架構了,第一天我們也用簡單的code建立的簡單地window並且將圖片繪製上了,我們可以知道一個基本遊戲當中包刮了:

  • window建立
  • 處裡使用者輸入
  • 更新遊戲邏輯
  • 遊戲元素圖形繪製

前幾天我們將所有的code都寫在main裡面,對於常打程式競賽的人來說可能很正常,但對於常寫一些專案的人來說這會令人頭痛。

為了提高我們維護性以及便於重複使用,我們會進一步地去封裝模塊,搭建出一個遊戲的雛型。

首先就是整個遊戲的封裝,也就是Game class

class Game {

public:

    Game();
    ~Game();

    void run();

    void processInput();

    void update();

    void render();

};

接著我們將昨天寫的東西分裝到各個function

  • processInput
void Game::processInput() {


    sf::Event event;
    while (window.pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
            window.close();
    }

    if(sf::Keyboard::isKeyPressed(sf::Keyboard::A))
        sprite.move(-0.1, 0);
    if(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
        sprite.move(0.1, 0);
    if(sf::Keyboard::isKeyPressed(sf::Keyboard::W))
        sprite.move(0, -0.1);
    if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
        sprite.move(0, 0.1);
}
  • render
void Game::render() {

    window.clear();

    window.draw(sprite);

    window.display();
}
  • update

目前沒什麼東西要放到這裡,所以先略過

  • 我們暫時將我們的sprite當作玩家,所以讓Game擁有它
class Game {

public:

    Game();
    ~Game() = default;

    void run();

    void processInput();

    void update();

    void render();

private:

    sf::RenderWindow window;

    sf::Texture texture;
    sf::Sprite sprite;
};

Game 初始化的時候將我們的window以及sprite初始化好

Game::Game() {

    window.create(sf::VideoMode(1280, 720), "SFML Window");

    if(!texture.loadFromFile("1.png"))
        std::cout << "Error loading file" << std::endl;

    sprite.setTexture(texture);
    sprite.setPosition(sf::Vector2f(400.f, 260.f));
    sprite.setScale(sf::Vector2f(0.1f, 0.1f));
}

至於整個遊戲循環就很簡單了

void Game::run() {

    while(window.isOpen()) {

        processInput();

        update();

        render();
    }
}

這樣我的main就可以變得很乾淨了

#include "Game.h"

int main(){

    Game game;

    game.run();

    return EXIT_SUCCESS;
}

上一篇
Day6 基本的遊戲循環
下一篇
Day 8 [OpenGL] OpenGL intro
系列文
寫遊戲初體驗30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言