SFML community forums

Help => Graphics => Topic started by: Knockback on April 30, 2013, 06:26:08 pm

Title: How to Fix White Square?
Post by: Knockback on April 30, 2013, 06:26:08 pm
I already read the section for this issue on the Tutorials page, and I've read some instances of this issue around the forums; the problem is that none of this helps me much.

Since I'm a newbie at C++, I don't know the proper way to "extend the texture's lifetime as long as they are used by sprites." I was hoping someone would be able to help me fix this.

I'm currently using just a temporary method (for the purpose of testing) to draw a sprite to the window. This is all taking place within Engine:

Engine.h
#ifndef Engine_h
#define Engine_h

#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>

#include "TextureManager.h"
#include "Tile.h"

class Engine
{
    private:
        sf::RenderWindow* window;
   
        bool Initialize();
        void MainLoop();
        void ProcessInput();
        void RenderFrame();
        void Update();
       
        TextureManager textureManager;
        void LoadImages();
       
        Tile* testTile;
   
   
    public:
        Engine();
        ~Engine();
   
        void Go();
   
        sf::Texture BackgroundTexture;
        sf::Sprite Background;
};

#endif
 

Engine.cpp
#include <iostream>

#include "Engine.h"

Engine::Engine()
{
   
}

Engine::~Engine()
{
    delete window;
}




bool Engine::Initialize()
{
    window = new sf::RenderWindow(sf::VideoMode(800, 612, 32), "BattleGame - V2");
   
    if(!window)
        return false;
    else if(!BackgroundTexture.loadFromFile("BattleGame.app/Contents/Resources/BG.png"))
            return false;
         else
            Background.setTexture(BackgroundTexture);
            LoadImages();
            return true;
}




void Engine::ProcessInput()
{
    sf::Event Event;
   
    while(window->pollEvent(Event))
    {
        switch(Event.type)
        {
            case sf::Event::Closed:
                window->close();
                break;
        }
    }
}




void Engine::MainLoop()
{
    while(window->isOpen())
    {
        ProcessInput();
        Update();
        RenderFrame();
    }
}




void Engine::Update()
{
   
}




void Engine::LoadImages()
{
    sf::Texture sprite;
    sprite.loadFromFile("BattleGame.app/Contents/Resources/ConsoleGUI.png");
   
    textureManager.AddTexture(sprite);
    testTile = new Tile(sprite);
}




void Engine::RenderFrame()
{
    window->clear();
    window->draw(Background);
    testTile->Draw(0, 486, window);
    window->display();
}




void Engine::Go()
{
    if(!Initialize())
        throw "The engine failed to initialize.";
    else
        MainLoop();
}
 
Title: Re: How to Fix White Square?
Post by: Raphman on April 30, 2013, 07:46:23 pm
First of all, you should post a complete and minimal piece of code that shows your issue. What're your textureManager and Tile classes doing?

It looks like sprite is going out of scope from in load images. Does textureManager keep it? if so then your tile should reference the texture from texture manager. Also, sf::Sprite is a thing, it gets confusing when you start calling textures sprites. Read the tutorials more :)

Also I suggest you start with basic C++ and learn how to use the language etc before you jump into making a game with SFML
Title: Re: How to Fix White Square?
Post by: OniLinkPlus on May 01, 2013, 12:46:13 am
My question is why are you using new/delete? You don't need to use new/delete, and you really shouldn't be using them in the first place.

Also, please show us your complete and minimal code so we can give you proper assistance.
Title: Re: How to Fix White Square?
Post by: Knockback on May 05, 2013, 11:42:27 pm
Does textureManager keep it? if so then your tile should reference the texture from texture manager.

After calling myself an idiot after seeing what I did wrong...

I...

I love you. q-q

Kidding, but I did manage to solve it. Thanks for that! And I've already learned the C++ basics, but all-out OOP is still new ground for me.