gpt4 book ai didi

java - Graphic2D 对象对同一对象呈现不同的透明度

转载 作者:行者123 更新时间:2023-12-01 05:06:40 26 4
gpt4 key购买 nike

我的问题如下。我使用标准 SWING 事件调度线程绘制一个具有低 alpha 值的椭圆形,并在中心绘制另一个较小的椭圆形来表示其中心。当我运行模拟时,我使用单独的线程,并允许用户在模拟运行时添加这些障碍物。现在,当单独的线程未运行时,这可以正常工作,但当单独的模拟线程运行时,较大的椭圆形(应该用低 alpha 值绘制)不会用低 alpha 值绘制,因此会创建一个实体大红色椭圆形。为什么会发生这种情况?我该如何解决这个问题?

如果我的解释不太清楚,请告诉我。

private void drawObstacleCircle(Obstacle o, Graphics2D g)
{
final double OBSTACLE_CENTER_RADIUS = 2.0;
final double OBSTACLE_RADIUS = o.getRadius(true);

float scaleToUse = Math.max(0.8f, scale);

Vector pos = o.getPosition();

int xPos = (int) (pos.getX() * getBufferedHeightMap().getWidth());
int yPos = (int) (pos.getY() * getBufferedHeightMap().getHeight());

Point positionPoint = convertToPanelPoint(new Point(xPos, yPos));

// Draw the circle where the Obstacle's center is
Graphics2D g1 = (Graphics2D) g.create();

g1.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g1.setColor(Color.RED);
g1.fillOval(positionPoint.x - (int) (OBSTACLE_CENTER_RADIUS * scaleToUse), positionPoint.y - (int) (OBSTACLE_CENTER_RADIUS * scaleToUse), (int) (OBSTACLE_CENTER_RADIUS * 2 * scaleToUse), (int) (OBSTACLE_CENTER_RADIUS * 2 * scaleToUse));

Color c = Color.RED;
g1.setColor(new Color(c.getRed(), c.getGreen(), c.getBlue(), 100));
g1.fillOval(positionPoint.x - (int) (OBSTACLE_RADIUS * scaleToUse), positionPoint.y - (int) (OBSTACLE_RADIUS * scaleToUse), (int) (OBSTACLE_RADIUS * 2 * scaleToUse), (int) (OBSTACLE_RADIUS * 2 * scaleToUse));

g1.dispose();
g2.dispose();
}

最佳答案

如果没有周围的代码,很难说清楚,但在我看来,在开始重新绘制场景之前,您并没有删除 Canvas 。添加新线程是否会导致使用相同的图形上下文多次调用 drawObstacleCircle 方法?

这意味着该方法在已绘制的场景之上进行绘制。因此,在之前绘制的椭圆形的位置上一次又一次地绘制一个稍微透明的椭圆形,直到该区域看起来呈纯红色。

关于java - Graphic2D 对象对同一对象呈现不同的透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12564239/

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