【问题标题】:Visual Studio fix PictureBox flickering (C++)Visual Studio 修复 PictureBox 闪烁 (C++)
【发布时间】:2012-05-03 06:35:44
【问题描述】:

我正在制作一个游戏,我必须在每个 Timer 滴答声上重绘大约 40 个对象。我有大约 7 个具有不同 Draw(Picturebox ^ pictureBox) 方法的类。如您所见,我为每个对象绘制方法传递了图片框指针。由于对象太多而且可能会更多,所以pictureBox 会闪烁,因为它会一个接一个地绘制每个对象。有没有简单的方法来解决闪烁?也许以某种方式准备图像,然后将其显示在 PictureBox 上?

【问题讨论】:

    标签: image c++-cli picturebox flicker


    【解决方案1】:

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

    该签名很可能会产生闪烁。因为为了利用 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 控件添加了事件处理程序。

    【讨论】:

    • 感谢您的回答。我会试试这个:)
    猜你喜欢
    • 2015-06-27
    • 1970-01-01
    • 2019-06-08
    • 2010-11-28
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    相关资源
    最近更新 更多