2010-09-15 37 views
0

我尝试做一个简单的游戏引擎,它由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; 
} 
+1

努力帮助这里没有更新()和add_sprite()的代码,以及任何他们可能会调用。 – 2010-09-15 15:39:49

回答

3

您将它们添加到Game时使精灵的副本:

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

这就是为什么s1.x = 100;s2.y = 200;(在main()上不同的拷贝操作系)没有效果。

我觉得方法应该这样来代替定义:

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

这样Game将使用从main()Sprite对象。

+0

谢谢,它的工作 – nawriuus 2010-09-15 15:54:04

0

testing.add_sprite(s2);生成sprite的副本,所以在主代码中更改s1,s2的值对测试中的副本没有影响。

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