首页 > 解决方案 > 如何在 SFML 中屏蔽另一层的指定层?

问题描述

所以基本上我不知道如何在 SFML 中在另一层上绘制一层。我有一层sf::ConvexShape,并且知道我想sf::CircleShape在上面随机绘制,问题是我不能在该层上绘制 OLNY。

树图像

现在的问题是,如何制作仅在一个或多个(矢量)层上绘制的蒙版。我已经尝试将边框从树段的一个角到另一个角,但它根本不起作用。

for (int i = 0; i < Swiatelka.size(); ++i)
        {
            if (Swiatelka[i].getPosition().x == (info.winWidth/2) - (choinka[1].getLocalBounds().width/2) || Swiatelka[i].getPosition().x == (info.winWidth / 2) + (choinka[1].getLocalBounds().width / 2))
            {
                continue;
            }
            else
            {
                window.draw(Swiatelka[i]);
            }
        }

标签: c++sfmlmask

解决方案


所以有一些方法可以像你想要的那样进行屏蔽,我知道的一种方法称为“模板缓冲区”,但我不知道 SFML 是否支持它,而且对于你想要做的事情来说,它可能有点矫枉过正。(在我看来)。

由于您拥有每个三角形的坐标,因此应该很容易在其中随机找到一个点。您可以将该坐标用作圆心。

您可以以三角形为基础并从中创建一个矩形,然后从其中随机选择一个坐标。您可以在stackoverflow上使用此答案来检查坐标是否实际上在三角形内,否则只需随机选择一个新坐标,直到它在。

更改该矩形和“目标”三角形的大小,将允许您定位您希望圆圈出现在树的哪个区域。

(虽然随机:如果你在画三角形和画圆圈之间交替,你可以在树的较高部分的“树枝下面”画圆圈,我不知道它看起来有多漂亮,但这可能是一个有趣的练习) .


推荐阅读