Welcome, Guest. Please login or register. Did you miss your activation email?

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - CrosisBH

Pages: [1]
1
General / Text rendered from in a class is displayed as a dot.
« on: March 09, 2019, 08:26:31 am »
For a small project of mine, I wanted to make a game without any graphics objects and just text. I went to SFML because it seemed the best for me (plus I wanted to brush up my C++). I followed the guide up to creating text and started to branch away. I got to this point, and the text loads just fine.

My main file.

#include <iostream>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
using namespace std;

int main()
{
    //Boring window init
    cout<<"Creating window..."<<endl;
    sf::RenderWindow window(sf::VideoMode(800,600),"Space");
    window.setVerticalSyncEnabled(true);

    //Font Creation
    cout<<"Creating Font..."<<endl;

    sf::Font font;

    if(!font.loadFromFile("res/font.ttf"))
    {
        cout<<"Font could not load. Perhaps it doesn't exist?"<<endl;
    }

    sf::Text text;
    text.setFont(font);
    text.setPosition(300,300);
    text.setString("Hello World");

    cout<<"Done."<<endl;

    while(window.isOpen())
    {
        sf::Event event;
        while(window.pollEvent(event))
        {
            if(event.type == sf::Event::Closed)
                window.close();
        }

        window.clear(sf::Color::Black);

        window.draw(text);

        window.display();
    }

    cout<<"Finished!"<<endl;
    return 0;
}
 



I went on to create a class so I could create a character of any color at any position. I called it Sprite.

Sprite header
#ifndef SPRITE_H
#define SPRITE_H
#include <SFML/Graphics.hpp>

class Sprite
{
    public:
        Sprite(char Character, sf::Font font, float r, float g, float b, float x, float y);
        void draw(sf::RenderWindow& win);
        void updatePosition(float x, float y);
        void updateColor(float r, float g, float b);
    protected:
        char Character;
        float r,g,b;
        sf::Text text;
};

#endif // SPRITE_H


and the Implementation
#include "Sprite.h"
#include <SFML/Graphics.hpp>

Sprite::Sprite(char Character, sf::Font font, float r, float g, float b, float x, float y)
{
    this->Character=Character;
    this->r = r;
    this->g = g;
    this->b = b;
    text.setFont(font);
    text.setPosition(x,y);
    text.setString(Character);
    text.setFillColor(sf::Color(r,g,b));
}

void Sprite::draw(sf::RenderWindow& win)
{
    win.draw(text);
}

void Sprite::updatePosition(float x, float y)
{
    text.setPosition(x,y);
}

void Sprite::updateColor(float r, float g, float b)
{
    text.setFillColor(sf::Color(r,g,b));
}
 

I go to try and create a sprite and see how it works.

Updated main

#include <iostream>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <Sprite.h>
using namespace std;

int main()
{
     //Boring window init
    cout<<"Creating window..."<<endl;
    sf::RenderWindow window(sf::VideoMode(800,600),"Space");
    window.setVerticalSyncEnabled(true);


    //Font creation
    cout<<"Creating Font..."<<endl;

    sf::Font font;

    if(!font.loadFromFile("res/font.ttf"))
    {
        cout<<"Font could not load. Perhaps it doesn't exist?"<<endl;
    }

    Sprite Star('*', font, 0, 255, 255, 5, 5);

    cout<<"Done."<<endl;

    while(window.isOpen())
    {
        sf::Event event;
        while(window.pollEvent(event))
        {
            if(event.type == sf::Event::Closed)
                window.close();
        }

        window.clear(sf::Color::Black);

        Star.draw(window);

        window.display();
    }

    cout<<"Finished!"<<endl;
    return 0;
}
 

This is what I get



I tried some things including changing the symbol, changing the char to a string, increasing the font size, and even rewrote the class (this is my second draft of the class). I just can't figure out what's happening. I assume it's the Sprite::draw(sf::RenderWindow& win) that is causing trouble. If so, what's the best way I could draw something from another class onto the window? Thanks!

Pages: [1]
anything