我正在使用鼠标光标进行游戏,我想通过将光标覆盖图像的绿色版本来表示健康状况,但只有一个几何扇区对应于健康百分比。来自这些帖子的解决方案:Drawing slices of a circle in java?& How to draw portions of circles based on percentages in Graphics2D?几乎就是我想要的,但是使用BufferedImage而不是纯色填充。
//Unfortunately all this does is cause nothing to draw, but commenting this out allows the overlay image to draw
Arc2D.Double clip = new Arc2D.Double(Arc2D.PIE);
double healthAngle = Math.toRadians((((Double)data.get("health")).doubleValue() * 360.0 / 100.0) - 270.0);
clip.setAngles(0, -1, Math.cos(healthAngle), Math.sin(healthAngle));
System.out.println(Math.cos(healthAngle) + " " + Math.sin(healthAngle));
g.setClip(clip);
简而言之,如何以任意角度绘制BufferedImage的扇区?
答案 0 :(得分:0)
如果您阅读setClip(Shape)
的API文档,您会发现唯一可以保证工作的形状是矩形。因此,设置剪辑可能不起作用。
但是,还有其他选择。最明显的可能是使用TexturePaint
用BufferedImage
来填充弧线。类似的东西:
TexturePaint healthTexture = new TexturePaint(healthImg, new Rectangle(x, y, w, h));
g.setPaint(healthTexture);
g.fill(arc); // "arc" is same as you used for "clip" above
另一种选择是首先在透明背景上绘制纯色弧,然后使用SRC_IN
Porter-Duff模式在上面绘制图像。类似的东西:
g.setPaint(Color.WHITE);
g.fill(arc); // arc is same as your clip
g.setComposite(AlphaComposite.SrcIn); // (default is SrcOver)
g.drawImage(x, y, healthImg, null);