gpt4 book ai didi

c++ - 使已经绘制的内容透明?

转载 作者:行者123 更新时间:2023-11-30 04:27:24 31 4
gpt4 key购买 nike

我正在完成 Connect 4 游戏的最后一个。我想让图 block 真正落下,而不是仅仅出现在插槽中,但存在 z 顺序问题。

为了绘制我的场景,我首先为板绘制一个矩形,然后通过在其上绘制背景颜色来在其中切出孔。问题是瓷砖没有空间。我试过先画瓷砖。它会掉下来,但你在孔后面看不到它,因为它们是在我的瓷砖上用纯黑色和纯黄色绘制的。我不能在黑色之后画它,但也不能在黄色之前画它,因为黄色是先画的。这是一张漂亮的照片:

The playing board.

我有几种可能的解决方案,但每种都存在问题:

  1. 使用已切出孔的电路板的位图。

    • 我可以绘制瓷砖,然后使用透明键绘制形状奇特的框架。
    • StretchBlt 或类似的东西是否会实际拉伸(stretch)电路板以使其在不同的分辨率下看起来相同,包括不同的纵横比(我的意思是水平和垂直缩放以每次都具有相同的比例)?引用图片,无论分辨率如何,它都适合这个窗口。
  2. 逐个像素检查要绘制的内容。

    • 很简单,但是会不会很慢?我听说过每个像素可能不是,但还没有在任何地方真正验证过。
  3. (我认为效果最好的那个)- 绘制板子,但不要在顶部画黑洞,而是让板子在这些区域透明。

    • 这是最少的工作量,在效率方面应该没问题,但我该怎么做呢?

这些解决方案中的任何一个(尤其是第三个)是否合理?否则有解决此 z 顺序问题的简单方法吗?

最佳答案

看起来最“正确”的方法(不一定是最好的方法)是用孔填充矩形形状,而不是稍后添加孔。

如果您使用的是 GDI 或 GDI+,则可以通过创建一个包含矩形和其中所有圆的路径,然后填充该路径来实现。

要在 gdi32 中执行此操作,请调用 BeginPath,使用 Rectangle 和 Ellipse 函数将形状添加到路径,然后调用 EndPath 来完成它。使用 SetPolyFillMode 将 HDC 设置为备用模式。在 HDC 中选择合适的画笔,然后调用 FillPath。

在 GDI+ 中,以交替模式构建路径,使用 GraphicsPath::AddRectangle 和 GraphicsPath::AddEllipse 添加形状,并使用 Graphics::FillPath 填充它。

(您可以使用缠绕模式而不是交替模式来执行此操作,但是您必须注意在您的路径中形成形状的线条是顺时针还是逆时针。)

关于c++ - 使已经绘制的内容透明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10964141/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com