我有一个像这样的班主任:
class Player
{
public:
Player();
~Player(void);
Sprite *sprite;
Sprite *rocket;
void draw(int x, int y, SpaceInvaders *system);
}
并在Player.cpp中
void Player::draw(int x, int y, SpaceInvaders *system) {
sprite = system->createSprite("data/player.bmp");
sprite->draw(x, y);
}
Player::~Player(void)
{
sprite->destroy();
rocket->destroy();
}
这个draw方法在main中的while循环中调用:
player.draw(int(xPos), 480-32, system);
游戏运行良好,直到我在窗口X.那是我在Player :: draw方法的第一行得到“访问冲突读取位置0x00000004”的时候。 我读过它可能是由于传递空指针或空引用,但我不知道如何解决这个问题。
感谢任何帮助,谢谢!
答案 0 :(得分:0)
这很可能是因为当关闭窗口时,在调用draw时会有东西被破坏 - 很可能是系统指针。
在你的情况下,当用户想要关闭它的窗口时,永远不应该调用draw(除非x调用另一个函数来启动某种关闭过程)。最好的方法是首先验证系统不是NULL或更好,使用共享指针确保它在使用时仍然有效。之后,你要确保在窗口关闭时不调用绘图 - 这应该在调用绘图函数时(或者上面取决于你设计应用程序的方式)。
在旁注中,除非你有一个缓存机制(即使这不是最好的方法),你每次绘制时都会重新创建精灵。我建议你保留一个成员变量并在construtor中初始化sprite。