当前位置:  开发笔记 > 编程语言 > 正文

如何让循环并排运行?

如何解决《如何让循环并排运行?》经验,为你挑选了3个好方法。

我一直在做一个幼稚的小程序:屏幕上有一堆不同颜色和大小的小圆圈.当较大的圆圈遇到较小的圆圈时,它会吃掉较小的圆圈,当圆圈吃掉足够的其他圆圈时,它会再现.它有点整洁!

然而,我实现它的方式,检测附近的圆圈并检查它们的可食性的过程是通过循环遍历整个活动圈的圈子来完成的......随着人口趋于飙升,这需要更长更长的时间在它开始下降之前的3000.这个过程不会让我的电脑慢下来,我可以去玩Dawn of War或其他什么并且没有任何减速:它只是检查每个圆圈以查看它是否与其他所有圆相撞的过程. .

所以我想到的是,我可以尝试将应用程序窗口分成四个象限,并让象限中的圆圈同时进行检查,因为它们几乎没有机会相互干扰:或者是那种效果!

那么我的问题是:如何制作并排运行的循环?在Java中,比方说.



1> luke..:

这里的问题实际上可以在没有线程的情况下解决.

您需要的是空间数据结构.四边形树是最好的,或者如果球体移动的场是固定的(我假设它是),你可以使用一个简单的网格.继承人的想法.

将显示区域划分为方形网格,其中每个单元格至少与最大圆圈一样大.对于每个单元格,保留其中心位于该单元格中的所有圆的列表(链表最佳).然后在碰撞检测步骤期间,遍历每个单元格并检查该单元格中的每个圆圈与该单元格中的所有其他圆圈以及周围的单元格.

从技术上讲,您不必检查每个单元格周围的所有单元格,因为其中一些单元格可能已经被检查过.

您可以将此技术与多线程技术相结合,以获得更好的性能.



2> FlySwat..:

计算机通常是单任务的,这意味着它们通常可以按CPU或核心一次执行一条指令.

但是,正如您所注意到的,您的操作系统(和其他程序)似乎同时运行许多任务.

这是通过将工作分成进程来完成的,每个进程可以通过生成线程来进一步实现并发.然后,操作系统非常快速地在每个进程和线程之间切换,以产生多任务处理的错觉.

在您的情况下,您的Java程序是一个单独的进程,您需要创建4个线程,每个线程运行自己的循环.它可能会变得棘手,因为线程需要同步它们对局部变量的访问,以防止一个线程在另一个线程试图访问它时编辑变量.

因为线程是一个复杂的主题,它需要比我在这里做的更多的解释.

但是,您可以阅读Suns关于并发的优秀教程,其中涵盖了您需要了解的所有内容:

http://java.sun.com/docs/books/tutorial/essential/concurrency/



3> Jesse Beder..:

您正在寻找的并不是让它们同时运行的方法(正如人们已经注意到的,这取决于您拥有多少核心,并且只能提供2倍或4倍的加速),而是以某种方式减少了你必须检测的碰撞次数.

你应该考虑使用四叉树.简而言之,您递归地将2D区域分解为四个象限(根据需要),然后只需要检测附近组件中对象之间的碰撞.在良好的情况下,它可以有效地减少从N ^ 2到N*log N的碰撞检测时间.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有