Visual Studio修复PictureBox闪烁(C ++)

时间:2012-04-22 10:26:56

标签: image c++-cli picturebox flicker

我正在制作游戏,我必须在每个计时器刻度上重绘大约40个对象。我有大约7个类与不同的Draw(Picturebox ^ pictureBox)方法。如你所见,我为每个对象绘制方法传递pictureBox指针。由于对象太多而且可能会更多,因此pictureBox会闪烁,因为它会在对象之后绘制每个对象。有没有一种简单的方法来修复闪烁?也许以某种方式准备图像,然后在PictureBox上显示它?

1 个答案:

答案 0 :(得分:1)

  

7个具有不同Draw(Picturebox ^ pictureBox)方法的类

该签名极有可能造成闪烁。因为为了利用PictureBox中内置的双缓冲,你还有来传递一个Graphics对象。你从Paint事件中得到的那个。您现在可能正在使用CreateGraphics(),这是一个严重的闪烁错误。

正确的签名是Draw(Graphics ^ graphics)并使用如下:

private: 
    void pictureBox1_Paint(Object^ sender, PaintEventArgs^ e) {
        for each (GameObject^ obj in gameObjects) {
            obj->Draw(e->Graphics);
        }
    }

    void timer1_Tick(Object^sender, EventArgs^ e) {
        updateGame();               // move stuff around
        pictureBox1->Invalidate();  // redraw scene
    }

假设您为PictureBox和Timer控件添加了事件处理程序。