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 getWidth()) vx *= -1; if (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); } } }</ball>
在此替代实现中:
- 单个动画循环更新所有球。
- 球由简单的数据结构(而不是组件)表示。
- 动画循环处理帧边缘的边界。
- 随机化用于改变球的起始速度和位置。
- update() 方法计算每个球的新位置球。
- draw() 方法将球渲染为实心圆。
以上是如何在 Java 中高效地制作多个弹跳球的动画而不重叠?的详细内容。更多信息请关注PHP中文网其他相关文章!

本文讨论了使用Maven和Gradle进行Java项目管理,构建自动化和依赖性解决方案,以比较其方法和优化策略。

本文使用Maven和Gradle之类的工具讨论了具有适当的版本控制和依赖关系管理的自定义Java库(JAR文件)的创建和使用。

本文讨论了使用咖啡因和Guava缓存在Java中实施多层缓存以提高应用程序性能。它涵盖设置,集成和绩效优势,以及配置和驱逐政策管理最佳PRA

本文讨论了使用JPA进行对象相关映射,并具有高级功能,例如缓存和懒惰加载。它涵盖了设置,实体映射和优化性能的最佳实践,同时突出潜在的陷阱。[159个字符]

Java的类上载涉及使用带有引导,扩展程序和应用程序类负载器的分层系统加载,链接和初始化类。父代授权模型确保首先加载核心类别,从而影响自定义类LOA


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

WebStorm Mac版
好用的JavaScript开发工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

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