Java awt/swing AffineTransformation 在形状周围移动

标签 java swing awt affinetransform

一旦一次绘制了数百个圆圈,动画圆圈的程序就无法流畅地绘制它们。建议使用仿射变换来复制形状。这段代码被重构为使用graphics2D,可以工作,但不会导致任何性能提升,因为它仍然填充数百个椭圆。如何正确使用仿射变换来填充形状一次,然后复制/移动它?


    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        setBackground(Color.WHITE);<p></p>

<pre><code>    for (int i = 0; i < gameLogic.getParticleArrSize(); i++) {
        Graphics2D g2 = (Graphics2D) g;
        Color color = new Color(6,6,6);
        Ellipse2D oval = new Ellipse2D.Double(
                gameLogic.getParticleXCoor(i),
                gameLogic.getParticleYCoor(i),
                gameLogic.getParticleSize(i),
                gameLogic.getParticleSize(i));
        g2.setPaint(color);
        g2.fill(oval);
        g2.translate(15, 15);
        g2.fill(oval);
  }
</code></pre>

<p>}
</p>

最佳答案

了解哪个更快的唯一方法是分析两个或多个实现。作为一个具体的例子,这个kinetic model显示使用 drawImage()Gradient 模式比使用 fill()Color 模式稍有优势,如paintComponent()中所示DisplayPanel 的方法。在这种情况下,AffineTransform 有利于预渲染更复杂的渐变图像。

附录:

I don't know how to properly implement AffineTransform to move/copy ovals…

我怀疑AffineTransform 是解决问题的方法。相反,将对象创建移出循环,如 @camickr 建议的那样。在 example ,请注意 Ensemble 如何只需要一个 Ellipse2D;它重复使用setFrame()。此外,每个粒子已经知道它的颜色。最后,观察 example 如何测量绘制时间。

关于Java awt/swing AffineTransformation 在形状周围移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4221610/

相关文章:

java - 如何使该方法识别出传递的文本参数是文件名?

java - 如何在SMB中定义路径

java - 找不到 org.junit.contrib 包

JavaScript 程序利用其他语言的程序

java - 在JPanel上绘制,然后保存到文件,但保存的文件全是白色

Java:删除 Runnable Canvas 组件

c# - C# 中的 CodePointAt 等价物

java - 弹跳球小程序

java - 将行添加到 DefaultTableModel

java - JTextField 滚动