Поле класса сбрасывается в ноль - PullRequest
0 голосов
/ 15 сентября 2010

я пытаюсь сделать простой игровой движок, он состоит из 2 классов, Game

class Game
{
    protected:
        SDL_Event event;
        vector<Sprite> render_queue;

        void render();

    public:
        int SCREEN_WIDTH,
            SCREEN_HEIGHT,
            SCREEN_BPP,
            FPS;
        SDL_Surface *screen;

        Game(int width, int height, int fps);
        void reset_screen();
        void set_caption(string caption);
        bool update();
        void quit();
        void add_sprite(Sprite spt);
};

и Sprite

class Sprite
{
    public:
        float x,y;
        SDL_Surface* graphics;

        Sprite();
        void draw(SDL_Surface *target);
        void loadGraphics(string path);
};

, когда я пытаюсь изменить x или y спрайтасбрасывается до 0 в следующем кадре!

main.cpp

int main(int argc, char* args[])
{
    Game testing(640, 480, 50);
    testing.set_caption("Test");

    Sprite s1;
    Sprite s2;

    s1.loadGraphics("img1.png");
    s2.loadGraphics("img1.jpg");

    testing.add_sprite(s1);
    testing.add_sprite(s2);

    while(!testing.update())
    {
        s1.x = 100;
        s2.y = 200;
    }

    return 0;
}

Ответы [ 2 ]

3 голосов
/ 15 сентября 2010

Вы создаете копии спрайтов при добавлении их в Game:

class Game
{
        /* ... */
        void add_sprite(Sprite spt);
};

Именно поэтому строки s1.x = 100; и s2.y = 200; (работающие с другой копией в main())не имеют никакого эффекта.

Я думаю, что вместо этого метод должен быть определен следующим образом:

class Game
{
        /* ... */
        void add_sprite(Sprite &spt);
};

Таким образом Game будет использовать Sprite объекты из main().

0 голосов
/ 15 сентября 2010

testing.add_sprite (s2);создает копию спрайта, поэтому изменение значения s1, s2 в основном коде не влияет на копию в тестировании.

Необходимо передать по ссылке или по указателю на add_sprite ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...