初学者尝试通过游戏编程学习继承

Beginner trying to learn inheritance with game programming

本文关键字:编程 学习 继承 游戏 初学者      更新时间:2023-10-16

我正在为我正在制作的SFML游戏制作一个框架,但我在继承方面遇到了问题。我以为我知道怎么做,但似乎不对。我希望我的main基本上只调用GameLoop,就这样。在我的GameLoop类中,我有制作窗口和运行游戏的方法。然后我希望我的GamePlayScreen类能够真正处理游戏逻辑,但由于某种原因,我不知道如何从GameLoop继承。我正在看一个视频,那个家伙正在使用C#,这就是为什么我在转换它时遇到问题https://www.youtube.com/watch?v=WhbeqOOSDEo&索引=2&list=PLfTDIoEcaNroztBVGPA0aU3NbOauRVIe3。

GameLoop.h

#pragma once
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <string>
class GameLoop
{
public:
    GameLoop(int width, int height, std::string title);
    virtual void Run();
    virtual void LoadContent();
    virtual void Initialize();
    virtual void Update();
    virtual void Render();
    sf::RenderWindow window;
};

GameLoop.cpp

#include "GameLoop.h"

GameLoop::GameLoop(int width, int height, std::string title)
{
    window = sf::RenderWindow(sf::VideoMode(width, height), title, sf::Style::Default);
}

void GameLoop::Run()
{
    LoadContent();
    Initialize();
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }
        Update();
        window.clear();
        Render();
        window.display();
    }
}
void GameLoop::LoadContent()
{
}
void GameLoop::Initialize()
{
}
void GameLoop::Update()
{
}
void GameLoop::Render()
{
}

GamePlayScreen.h

#pragma once
#include "GameLoop.h"
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
class GamePlayScreen : public GameLoop
{
public:
    GamePlayScreen();
    void Initialize();
};

GamePlayScreen.cpp

#include "GamePlayScreen.h"
GamePlayScreen::GameLoop(800, 600, "Game");
{
}
void GamePlayScreen::Initialize()
{
    GameLoop game(800, 600, "Game");
}

当您"新建"类时,将自动调用构造函数。只需在GamePlayScreen中创建一个匹配的构造函数,系统就会首先调用派生的构造函数,但签名必须匹配。

class GamePlayScreen : public GameLoop
{
public:
    GamePlayScreen();
    GamePlayScreen(int width, int height, std::string title);
    void Initialize();
};

也许这不是一个真正的答案,但我不能发表评论。正如我所看到的,主要主题是关于"处理多个屏幕"。因此,您可以查看本教程:https://github.com/SFML/SFML/wiki/Tutorial:-管理不同的屏幕