SFML community forums

Help => Graphics => Topic started by: Putarda on August 14, 2016, 03:04:12 pm

Title: sprite.move() from my gameobject* is not working
Post by: Putarda on August 14, 2016, 03:04:12 pm
Hello :). So i made gameobject class where is stored sprite and texture. So i when i try to move sprite from my gameobject* it's not moving (x value is not changing).

Graphics.cpp:
        void openWindow() {

                window.create(sf::VideoMode(800, 800), Game::getGameName());
                window.setVerticalSyncEnabled(true);

                while (window.isOpen()) {

                        sf::Event event;

                        while (window.pollEvent(event)) {

                                switch (event.type) {

                                case sf::Event::Closed:

                                        Game::closeGame();

                                        break;
                                }

                        }

                        window.clear();

                        GameObject::GameObject* gameobject = GameObject::getGameObject("player_gameobject");

                        sf::Sprite sprite = gameobject->getSprite();

                        sf::Texture texture = gameobject->getTexture();
                       
                        sprite.setTexture(texture);

                        sprite.move(5, 0);

                        window.draw(sprite);

                        window.display();

                }

        }
GameObject.cpp:
#include "GameObject.h"
#include <unordered_map>

namespace GameObject {

        std::unordered_map<std::string, GameObject> gameobjects;

        GameObject::GameObject() {

                name = "";

                sprite = sf::Sprite();

                texture = sf::Texture();

        }

        GameObject::GameObject(std::string gameobject_name, sf::Sprite gameobject_sprite, sf::Texture gameobject_texture, int gameobject_position_x, int gameobject_position_y) {

                name = gameobject_name;

                sprite = gameobject_sprite;

                texture = gameobject_texture;

                sprite.setPosition(gameobject_position_x, gameobject_position_y);

        }

        void addGameObject(GameObject gameobject) {

                gameobjects[gameobject.getName()] = gameobject;

        }

        void removeGameObject(std::string gameobject_name) {

                gameobjects.erase(gameobject_name);

        }

        GameObject* getGameObject(std::string gameobject_name) {

                return &gameobjects[gameobject_name];
        }

}
And my GameObject class:
        class GameObject {

        private:

                std::string name;

                sf::Sprite sprite;

                sf::Texture texture;

        public:

                GameObject();

                GameObject(std::string gameobject_name, sf::Sprite gameobject_sprite, sf::Texture gameobject_texture, int gameobject_position_x, int gameobject_position_y);

                void setName(std::string gameobject_name) {

                        name = gameobject_name;

                }

                void setSprite(sf::Sprite gameobject_sprite) {

                        sprite = gameobject_sprite;

                }

                void setTexture(sf::Texture gameobject_texture) {

                        texture = gameobject_texture;

                }

                std::string getName() {

                        return name;
                }

                sf::Sprite getSprite() {

                        return sprite;
                }

                sf::Texture getTexture() {

                        return texture;
                }

        };
I hope someone can help me  :). Thanks.
*UPDATE* i also tried gameobject->getSprite().move(3, 0); and nothing happens...
Title: Re: sprite.move() from my gameobject* is not working
Post by: fallahn on August 14, 2016, 04:06:22 pm
You're returning copies of the sprite and texture from your game object, so you only update the copy, move it, draw it, then let it go out of scope. Ideally you want to return a reference to your game object members - or even better make game objects drawable and transformable (http://www.sfml-dev.org/tutorials/2.4/graphics-vertex-array.php#creating-an-sfml-like-entity) directly (replacing the vertex array with your sprite member).
Title: Re: sprite.move() from my gameobject* is not working
Post by: Putarda on August 14, 2016, 04:28:04 pm
Thank you for your reply. But how are sprite and texture copies? GameObject is pointer.
Title: Re: sprite.move() from my gameobject* is not working
Post by: victorlevasseur on August 14, 2016, 06:33:44 pm
sprite = gameobject_sprite;
texture = gameobject_texture;
 

Here is the copy.
Title: Re: sprite.move() from my gameobject* is not working
Post by: Hapax on August 14, 2016, 08:25:59 pm
                sf::Sprite getSprite() {

                        return sprite;
                }

                sf::Texture getTexture() {

                        return texture;
                }
                        sf::Sprite sprite = gameobject->getSprite();

                        sf::Texture texture = gameobject->getTexture();
I would say that these copies are the ones to which fallahn was referring.
Title: Re: sprite.move() from my gameobject* is not working
Post by: Putarda on August 15, 2016, 07:34:10 pm
Thank you  ;D!