我试图制作一个简单的游戏引擎,它由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;
}
答案 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()