小编LmS*_*SNe的帖子

双缓冲C#

我正在尝试实现以下方法:void Ball :: DrawOn(Graphics g);

该方法应该绘制球的所有先前位置(存储在队列中)并最终绘制当前位置.我不知道这是否重要,但我使用g.DillEllipse(...)打印以前的位置,使用g.FillEllipse(...)打印当前位置.

问题是,你可以想象有很多绘图要做,因此显示开始闪烁很多.我曾寻找过双缓冲的方法,但我能找到的就是这两种方式:

1)System.Windows.Forms.Control.DoubleBuffered = true;

2)SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint,true);

在尝试使用第一个时,我得到一个错误,解释说在此方法中,由于其保护级别,属性DoubleBuffered无法访问.虽然我无法想象如何使用SetStyle方法.

是否有可能将缓冲区加倍,而我拥有的所有访问权限都是我在方法中输入的图形对象?

提前致谢,

编辑:我创建了以下类

namespace doubleBuffer
{
    class BufferedBall : System.Windows.Forms.Form{
        private Ball ball;
        public BufferedBall(Ball ball)
        {
            this.ball = ball;
        }

    public void DrawOn(Graphics g){
        this.DoubleBuffered = true;
        int num = 0;
        Rectangle drawArea1 = new Rectangle(5, 35, 30, 100);
        LinearGradientBrush linearBrush1 =
        new LinearGradientBrush(drawArea1, Color.Green, Color.Orange, LinearGradientMode.Horizontal);
        Rectangle drawArea2 = new Rectangle(5, 35, 30, 100);
        LinearGradientBrush linearBrush2 =
           new LinearGradientBrush(drawArea2, Color.Black, …
Run Code Online (Sandbox Code Playgroud)

c# graphics doublebuffered

5
推荐指数
1
解决办法
7252
查看次数

标签 统计

c# ×1

doublebuffered ×1

graphics ×1