【发布时间】:2015-03-13 03:55:45
【问题描述】:
我在一个基类中有一个纹理和精灵,它正在由另一个类扩展,但是在绘制时,精灵显示为一个白色框。我知道这与精灵丢失了它与纹理对象的链接有关,但我对 C++ 有点陌生,所以我不太确定它是怎么发生的。
这是代码(我已经删除了一些不相关的部分以减小尺寸):
皮卡.h:
#ifndef PICKUPS_PICKUP_H
#define PICKUPS_PICKUP_H
#include <SFML\Graphics.hpp>
#include "..\Player.h"
namespace Pickups
{
class Pickup
{
private:
sf::Vector2f position;
sf::Texture texture;
sf::Sprite sprite;
public:
Pickup();
bool drop(float dt);
void draw(sf::RenderWindow* window);
void setTexture(sf::String name);
void setPos(sf::Vector2f position);
sf::Vector2f getPos();
void isColliding(Player* player);
virtual void onCollect(Player* player) = 0;
};
}
#endif
pickup.cpp:
#include "Pickup.h"
namespace Pickups
{
Pickup::Pickup()
{
}
void Pickup::draw(sf::RenderWindow* window)
{
window->draw(sprite);
}
void Pickup::setTexture(sf::String name)
{
if (!texture.loadFromFile("images/pickups/" + name + ".png"))
std::cout << "Error loading image: images/pickups/" + name.toAnsiString() + ".png" << std::endl;
else
sprite.setTexture(texture);
}
}
健康.h:
#ifndef PICKUPS_HEALTH_H
#define PICKUPS_HEALTH_H
#include "Pickup.h"
namespace Pickups
{
class Health : public Pickup
{
private:
int worth;
public:
Health(sf::Vector2f position, int worth);
void onCollect(Player* player);
};
}
#endif
健康.cpp:
#include "Health.h"
namespace Pickups
{
Health::Health(sf::Vector2f position, int worth)
{
setTexture("health");
setPos(position);
this->worth = worth;
}
void Health::onCollect(Player* player)
{
player->addLives(worth);
}
}
(我不知道这是否是问题的一部分,但我也不妨发布它) 我将拾音器存储在一个向量中,如下所示:
std::vector<Pickups::Health> pickups;
【问题讨论】:
-
你应该检查
texture.loadFromFile是否成功 -
你是在调用 setTexture 之前尝试绘制吗?
-
似乎问题的原因是由于某种原因将拾音器存储在向量中......