xqnx.net
当前位置:首页 >> jAvA,坦克大战,坦克重叠怎么办 >>

jAvA,坦克大战,坦克重叠怎么办

那你还要判断敌方与敌方的不重叠么?太麻烦了吧我提一点建议,希望能帮到你建一个tank基类,描述坦克的基本属性,实现防止碰撞的方法,包含移动的抽象方法建enemytank类继承tank,重写移动的方法,由线程控制建mytank类继承tank,重写移动的方法,由键盘控制这样防止碰撞的问题都在tank类中进行处理,根本不会有你说的各种情况

对于这个小游里面的类的抽象很重要,对坦克及其它类我在这里面就不定义了,其实J2SE的API里面就有关于图形重叠的算法,就是这个intersects()方法,具体伪代码如下:public boolean collidesWithTanks(java.util.List<Tank> tanks) {

就用碰撞检测就好了呀, 就设置成让外面的框1旦有了交集就把方向调成STOP就能够了.如果你想要代码的话 就送你几行代码/** * 敌人坦克之间碰撞检测,如果碰上了,就不能相互穿越 */ public boolean strikesWithTanks(ListTank tanks) { for (int i = 0; i tanks.size(); i++) { Tank t = tanks.get(i); if (this != t) } } return false; }

可以使用bufferedimage缓冲图片来做,在游戏开发中一般都这样处理.首先建立一个bufferedimage对象,通过该对象创建一个graphics,然后在使用其来进行所有小图片的绘制,当绘制完成后,再在paint()方法中将整个bufferedimage对象绘制,这样可以防止出现画面闪烁和反映慢的问题.

定义两个Rectangle(int x轴坐标, int y轴坐标, int 宽度, int 高度),然后就可以通过intersects方法来判断是否重复了.重复返回true.不知这样是否可以?再看看别人怎么说的.

你要在repaint方法之前去修改之前坦克图片的坐标,而不是重新写一个图片画上去,明白?坦克图片对象只能有一个,通过不停的修改坐标来移动

需要看你的tank的draw方法里的内容代码和碰撞检测代码.一般二维碰撞检测基本都是以单位格,也就是坦克的大小格作为单位,提前一格判断两个方格是否交叉,如果交叉则在当前,也就是交叉后退后一格这个位置让它停止当前方向的移动.

一直按下,提高速度?这种情况是很难实现的,不过倒是可以实现,点击速度决定移动速度,每次点击移动一个像素,而快速点击,坦克自然跑的就快了,因为一直按下,这个事件不存在,当我们一直按住一个键,照样会触发键弹起事件,相当于一定的频率不停地点击(反正我的键盘是这样) 办法就是能够得到长时间按键,键盘点击的频率,和这个频率越接近速度越快,不过不同机器可能会有差别 还有一种较好的方法就是,当点击频率基本维持恒定时,便加速,直到一个程度.点击频率不固定的话加速较慢或匀速之类的就行了 此方案前提:当键一直按下的时候,频率应该是比较恒定的 上面方法有点复杂,其实你可以设置一个调节速度的按钮,这样会简单些

你检查一下,被击中后tank对象是否还在使用,如果不使用可以置null,我觉得是你程序中tank对象还在使用的原因,不想报null指针,可以draw的时候先判断tank!=null 才进行draw,或者

你的子弹类,要有X,Y,方向,子弹的速度,有一个方法处理子弹速度例如if(m_Direction == 上){ y+=speed;}估计楼主只是对子弹的位置加上了一个数值

相关文档
网站首页 | 网站地图
All rights reserved Powered by www.xqnx.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com