坦克大战小游戏个人项目实战02

1、方块移动控制

上次写到了要让自己的方块单方向移动,那么我们如何控制我们的方块听从我们从键盘数入的指令,使他能够上下左右的移动起来呢,还上前面介绍国的方法,使用继承自KeyAdpter类的键盘监听器,监听我们输入的指令来控制方块的移动,话不多说直接看代码:

class mykeyListener extends KeyAdapter{

			@Override
		public void keyPressed(KeyEvent e) {     //键盘按下
			// TODO Auto-generated method stub
			int key=e.getKeyCode();//取出按下键的码
			switch (key){
			case KeyEvent.VK_W: y=y-5 ;break;//绑定按键w向上
			case KeyEvent.VK_S: y+=5;break;//绑定按键s向下
			case KeyEvent.VK_A: x-=5;break;//绑定a键向左
			case KeyEvent.VK_D: x+=5;break;//绑定d键向右
			default: 
				break;
				}
			}
		@Override
		public void keyReleased(KeyEvent e) {	//键盘抬起
			// TODO Auto-generated method stub
		
				}
		}

在其中我写入了一个变量key, 而这个key的值来自按下的这个方法的参数,这个参数就是直接读取我们所按下键盘的键的代号,通俗的理解就是直接读取我们所按下的键的ASCLL码值,然后赋值给Key这个变量(由于我个人对于这个语句是真的只能理解到这个程度,如有失偏颇请各位评论指正),又因为在mainActivity主类中写入了刷新频率为每50毫秒进行一次画面刷新,这时我们就可以使用以swich语句来对方块的坐标进行设置,在这里又引用了一个KeyEvent绑定虚拟按键为w键向上,当监听到按下的键为w时,就重新设置方块的纵向坐标减去要移动端的量即可,上下左右均可这样设置。

————————————————分割线————————————————————

或者用另一种方法来写。我们建立一个枚举类,在其中写入上下左右4个方向。

package tank;

public enum Dir {
LEFT,UP,RIGHT,DOWN;
}

然后我们在tankframe类中的键盘监听方法中定义4个Boolean类型的值,并设置初值为false,还是同样的方法使用getKeyCode()方法来监听键盘,并绑定按键,这时当监听到所按下的方向键时,重新设置4个布尔类型的值均为false。
接着让keyPressed方法中使用switch语句更改这4个布尔类型的值为true,在keykeyReleased方法中使用switch语句使这4个布尔值false。

		class mykeyListener extends KeyAdapter{
			Boolean bw=false;
			Boolean bs=false;
			Boolean ba=false;
			Boolean bd=false;
			@Override
			public void keyPressed(KeyEvent e) {
				int key=e.getKeyCode();
				switch(key) {
				case KeyEvent.VK_W:bw=true;break;
				case KeyEvent.VK_S:bs=true;break;
				case KeyEvent.VK_A:ba=true;break;
				case KeyEvent.VK_D:bd=true;break;
				default:
					break;
				}
			}
			@Override
			public void keyReleased(KeyEvent e) {
				int key=e.getKeyCode();
				switch(key) {
				case KeyEvent.VK_W:bw=false;break;
				case KeyEvent.VK_S:bs=false;break;
				case KeyEvent.VK_A:ba=false;break;
				case KeyEvent.VK_D:bd=false;break;
				default:
					break;
				}		
			}

然后在这两个方法中写入一个名为setMainTankdir();构造方法设置坦克的初始方向。

private void setMainTankdir() {
				// TODO Auto-generated method stub
				if(bw) dir=Dir.UP;
				if(bs) dir=Dir.DOWN;
				if(ba) dir=Dir.LEFT;
				if(bd) dir=Dir.RIGHT;
			}

注意:在使用这个构造方法之前需要先在tankFrame类中初始化好枚举类型,并设定坦克的初始方向为DOWN
然后在paint方法中写入使坦克能按照一定速度进行移动的方法,同样还是使用switch语句来进行

public void paint(Graphics g) {
			// TODO Auto-generated method stub
			g.fillRect(x,y, 50, 50);	
			switch(dir) {
			case RIGHT: x+=SPEED; break;
			case UP:    y-=SPEED; break;
			case LEFT: x-=SPEED; break;
			case DOWN: y+=SPEED; break;
			default:
				break;
			}
			}

运行程序坦克就可以按照我们希望的方向自己移动了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值