在 java 图形中以固定坐标从墙上反弹多条线

  • 本文关键字:坐标 图形 java java swing graphics
  • 更新时间 :
  • 英文 :


我想存储固定坐标,然后递增坐标,直到它们到达屏幕边缘。这是我的代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Name extends JPanel
{
int x, y, w, h, xdir, ydir;

public Name ()
{
}
public void paintComponent (Graphics g)
{
    super.paintComponent (g);
    g.drawLine(110+x, 300+y, 95+x, 400+y);
    g.drawLine(110, 300, 123, 350);
    g.drawLine(135, 300, 123, 350); //M
    g.drawLine(135, 300, 150, 400);

    g.drawOval (150, 300, 15, 15);            // i
    g.fillOval (150, 300, 15, 15);
    g.drawLine (155, 320, 155, 400);
    g.drawLine (172, 300, 172, 400);     // k
    g.drawLine (172, 350, 185, 300);
    g.drawLine (172, 350, 185, 400);
    g.drawLine (190, 360, 265, 360);     // e
    g.drawArc (190, 325, 75, 75, 360, 180);
    g.drawArc (190, 330, 75, 75, 168, 180);
    w = getSize ().width;
    h = getSize ().height;
    xdir = 1;
    ydir = 1;
    x = x + xdir;
    y = y+ ydir;
    if (x > w || x < 0)
    {
        xdir = -1 * xdir;
    }
    if (y > h || y < 0)
    {
        ydir = -1 * ydir;
    }
    repaint ();
    MyLib.delay (25);
} // paint method

public static void main (String[] args)
{
    JFrame frame = new JFrame ("NameBounce");
    frame.getContentPane ().add (new Name ());
    frame.setSize (500, 500);
    frame.setVisible (true);
    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
} // main method
} // Name class

我尝试将坐标存储到数组列表中,但没有运气。

我一直在努力避免对整个程序进行硬编码。

使用类似 Path2D 的东西来定义要绘制的形状(您可以在单个Path2D内绘制所有字母)

使用AffineTransform来平移Graphics的位置,并使用Graphics2D#drawPath2D进行物理绘制

使用 Swing Timer安排定期回拨,您可以在其中更新Path2D的位置,并在组件上调用repaint以触发更新

  • 摇摆中的并发
  • 如何使用摆动计时器
  • 2D 图形

了解更多详情

不要在 paintComponent 方法(或事件调度线程的上下文中)调用Thread.sleep或任何其他阻止进程,因为这将阻止 EDT 更新屏幕。

确保仅从 EDT 上下文中创建/更新 UI,有关更多详细信息,请参阅初始线程

相关内容

  • 没有找到相关文章

最新更新