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

この描画メソッドは、main の while ループで呼び出されます。

player.draw(int(xPos), 480-32, system);

ウィンドウが IX になるまで、ゲームは正常に実行されます。そのとき、Player::draw メソッドの 1 行目に「アクセス違反読み取り場所 0x00000004」が表示されます。null ポインターまたは null 参照を渡すことが原因である可能性があることを読みましたが、これを修正する方法がわかりません。

助けていただければ幸いです、ありがとう!

4

1 に答える 1

0

おそらく、ウィンドウを閉じるときに、draw が呼び出されている間に何かが破壊されるためです。おそらくシステム ポインターです。

あなたの場合、ユーザーがウィンドウを閉じたいときに draw を呼び出すべきではありません( x が別の関数を呼び出して何らかのクローズプロセスを開始しない限り)。最善の方法は、システムが NULL ではないことを最初に検証することです。共有ポインターを使用して、使用時に有効であることを確認してください。その後、ウィンドウが閉じているときに draw が呼び出されないようにする必要があります。

余談ですが、キャッシング メカニズムがない限り (それが最善の方法ではない場合でも)、スプライトが描画されるたびにスプライトを再作成することになります。メンバー変数を保持し、コンストラクターでスプライトを初期化することをお勧めします。

于 2013-08-22T18:56:14.473 に答える