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

时间:2015-06-29 08:09:13

标签: c++ inheritance sfml

我正在尝试为我正在制作的SFML游戏制作一个框架,我在继承方面遇到了麻烦。我以为我知道怎么做但是看起来不对。我希望我的主要基本上只调用GameLoop就可以了。在我的GameLoop类中,我有制作窗口和运行游戏的方法。然后我希望我的GamePlayScreen类实际处理游戏逻辑但由于某种原因我无法弄清楚如何从GameLoop继承。我正在观看一个视频而这家伙正在使用C#,这就是我无法转换它的原因。视频为https://www.youtube.com/watch?v=WhbeqOOSDEo&index=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");
}

2 个答案:

答案 0 :(得分:0)

当你新的&#39;时,会自动调用构造函数。班级。只需在GamePlayScreen中创建一个匹配的构造函数,系统将首先调用派生的构造函数 - 但签名必须匹配。

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

};

答案 1 :(得分:0)

也许这不是一个真正的答案,但我无法发表评论。 我可以看到主题是关于“处理多个屏幕”。 因此,您可以查看本教程:https://github.com/SFML/SFML/wiki/Tutorial:-Manage-different-Screens