使用GDI +

时间:2019-05-09 00:32:54

标签: c++ gdi+

我正在编写跳棋游戏。

我在屏幕上有木板图,并且在其原始位置上有碎片。我想在每次移动一块时重新绘制木板。

当我运行函数以重画电路板时,出现以下错误。当我在指向位图的指针上使用GDIplus函数.get()时,就会发生这种情况:

Exception thrown at 0x6815CD2F (GdiPlus.dll) in Step2.exe: 0xC0000005: Access violation reading location 0xCCCCCCD0.

我将图块和游戏块推回向量,如下所示:

void CBoard::getPieces()
{
    while(mGamePieces.size() < 12)
    {

        CWhitePiece* white = new CWhitePiece();
        mGamePieces.push_back(white);
    }
    while (mGamePieces.size() < 24)
    {

        CBrownPiece* brown = new CBrownPiece();
        mGamePieces.push_back(brown);
    }
}

要绘制游戏片段,请在每个游戏片段上调用Draw:

void CGamePiece::Draw(Gdiplus::Graphics * graphics)
{
    double wid = 100;
    double hit = 100;
    graphics->DrawImage(mImage.get(),
        float(mTile->getColumn() / 2) + 100 * mTile->getColumn(), float(mTile->getRow() / 2) + 100 * mTile->getRow(),
        100.0, 100.0);
}

第一次绘制完美。要移动一块,我更改了与其关联的图块(这将更改其绘制位置),然后尝试重新绘制该板。重新绘制时,当在类型为std :: unique_ptr的mImage上调用.get()并在创建游戏块时设置时,会发生分段错误。

我意识到,如果在尝试移动一块之前尝试多次画板,则不会出现此错误。它只会在我尝试移动一件物品后发生。

现在这是我在move()中拥有的一切:

void CBoard::move()
{
    // Find piece to move
    // Display possible destinations
    shared_ptr<CGamePiece> gamePiece = findPieceToMove();


    if (gamePiece != nullptr && gamePiece->getColor() == "Brown")
    {

        DrawPieces(mGraphics);
    }
    else if (gamePiece != nullptr && gamePiece->getColor() == "White")
    {

        DrawPieces(mGraphics);
    }


}

0 个答案:

没有答案