首页 > 解决方案 > 如何使 2 个相交的矩形变得透明

问题描述

我的目标是用一个 alpha 为 128 的黑色矩形填充屏幕,使屏幕看起来很暗,然后制作它,这样我就可以将矩形渲染到屏幕上,并且将它们渲染到的位置变为完全透明,这样你就可以直接看到矩形。我已经让屏幕被部分填充为黑色,但是当我在其上绘制一个矩形时,我无法让它变得透明。我从未使用过 AlphaComposites,但我认为我将不得不使用其中一个来完成这项工作。有谁知道我怎么能做到这一点?


private Color darknessColor = new Color(0,0,0,128), flashlightColor = new Color(255,255,255,128);

public void render(Graphics g) {
        // Draws the darkness part of the screen.

        Graphics2D g2 = (Graphics2D) g;

        g2.setColor(darknessColor);
        g2.fillRect(0, 0, handler.getWidth(), handler.getHeight());

        g2.setColor(flashlightColor);
        g2.setComposite(AlphaComposite.DstOut);
        g2.fillRect(200, 200, 300, 200);

        g2.dispose();
    }

标签: javagame-development

解决方案


没有办法“取消”已经绘制的矩形;如果你已经在矩形后面的场景上画了,那么它就消失了。解决方案是仅在您想要的位置绘制黑色形状;这意味着它不仅仅是一个矩形,但如果您要“剪切”的部分是一个矩形,那么您可以通过绘制四个黑色矩形来达到您想要的效果,如下所示:

四个黑色矩形

希望如何计算这四个矩形应具有的坐标很简单。


推荐阅读