Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML] Acces violation reading location

Ostatnio zmodyfikowano 2016-05-01 21:22
Autor Wiadomość
marc_xxx
Temat założony przez niniejszego użytkownika
[SFML] Acces violation reading location
» 2016-04-23 22:00:59
Siema.
Mam problem ze swoją klasą Button. Otóż w konstruktorze chcę stworzyć prostokąt o takich samych rozmiarach jak teskt. Gdy pobieram, za pomocą funkcji getLocalBounds() klasy sf::text, to debugger wyrzuca mi błąd "Acces violation reading location ....". To moja klasa button:
C/C++
class Button
    : public VInteractiveObject
{
public:
    Button( std::string ButtonTittle );
    ~Button();
    /*Button(const Button & button);*/
    void Draw( sf::RenderWindow & gameWindow ) override;
    void SetPosition( sf::Vector2f Coords );
   
private:
    sf::RectangleShape buttonShape;
    sf::Text buttonTittle;
   
    //sf::Vector2f Position;
   
    void MouseOverAction( sf::Event PEvent ) override;
};

Button::Button( std::string ButtonTittle )
{
    sf::FloatRect textBox;
    this->buttonTittle.setFont( ResourceManager::getInstance().getButtonFont() );
   
    this->buttonTittle.setString( ButtonTittle );
   
    textBox = this->buttonTittle.getLocalBounds();
    this->buttonTittle.setOrigin(( textBox.width / 2.0f ),( textBox.height / 2.0f ) );
    this->buttonTittle.setPosition( 512.0f, 384.0f );
    this->buttonTittle.setColor( sf::Color::Color( 150, 0, 128 ) );
   
    this->buttonShape.setSize( sf::Vector2f(( textBox.width + 4.0f ),( textBox.height + 15.0f ) ) );
    this->buttonShape.setOrigin(( this->buttonShape.getSize() ) / 2.0f );
    this->buttonShape.setPosition( this->buttonTittle.getPosition() );
    this->buttonShape.setFillColor( sf::Color::Green );
}
W linii
textBox = this->buttonTittle.getLocalBounds();
 występuje owy bład. Gdzieś tam w klasie MainMenu przechowuję listę przycisków, które dodaję w tej sposób:
this->Buttons.push_back( Button( "New Game" ) );
 Proszę o pomoc
P-147572
pekfos
» 2016-04-24 01:19:00
debugger wyrzuca mi błąd "Acces violation reading location ...."
A dalej co? Na pewno potrafisz korzystać z debuggera..?
P-147574
marc_xxx
Temat założony przez niniejszego użytkownika
» 2016-04-24 02:22:02
Rzuca mi jakiś wyjątek.
P-147575
pekfos
» 2016-04-24 14:31:25
Można to i tak ująć.. To podaj chociaż więcej kodu. Co to jest to ResourceManager::getInstance().getButtonFont()?
P-147604
marc_xxx
Temat założony przez niniejszego użytkownika
» 2016-05-01 21:22:42
Chciałem stworzyć klasę opartą na wzorcu singleton. Klasa odpowiada za zarządzanie zasobami - na razie prosta. Przypuszczam, że właśnie z tą klasą jest problem. Wstawiam kod klasy ResourceManager.
ResourceManager.h:
C/C++
class ResourceManager
{
public:
   
    const inline sf::Font & getButtonFont()
    {
        return buttonsFont;
    }
   
    const inline sf::Image & getMainMenuHeader()
    {
        return menuBackground;
    }
   
    void LoadResources();
   
    static ResourceManager & getInstance();
   
private:
    ResourceManager();
    ~ResourceManager();
   
    static sf::Font buttonsFont;
    static sf::Image menuBackground;
   
};
 
ResourceManager.cpp
C/C++
#include "ResourceManager.h"

sf::Font ResourceManager::buttonsFont;
sf::Image ResourceManager::menuBackground;

ResourceManager::ResourceManager()
{
}

ResourceManager::~ResourceManager()
{
}

void ResourceManager::LoadResources()
{
    if( !( buttonsFont.loadFromFile( "media/fonts/arial.ttf" ) ) )
    {
        return;
    }
   
}

ResourceManager & ResourceManager::getInstance()
{
    static ResourceManager singleton;
    return singleton;
}

Funkcja ładująca zasoby odpalana jest zaraz po wystartowaniu gry - w klasie Game.
P-147856
« 1 »
  Strona 1 z 1