遇到问题,当我试图在绘制循环中绘制一个精灵时,它不会绘制 在这个类的构造函数中,我正在设置精灵。
我有构造函数:
texture.loadFromFile("img1.png");
sprite.setTexture(texture);
精灵和纹理位于头文件
中我做了一些实验,如果我在绘制循环中使用texture.loadFromFile();
就可以了。
但是我必须每秒“重新加载”图片60次。
void PlayerReceiver::draw(sf::RenderWindow & rw){
//texture.loadFromFile("mario.png");
//std::cout<<texture.getSize().y<<std::endl;
rw.draw(sprite);
}
感谢您的回答。
答案 0 :(得分:1)
遇到问题,当我尝试在绘制循环中绘制一个精灵时 不会画在这个类的构造函数中,我正在设置精灵。
根据我对这个问题的理解,你想在构造函数中加载一个纹理和精灵,当你试图从你的绘制循环中绘制它时,它不起作用。
我有一个程序在构造函数中加载纹理并运行正常,所以我想象的是错误的(我不确定,因为我不会看到你的程序中的六行上面的帖子)是纹理和精灵对象没有在类级别定义。
这是我使用的纹理对象的头文件:
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());
}
在此之后,我只需绘制我的&#34; GraphPaper&#34;对象
mainWindow.draw(paper.getSprite());
我已经可以访问它,因为我定义了一个&#34; GraphPaper&#34;被称为&#34;纸张的对象&#34;在我的MainWindow头文件中。
#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;
};
假设这是您想要做的,那么您的问题可能在头文件中。在类级别上定义的任何对象,一旦加载,就不会被销毁,直到类本身被销毁。也许你需要确保你没有破坏构造函数所在类的引用。例如,如果你在循环中创建一个类的实例,那么循环结束类对象的那一刻将被销毁
答案 1 :(得分:0)
只是一个假设:你的导师有这个:
PlayerReceiver::PlayerReceiver()
{
sf::Texture texture;
texture.loadFromFile("img1.png");
sprite.setTexture(texture);
}
这样,纹理对象在构造函数结束后立即被销毁。 sprite
和texture
都必须是该类的成员,以便在玩家本身被销毁之前不会被销毁。
如果这不是您的问题,请发布更多代码。