如何在 Java 中高效地制作多个弹跳球的动画而不重叠?
Java 弹跳球
问题:
在屏幕上绘制多个从框架边缘弹起的球时,第二个球会覆盖第一个球。
给定代码:
提供的代码尝试绘制多个弹跳球,但第二个球覆盖了初始球。
使用当前方法,存在以下问题:
- 不透明组件放置在每个组件的顶部其他。
- 未指定布局管理器,影响球的放置。
- 未有效处理球的大小和位置的控制。
- 速度球的位置和位置不是随机的。
- 球的更新应在EDT。
- X/Y 值不是必需的,因为可以使用面板。
多线程的可扩展性问题:
当前的方法涉及为每个球创建一个单独的线程。这可能会导致系统资源紧张,尤其是当球的数量增加时。
替代方法:
不要为每个球使用组件,而是考虑为球创建一个容器并使用一个简单的动画循环来更新它们的位置并重新绘制它们。这种方法更具可扩展性。
实现:
这是解决上述问题的替代实现:
public class AnimatedBalls { public static void main(String[] args) { new AnimatedBalls(); } public AnimatedBalls() { EventQueue.invokeLater(() -> { JFrame frame = new JFrame("Bouncing Balls"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 400); frame.setVisible(true); // Create a container for the balls BallsPane ballsPane = new BallsPane(); frame.add(ballsPane); }); } public class BallsPane extends JPanel { private List<Ball> balls; public BallsPane() { balls = new ArrayList<>(); for (int i = 0; i < 10; i++) { Random random = new Random(); int x = (int) (Math.random() * getWidth()); int y = (int) (Math.random() * getHeight()); int vx = (int) (Math.random() * 10) - 5; int vy = (int) (Math.random() * 10) - 5; Ball ball = new Ball(x, y, vx, vy); balls.add(ball); } } protected void paintComponent(Graphics g) { super.paintComponent(g); for (Ball ball : balls) { ball.draw(g); } } } public class Ball { private int x; private int y; private int vx; private int vy; public Ball() { this(0, 0, 0, 0); } public Ball(int x, int y, int vx, int vy) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; } public void update() { // Bounce off the edges of the frame if (x < 0 || x > getWidth()) vx *= -1; if (y < 0 || y > getHeight()) vy *= -1; // Update the ball's position x += vx; y += vy; } public void draw(Graphics g) { // Draw the ball as a filled circle g.setColor(Color.RED); g.fillOval(x - 5, y - 5, 10, 10); } } }
在此替代实现中:
- 单个动画循环更新所有球。
- 球由简单的数据结构(而不是组件)表示。
- 动画循环处理帧边缘的边界。
- 随机化用于改变球的起始速度和位置。
- update() 方法计算每个球的新位置球。
- draw() 方法将球渲染为实心圆。
以上是如何在 Java 中高效地制作多个弹跳球的动画而不重叠?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

公司安全软件导致部分应用无法正常运行的排查与解决方法许多公司为了保障内部网络安全,会部署安全软件。...

将姓名转换为数字以实现排序的解决方案在许多应用场景中,用户可能需要在群组中进行排序,尤其是在一个用...

系统对接中的字段映射处理在进行系统对接时,常常会遇到一个棘手的问题:如何将A系统的接口字段有效地映�...

在使用MyBatis-Plus或其他ORM框架进行数据库操作时,经常需要根据实体类的属性名构造查询条件。如果每次都手动...

在使用IntelliJIDEAUltimate版本启动Spring...

Java对象与数组的转换:深入探讨强制类型转换的风险与正确方法很多Java初学者会遇到将一个对象转换成数组的�...

电商平台SKU和SPU表设计详解本文将探讨电商平台中SKU和SPU的数据库设计问题,特别是如何处理用户自定义销售属...

Redis缓存方案如何实现产品排行榜列表的需求?在开发过程中,我们常常需要处理排行榜的需求,例如展示一个�...
