使用SFML在另一个类的主窗口中绘制

Drawing in the main window from another class with SFML

本文关键字:窗口 绘制 SFML 另一个 使用      更新时间:2023-10-16

我需要一些帮助,因为我正试图制作一款俄罗斯方块游戏,作为我在C++中的第一个项目,但我遇到了一些问题。

我想在主文件中保留主窗口声明,并在BoxRenderer类的同一窗口上绘制所有的Tetroinos、背景等。

但我的雪碧没有出现,我有一个黑屏,这是我的代码:

main.cpp:

// SpaceOdyssey.cpp : définit le point d'entrée pour l'application console.
//
#include "stdafx.h"
#include <iostream>
#include <SFML/Graphics.hpp>
#include "BoxRenderer.h"
using namespace std;
int main()
{
    sf::RenderWindow window(sf::VideoMode(200, 280), "Tetris-like by Orionss");
    sf::Texture bgTexture;
    if (!bgTexture.loadFromFile("sprites\background.png"))
        return EXIT_FAILURE;
    BoxRenderer renderer(bgTexture);
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
            if (event.type == sf::Event::Closed)
                window.close();
        window.clear();
        renderer.render(window);
        window.display();
    }
    return 0;
}

BoxRenderer.cpp:

#include "stdafx.h"
#include "BoxRenderer.h"
BoxRenderer::BoxRenderer(sf::Texture bgTexture)
{
    m_bgTexture = bgTexture;
}
void BoxRenderer::render(sf::RenderWindow& win)
{
    m_bgTexture.update(win);
    sf::Sprite background(m_bgTexture);
    win.draw(background);
}

来自void sf::Texture::update(const Window &window)参考:

从窗口的内容更新纹理。

在此之前,你正在清除窗口,这会覆盖你的纹理,所以它完全是黑色的。你根本不想打m_bgTexture.update(win);