有一个问题,当我试图在绘图循环中绘制一个精灵时,它不会绘制在这个类的构造函数中,我正在设置精灵。
根据我从这个问题的理解,您想在构造函数中加载纹理和精灵,当您尝试从绘制循环中绘制它时它不起作用。
我有一个在构造函数中加载纹理的程序,它运行良好,所以我认为是错误的(我不确定,因为我在上面的帖子中没有看到你的程序的六行)是纹理和 sprite 对象不是在类级别上定义的。
这是我正在使用的纹理对象的头文件:
class GraphPaper
{
public:
GraphPaper();
~GraphPaper();
bool isObjectLoaded();
sf::Sprite getSprite();
private:
void load(std::string filename);
bool isLoaded;
sf::Texture texture;
sf::Sprite sprite;
const std::string file = "images/Graph-Paper.png";
};
纹理和精灵对象作为私有成员在类范围级别上列出,并通过 getter 方法访问。
这是该类的构造函数(稍作改动以更好地匹配您想要完成的操作):
#include "GraphPaper.h"
GraphPaper::GraphPaper() //: isLoaded(false)
{
if (texture.loadFromFile(file) == false)
isLoaded = false;
else
{
texture.setRepeated(true);
sprite.setTexture(texture);
isLoaded = true;
}
//load(file);
assert(isObjectLoaded());
}
在此之后,我只需绘制我的“GraphPaper”对象。
mainWindow.draw(paper.getSprite());
我已经可以访问它,因为我在 MainWindow 头文件中定义了一个名为“paper”的“GraphPaper”对象。
#pragma once
#include "GraphPaper.h"
#include "stdafx.h"
class MainWindow
{
public:
void close();
void start();
void moveCamera(sf::Event);
private:
bool leftMousePressed, rightMousePressed, isExiting;
int r, g, b, mouseX, mouseY;
GraphPaper paper;
const sf::Color white = sf::Color(255, 255, 255);
sf::RenderWindow mainWindow;
sf::View view;
};
假设这是您想要做的,那么您的问题可能出在头文件中。在类级别上定义的任何对象,一旦加载,在类本身被销毁之前都不会被销毁。也许您需要确保不会破坏对构造函数所在类的引用。例如,如果您在循环中创建类的实例,则循环结束的那一刻类对象将被破坏。