坦克大战为什么药两个repaint 本帖最后由 weiminghuaa 于 2012-02-07 22:15:22 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不触发repaint的话,你的子弹坐标虽然移动了,但容器是不知道啥时候需要重绘的。所以这里直接要求容器每100毫秒重绘一次,虽然暴力点,但是很有效。 可以没有前者的repaint只有要有线程的repain其实就可以了。 谢谢,我想知道的是:如果不把MyPanel做成线程,即不要第二个repaint。子弹坐标也在变,为什么第一个repaint不起作用?代码在这段:if (e.getKeyCode() == KeyEvent.VK_J) { this.mytank.fire();//进入调用子弹线程,子弹坐标已经在变 } this.repaint();//这里repaint为什么不起作用? 你好,请问第一个repaint就在按J事件处理下面,为什么不会重绘? 没说事件处理的repaint不会重绘啊。说的是:如果我开炮后,就啥按钮都不按,你怎么触发重绘?怎么让子弹能够在屏幕上动起来? 第二个repaint是必须的,它是控制坦克和子弹的运动,只有不断的重绘,坦克和子弹才能动起来,第一个可以不要,以多线程方式运行的话,第二个repaint一直在执行 第一个repaint的作用是让子弹立即显示出来,虽然说第二个repaint一直在执行,但是它有间隔时间,如果间隔时间长的话,第一个 repaint就很重要了,否则你点下射击键子弹不会立即出来,得等到第二个repaint再次执行。上面的程序间隔时间是100毫秒,即使没有第一个repaint子弹也会立即显示出来,如果你把时间改成5000毫秒,你就会知道第一个repaint的重要性了 韩老师的视频我也看过,还写过一个类似的,话说键盘监听那里的repaint()是当你按了方向键的时候,每按一次,就会重绘一次,而下面线程里的,则是按照sleep的周期,每隔一定的时间执行一次。 具体来说, 1.现在这个游戏的情况就是每隔100毫秒重绘一次,不管你按不按键盘。而当你每按一下键盘,Mypanel会额外重绘一次。 2.如果只保留键盘监听里的,删掉线程里的repaint(),那么mypanel不会每隔100毫秒重绘一次,但是你按一下键盘依然会重绘,如楼上所说,这时候你发射炮弹,炮弹坐标是一直改变的,但因为没有重绘,所以看不到。如果你发射完炮弹,马上按键盘让你的坦克动起来,这时候mypanel重绘了,你就能看到炮弹了 3.同样如楼上所说,如果只保留线程中的repaint(),删掉键盘监听中的,没有什么影响,但是估计100毫秒的刷新频率有点低,建议把sleep改成50或者30,看起来比较流畅另外建议LZ不要照着韩老师的写,需要用到的知识点明白了,然后照着教程中所达到的效果,用自己的思路来写,或许思路不太好,写出来的代码不怎么样,但是过程中遇到种种问题,在解决这些问题的过程中的思考我觉得还是很有好处的 同样作为初学者,LZ我们共同努力呦! 多谢各位给力的回复,偶明白了!我账户里只有15分,我就看着给了!也多谢这位兄弟littwo78168218细致的回复和提醒,共同加油! 第一次用cdsn,不清楚分数怎么回事,资源页面我的“积分: 15"??? 关于获取数组index的一个算法 请问哪位有JAVA GUI程序设计那本书的代码? 关于增加数学知识提议 多次刷新页面,导致点机率无限制增加问题! mysql sql的查询 菜鸟关于<<java编程思想>>的一个问题! applet访问URL的问题 java 字符型与long类型的转换 关于参数的问题 为什么JBuilder不叫JavaBuilder,and freeJava改名为realJ ??? Java Socket入门案例求解 java呼叫远端主机class在远端运行之后传回字符串
谢谢,我想知道的是:如果不把MyPanel做成线程,即不要第二个repaint。子弹坐标也在变,为什么第一个repaint不起作用?代码在这段:if (e.getKeyCode() == KeyEvent.VK_J)
{
this.mytank.fire();//进入调用子弹线程,子弹坐标已经在变
}
this.repaint();//这里repaint为什么不起作用?
你好,请问第一个repaint就在按J事件处理下面,为什么不会重绘?
没说事件处理的repaint不会重绘啊。说的是:如果我开炮后,就啥按钮都不按,你怎么触发重绘?怎么让子弹能够在屏幕上动起来?
具体来说,
1.现在这个游戏的情况就是每隔100毫秒重绘一次,不管你按不按键盘。而当你每按一下键盘,Mypanel会额外重绘一次。
2.如果只保留键盘监听里的,删掉线程里的repaint(),那么mypanel不会每隔100毫秒重绘一次,但是你按一下键盘依然会重绘,如楼上所说,这时候你发射炮弹,炮弹坐标是一直改变的,但因为没有重绘,所以看不到。如果你发射完炮弹,马上按键盘让你的坦克动起来,这时候mypanel重绘了,你就能看到炮弹了
3.同样如楼上所说,如果只保留线程中的repaint(),删掉键盘监听中的,没有什么影响,但是估计100毫秒的刷新频率有点低,建议把sleep改成50或者30,看起来比较流畅另外建议LZ不要照着韩老师的写,需要用到的知识点明白了,然后照着教程中所达到的效果,用自己的思路来写,或许思路不太好,写出来的代码不怎么样,但是过程中遇到种种问题,在解决这些问题的过程中的思考我觉得还是很有好处的
同样作为初学者,LZ我们共同努力呦!