我正在完成Connect 4游戏的最后一场比赛。我想让瓷砖实际上下拉而不是只是出现在插槽中,但是有一个z排序问题。
要绘制我的场景,我首先为棋盘画一个矩形,然后用背景颜色在其上画一些洞。问题是瓷砖没有空间。我之前尝试过绘制瓷砖。它会掉下来,但你不能在洞后面看到它,因为它们在我的瓷砖上用纯黄色绘制成纯黄色。我不能在黑色之后绘制它,但在黄色之前绘制它,因为黄色是先绘制的。这是一张漂亮的照片:
我有一些解决方案的可能性,但每个问题都存在问题:
使用已切出孔的电路板位图。
StretchBlt
或类似的东西实际拉伸板在不同的分辨率上看起来相同,包括不同的宽高比(相同我的意思是水平和垂直的比例,每次都有相同的比例)?参考图片,无论分辨率如何,它都适合这样的窗口。逐个像素地检查并检查要绘制的内容。
(我认为最适合的那个) - 画板,但不要在顶部打黑洞,而是让板子在这些区域透明。
这些解决方案中的任何一个(尤其是第三个)都是合理的吗?有没有一种简单的方法来解决这个z阶问题呢?
答案 0 :(得分:2)
似乎最“正确”的方式(不一定是最好的方式)就是填充一个带有孔的矩形形状,而不是稍后添加孔。
如果您正在使用GDI或GDI +,您可以通过创建包含矩形及其中所有圆圈的路径,然后填充该路径来完成此操作。
要在gdi32中执行此操作,请调用BeginPath,使用Rectangle和Ellipse函数将形状添加到路径,然后调用EndPath完成它。使用SetPolyFillMode将HDC设置为ALTERNATE模式。在HDC中选择适当的画笔,然后调用FillPath。
在GDI +中,以备用模式构造路径,使用GraphicsPath :: AddRectangle和GraphicsPath :: AddEllipse添加形状,并用Graphics :: FillPath填充它。
(你可以用绕线模式而不是替代方式来做到这一点,但是你必须要小心路径中的形状线是顺时针还是逆时针。)