所以我试图与玩家一起画出各种各样的舞台。我真的不知道发生了什么,但我认为这与wxMemoryDC绘制位图的速度有关。
我正在尝试将一大堆位图图块加载到面板中。下面是执行此操作的代码。建议更好的方式将不胜感激。我知道有一种方法可以用wxBufferedDC来做到这一点,但我无法弄清楚如何正确地做到这一点。
void RobotWarsFrame::OnButtonStartClick(wxCommandEvent& event)
{
wxPaintDC dc(PanelArena);
if (!dc.CanDrawBitmap())
{
wxMessageBox(wxT("ERROR"), wxT("Cannot draw bitmaps on panel"),wxICON_ERROR);
Close();
}
for (short int row = 0; row < TOTAL_ROWS; row++)
{
for (short int column = 0; column < TOTAL_COLUMNS; column++)
{
wxString path(arena->getCell(row, column)->getContent()->getPathToImage().c_str(), wxConvUTF8);
wxBitmap image(path, wxBITMAP_TYPE_BMP);
if (!image.Ok())
{
wxString error;
error.Printf(wxT("Image %s did not load"), path.c_str());
wxMessageBox(error);
Close();
}
dc.DrawBitmap(image, wxCoord(column * BITMAP_DIMENSIONS), wxCoord(row * BITMAP_DIMENSIONS), false);
}
}
}
程序在每次运行时在dc.DrawBitmap的不同点崩溃。如果我在每个dc.DrawBitmap之后停止它大约半秒钟就可以了。
我很沮丧。
答案 0 :(得分:0)
你的代码是非常低效的,因为你应该真正缓存位图而不是在每次绘制期间从文件中加载它们(可能很多次),但这不应该使它崩溃。
很难知道为什么会崩溃,因为您显示的代码中没有任何明显错误。你真的应该在调试器下运行你的程序,并在崩溃时查看堆栈跟踪,它几乎肯定会有一些有价值的信息。