开发超级马里奥游戏时PictureBox控件无法透明显示问题求助
解决WinForms PictureBox透明显示问题(超级马里奥游戏场景)
WinForms里的PictureBox透明不是真的穿透所有下层控件,得先搞清楚它的机制:
BackColor = Transparent只是让控件显示父控件的背景,不是重叠在它下面的兄弟控件。如果你的马里奥PictureBox和背景PictureBox都是直接挂在窗体上的兄弟控件,那它只会显示窗体的背景,根本不会理背景PictureBox的内容。
解决步骤:
- 调整控件层级:把背景PictureBox设为马里奥PictureBox的父控件。操作上可以在设计器里把马里奥PictureBox拖进背景PictureBox,或者用代码设置:
marioPictureBox.Parent = backgroundPictureBox;。之后再设置marioPictureBox.BackColor = Color.Transparent,就能正确显示背景PictureBox的内容了。 - 解决刷新异常:如果还是有闪烁或者透明区域显示不对,给背景PictureBox开启双缓冲:
backgroundPictureBox.DoubleBuffered = true; - 更稳妥的替代方案:放弃用多个PictureBox,直接在同一个PictureBox里按顺序绘制所有元素。比如在背景PictureBox的
Paint事件中,先画背景图,再画马里奥,最后画山体和灌木。这样完全由绘制顺序控制层级,彻底避免透明控件的坑。
内容的提问来源于stack exchange,提问作者daniel
相关产品推荐
相关产品推荐

