【求助】很莫名其妙的问题,高手大神请进!
JFrame中,点击【新游戏】,创建了一个JPanel,所有事物都在JPanel里绘画,坦克大战开始,我现在想要点击【新游戏】让游戏重新开始,我的方法就是销毁原先的JPanel,给它New一个新对象,结果游戏重新开始了,但是里面我控制的坦克速度变快了!!输出我的坦克的速度值,并没有增加!!这是什么原因??很莫名其妙的问题,纠结了好久!!真心希望大神们给我指出明路,感激不尽!!
这是源代码地址:
http://pan.baidu.com/s/19WhyL
------解决方案--------------------在你的tank类中这一段你添加如下代码:
/**
* 向上移动
*/
public void moveUp() {
System.out.println("-----------"+this.getName()+","+this.speed);
if (this.y > 3 * this.size + this.speed)
this.y -= this.speed;
System.out.println("-----------"+this.getName()+","+this.y);
}
来监控每一次移动的距离,你会发现不论是快走还是慢走,貌似移动的距离都是10.
这个name是我给你tank类加的一个成员变量,便于区分hero还是enemy。
也就是说你speed其实是没错的,设置正确。
那如果这个没错的话,那就是你的间隔时间改变了,我一直按着up的话,每隔多少毫秒触发一次这个时间变了。这个时间变短了,自然速度也就相对算是加速了。
我测试了很多遍,只是偶尔速度会增加,并不是逐渐上涨的。。。。。
另外,给几个建议吧。
Main函数可以单独写到test包里面的test类中。
虽然可以通过这样找main函数,但是还是蛮麻烦的
第二,看你很多System.out.println。但是光一直输出10没什么意义。加上对象名等等信息才合适,这样其实也就是等于log信息了。
第三,是不是加一个用户登录界面呢?保存每一位玩家的信息,而不是第一的信息。
第四,中间看到子弹线程偶尔会报
空指针,建议检查一下
这东西做的不错,比我以前做的那个好多了。。
------解决方案--------------------
大概知道原因了。我在你的BattleCityPanel线程里面打印,发现你的线程是死的
每次重新开始就会有新的线程进来,这个时候就有多个pannel线程在跑,应该第二次开始的时候你要想办法中断之前在跑得线程。
我在while最下面的打印,发现每次开始就会多一个线程。
System.out.println(Thread.currentThread().getName()+"coust:"+(end-begn));
@Override
public void run() {
while (true) {