我正在尝试制作一个简单的游戏引擎,它包含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);
};


和雪碧

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;
}

最佳答案

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

关于c++ - 类字段重置为零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3719285/

10-11 21:48