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