我正在尝试为我正在制作的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");
}
答案 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