0

我有一个像这样的类播放器:

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

游戏运行良好,直到 IX 窗口。那时我在 Player::draw 方法的第一行得到“访问冲突读取位置 0x00000004”。我读过这可能是由于传递了一个空指针或空引用,但我不知道如何解决这个问题。

将不胜感激任何帮助,谢谢!

4

1 回答 1

0

这很可能是因为在关闭窗口时,调用 draw 时某些东西被破坏了——很可能是系统指针。

在您的情况下,当用户想要关闭其窗口时,永远不应该调用 draw (除非 x 调用另一个函数来启动某种关闭过程)。最好的办法是首先验证系统不是 NULL 甚至更好,使用共享指针来确保它在使用时仍然有效。之后,您应该确保在窗口关闭时不调用 draw - 这应该在调用 draw 函数时完成(或以上取决于您设计应用程序的方式。

附带说明一下,除非您有缓存机制(即使这也不是最好的方法),否则您每次绘制时都在重新创建您的精灵。我建议你保留一个成员变量并在构造函数中初始化精灵。

于 2013-08-22T18:56:14.473 回答