让画面动基本就是不停的擦不停的画,再我加上一些效果的时候就出了问题,比如 游戏的背景是张图片,活动的砖块也是由几张图片拼起来的,擦的时候就出现了很大的题,如果我只是在一个控件上操作,我必须先擦掉砖块还有背景,然后再画背景和砖块,这样很麻烦,而且砖块的图案还会一闪一闪效果很不多,别人建议说用二个控件进行操作,一个做背景一个砖块,但是问题很多,比如控件无法编程砖块的形状导致计算砖块重叠或者到底有很大的难度,而且砖块的控件似乎要很多,因为有下面不停会产生新的砖块。为此我在想能不能在一个画板上做到只擦除砖块,而不擦除呢 ,这个似乎很难多做。求各位老大高手解答,有没有什么好的方法

解决方案 »

  1.   

    backgroundimage设置成背景图片,然后再内存中画一张图片,出 了方块部分就是透明的,或者设个透明色
      

  2.   

    尽一切可能不触发Paint事件你要自己写一个绘图的函数,每次方块运动的时候就调用这个函数,而不是调用Refresh
    绘制的时候你需要计算哪些方块是不需要动的,哪些方块是需要画的,哪些方块是需要擦除的
    这个计算很容易
      

  3.   

    用一个矩阵,保存方块的位置
    开辟一个缓存image,先画背景
    然后遍历每个方块,画在背景上
    全部画完,把缓存image显示出来
      

  4.   

    7楼老大说的 尽量不触发paint事件 我不明白是为什么,在游戏移除电脑屏幕肯定会触发重画事件吧 我还是无法理解您的思路 能不能说得再仔细点?8楼的思路我倒是有点清楚,使用到缓存?我可以去试试看,但是会不会依旧出现,砖块图片闪烁的效果
      

  5.   

    玩俄罗斯方块的时候,不需要改变窗口大小,所以不会触发paint事件正常情况是,只要你不跟系统申请,就不会调用OnPaint();这样的话整个窗口就不会被重回绘接下来就纯粹是绘图技巧问题了,你要清楚的知道先画什么后画什么晚上回去给你上传个我写的俄罗斯方块
      

  6.   

    刚上传的俄罗斯方块源码
    http://download.csdn.net/source/3533490