类字段重置为零

时间:2010-09-15 15:36:40

标签: c++ oop

我试图制作一个简单的游戏引擎,它由2个类组成,游戏

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 个答案:

答案 0 :(得分:3)

在将精灵添加到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()个对象。

答案 1 :(得分:0)

testing.add_sprite(S2);制作精灵的副本,因此在主代码中更改s1,s2的值对测试中的副本没有影响。

您需要通过引用或指针传递给add_sprite()