1
我的問題如下。我正在使用標準的SWING事件調度線程繪製一個低alpha值的橢圓形和另一個較小的橢圓形來表示它的中心。當我運行模擬時,我使用一個單獨的線程,並允許用戶在模擬運行時添加這些障礙物。現在,當單獨的線程不運行時,但單獨的模擬線程正在運行時,工作正常,較大的橢圓(應該用低alpha值繪製)不會用低alpha值繪製,因此會創建一個固體大紅色的橢圓形。爲什麼會發生這種情況,我該如何解決這個問題?Graphics2D對象呈現透明度對於同一個對象不同
如果我在我的解釋中不太清楚,請告訴我。
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();
}
非常感謝您的建議,在我的代碼中找到了我多次添加的地方。問候 –