Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何做(或编码)使子弹对象数组可以与僵尸对象数组相遇?_Java_Arraylist - Fatal编程技术网

Java 如何做(或编码)使子弹对象数组可以与僵尸对象数组相遇?

Java 如何做(或编码)使子弹对象数组可以与僵尸对象数组相遇?,java,arraylist,Java,Arraylist,我刚开始学习使用Java进行游戏开发 我创造了 类僵尸的ArrayList 类项目符号的ArrayList 两个ArrayList中的每个对象都有一个名为rect of type Rectangle的变量,该变量围绕着屏幕上自己的图形 我的目标是在子弹遇到僵尸时产生效果 我的问题是我不知道怎么做子弹遇到僵尸 我的方法:我使用rect变量通过rect.intersectr方法测试两个对象是否相互碰撞。我正在测试bullet ArrayList中的每一个项目符号,看看它是否与zombie Array

我刚开始学习使用Java进行游戏开发

我创造了

类僵尸的ArrayList 类项目符号的ArrayList 两个ArrayList中的每个对象都有一个名为rect of type Rectangle的变量,该变量围绕着屏幕上自己的图形

我的目标是在子弹遇到僵尸时产生效果

我的问题是我不知道怎么做子弹遇到僵尸


我的方法:我使用rect变量通过rect.intersectr方法测试两个对象是否相互碰撞。我正在测试bullet ArrayList中的每一个项目符号,看看它是否与zombie ArrayList中的任何僵尸发生了碰撞,这意味着我每帧都要完整地运行两个ArrayList,以执行此功能。一定有更好的办法

唯一更好的方法是在单独的线程上运行冲突检测,以便在执行其他逻辑时检测冲突。 这不是最容易实现的事情,因此,除非您在碰撞检测中经历了巨大的减速,否则我建议您继续这样做

您还可以尝试缩小碰撞检测的候选范围

例如,如果一些僵尸/子弹在屏幕外,您可能不关心是否发生碰撞,所以您可以完全跳过所述实体

是的,您必须首先检查实体是否在屏幕矩形中,但这只在每个列表中运行一次,可能会使您避免运行一系列您根本不关心的冲突检测

TL;DR:如果你没有经历过任何大规模的性能下降,我会尝试继续玩它,首先建立你对碰撞检测的理解,然后再考虑优化


我希望它能有所帮助:

显示您已经完成的一些代码……这意味着我每帧都要完整地运行这两个列表,以便执行此功能。没有更好的方法了。也许你可以优化。。。取决于你的比赛。例如,按x位置对两个列表进行排序,然后可以忽略比最右边的僵尸更远的任何项目符号。y也一样。不知道你会得到多少。与所有优化一样,首先使用探查器,查看代码在哪里花费时间。如果要缩小碰撞检测范围,则必须检查每一个项目符号,以查看它们是否在每一帧的屏幕上,这样就不会有太多收获。当前的方法是最有效和最容易实现的