C ++ SFML 2.2图形无法渲染

时间:2015-06-08 17:22:20

标签: c++ sfml

我只是在玩C ++ SFML的东西,我有点不明白为什么我的代码不起作用。我想做的事情就是画出画像,比如5,窗口中的正方形随机放置在屏幕上使用矢量,但我不明白为什么它不起作用。并且它也没有给出任何错误,我可以像平常那样打开游戏,但它只是不渲染。

这是主要的游戏类:

#include "main_game.h"
#include "main_menu.h"

void main_game::Initialize(sf::RenderWindow* window)
{
    this->Player = new player();
    this->Player->setOrigin(this->Player->getGlobalBounds().width / 2, this->Player->getGlobalBounds().height / 2);

    this->TestObject = new testObject();
    this->TestObject->Initialize();
    this->TestObject->setOrigin(this->TestObject->getGlobalBounds().width / 2, this->TestObject->getGlobalBounds().height / 2);
}

void main_game::Update(sf::RenderWindow* window)
{
    this->Player->setPosition(sf::Mouse::getPosition(*window).x, sf::Mouse::getPosition(*window).y);
    this->Player->Update();

    if (this->Player->CheckCollision(TestObject))
    {
        this->TestObject->setColor(sf::Color::Red);
    }
    else
    {
        this->TestObject->setColor(sf::Color::Cyan);
    }

    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Escape))
    {
        coreState.SetState(new main_menu());
    }
}

void main_game::Render(sf::RenderWindow* window, std::vector<sf::Sprite> sprites)
{
    this->TestObject->Render(*window, sprites);

    window->draw(*this->Player);
}

void main_game::Destroy(sf::RenderWindow* window)
{
    delete this->Player;
    delete this->TestObject;
}

这是testObject.h类

#pragma once

#include "entity.h"

class testObject : public Entity
{
public:
    testObject();
    void Initialize();
    void Render(sf::RenderWindow &window, std::vector<sf::Sprite> sprites);
    void Update();
private:
    sf::RenderWindow window;
};

这是testObject.cpp类

#include "testObject.h"

testObject::testObject()
{
    this->Load("testObject.png");
}

void testObject::Initialize()
{
    sf::Texture testObjectTexture;
    sf::Sprite testObjectSprite;

    testObjectTexture.loadFromFile("testObject.png");
    testObjectSprite.setTexture(testObjectTexture);

    std::vector<sf::Sprite> sprites(5, sf::Sprite(testObjectSprite));

    srand(time(0));

    for (unsigned int i = 0; i < sprites.size(); i++)
    {
        sprites[i].setPosition(1 + (rand() % 1024 - 32), rand() % 640 - 32);
    }
}

void testObject::Render(sf::RenderWindow &window, std::vector<sf::Sprite> sprites)
{
    for (unsigned int i = 0; i < sprites.size(); i++)
    {
        window.draw(sprites[i]);
    }
}

void testObject::Update()
{
    Entity::Update();
}

main_game.h:

#pragma once

#include "game_state.h"
#include "player.h"
#include "testObject.h"

class main_game : public tiny_state
{
public:
    void Initialize(sf::RenderWindow* window);
    void Update(sf::RenderWindow* window);
    void Render(sf::RenderWindow* window, std::vector<sf::Sprite> sprites);
    void Destroy(sf::RenderWindow* window);
private:
    player* Player;
    testObject* TestObject;
};

1 个答案:

答案 0 :(得分:0)

一个简单的解决方法就是使用一个数组或任何其他可以通过复制存储的数据结构,而不是通过引用存储而不是通过引用存储的向量来保存精灵。

问题有两个,它不仅仅是一个范围问题,如果你将渲染函数移动到初始化范围,你将在同一个地方绘制你的精灵5次,因为你的向量中的每个元素都指向testObjectSprite的内存位置(同一个地方)。