工具:vs2005(C#)
目的:绘制2D小游戏地图,2D人物。人物行走时,移动背景地图表示行走。
本人C#懂的不多,希望指教。
开始,我将背景和人物分别用label实现(lBackground,lCharacter)。开始的时候装载Bitmap bmp(背景地图,jpg格式)到lBackgroud.image(人物图表,gif),Bitmap bmpCharacter到lCharacter.image。之后简单的实现了地图的移动什么的,刷新也比较理想,轻微闪烁可以接受。用gif的原因就是gif有透明度属性,在没有内容的地方设置了透明。
问题是,this.lCharacter.BackColor = System.Drawing.Color.Transparent;这个属性只能透射出其所在容器的背景,这样,在lCharacter处除了gif应该显示的内容之外就都是背景(form的Backgroud,我这里lCharacter在form内),这样显然不行,有没有什么方法可以让lCharacter透视的是其上一层控件的画面?且在lBackground移动刷新的时候不会闪来闪去?这个问题困扰了很久只能透视背景是不是有点太蠢了?我想了一些方法解决,不过都没有成功:
1,将lBackground换成Panel pBackgroud,pBackground.Controls.Add(lCharacter),每次移动的时候,移动pBackgroud相对form的位置,并移动lCharacter相对pBackgroud的位置。这样闪烁非常严重,人物连续移动的时候根本没法看。
2,在form的表面直接绘制地图,用this.CreateGraphics().DrawImage(bmp, x, y);x,y分别为制定的绘制位置,人物同样用label,但是label的透明部分还是显示form设定的背景图片或者颜色,不会显示我绘制在form表面的东西。到底怎么能实现我要的效果呢?希望大家能够给出切实可行的解决方法,因为例子本来就简单,请试验后再指教,尽量避免那些太理论(几乎就是凭空想象,试验效果其差)的提示吧,多谢了。

解决方案 »

  1.   

    另外,如果用第2种方法,直接绘制form表面,也直接在form表面绘制人物的话,人物是静态的,绘制静态的虽然没有问题,但是需要人物是动态的.我想到了用timer,结果就是,在keydown中绘制地图,timer中绘制人物动态,这时候不但闪烁,而且原有的应该是透明的部分居然也是白色了.
    也就是说,直接绘制的方法也可以,但是如何让人物动起来?而且不闪,有透视.
      

  2.   

    是不是在绘图的时候应该注意些什么?刚才尝试重新绘制这个背景,结果只绘制了gif方框内的背景,让人觉得