【发布时间】:2011-06-28 02:09:38
【问题描述】:
伙计们。
我正在为我的 Java 类编写一个简单的僵尸游戏,但遇到了一个小问题:僵尸是我创建的一个类,我在 ArrayList 上处理它们,如下所示:
horda.add(new Zumbi( (int)(Math.random()* 750), 0));
参数代表屏幕上的僵尸生成位置。要杀死它们,您必须单击它们,非常简单,使用迭代器检查碰撞,这里:
java.util.Iterator<Zumbi> itr = horda.iterator();
while (itr.hasNext()){
Zumbi z = itr.next();
if (tiroPos.x > z.zumbiPos.x &&
tiroPos.x < z.sprite.getWidth() + z.zumbiPos.x &&
tiroPos.y > z.zumbiPos.y &&
tiroPos.y < z.sprite.getHeight() + z.zumbiPos.y){
//things to do when it hits
}
tiroPos 是一个指针,用于保存玩家射击的坐标。问题是:有时当你击中僵尸时应该发生的那些事情并没有发生。不知道是不是迭代器跑得不够快还是其他什么原因。
也许为每个僵尸作品创建一个不同的线程,但这会改变代码是一些基本的方法,如果没有帮助,我不想冒失去所有时间的风险。
那么,有什么想法吗?
//编辑:忘了说:我正在检查重写绘制方法中的碰撞,因为我不知道如何在其他方法上绘制东西以及当我尝试访问 ArrayList(它是一个同步的 ArrayList)在另一个线程上它给我一个共同修改异常。
//EDIT2: 问题已解决(从未解决)。
MouseListener传递的MouseEvent对象传递的是鼠标指针下端的坐标。所以这不是一个真正的碰撞问题,更多的是一个数学问题。我必须比较 clickPoint.y - 25 才能正确。
感谢所有试图提供帮助的人!
【问题讨论】:
-
每次单击时都会将迭代器重置为开头,对吧?
-
您是否真的在单独的线程中收集用户输入?
-
阅读编辑部分。忘了这个。
标签: java multithreading arraylist