完成对坦克的逻辑的处理。
//坦克的逻辑处理
private void logic()
{
switch (state)
{
case STATE_STAND:
break;
case STATE_MOVE:
move();
break;
case STATE_DIE:
break;
}
}
logic方法在Tank类draw方法中调用。
实现坦克的移动,四向行走和边界的处理。
//坦克移动功能和边界的处理
private void move(){
switch (dir){
case DIR_UP:
y-=speed;
if(y<RADIUS+ GameFrame.titleBarh)
{
y=RADIUS+ GameFrame.titleBarh;
}
break;
case DIR_DOWN:
y+=speed;
if(y> Constant.FRAME_HEIGHT-RADIUS)
{
y=Constant.FRAME_HEIGHT-RADIUS;
}
break;
case DIR_LEFT:
x-=speed;
if(x<RADIUS)
{
x=RADIUS;
}
break;
case DIR_RIGHT:
x+=speed;
if(x> Constant.FRAME_WIDTH-RADIUS)
{
x=Constant.FRAME_WIDTH-RADIUS;
}
break;
}
}
坦克生成后初始状态为站立状态。当按下上下左右键时应切换成移动状态。
private void KeyEventRun(int keyCode) {
switch (keyCode){
case KeyEvent.VK_UP:
case KeyEvent.VK_W:
mytank.setDir(Tank.DIR_UP);
mytank.setState(Tank.STATE_MOVE);
break;
case KeyEvent.VK_DOWN:
case KeyEvent.VK_S:
mytank.setDir(Tank.DIR_DOWN);
mytank.setState(Tank.STATE_MOVE);
break;
case KeyEvent.VK_LEFT:
case KeyEvent.VK_A:
mytank.setDir(Tank.DIR_LEFT);
mytank.setState(Tank.STATE_MOVE);
break;
case KeyEvent.VK_RIGHT:
case KeyEvent.VK_D:
mytank.setDir(Tank.DIR_RIGHT);
mytank.setState(Tank.STATE_MOVE);
break;
}
}
运行后发现有一个问题就是松开按键后坦克一直移动,所以要进行对按键松开事件的处理。
//按键松开的时候,游戏中的处理方法
private void KeyReleasedEventRun(int keyCode) {
switch (keyCode){
case KeyEvent.VK_UP:
case KeyEvent.VK_W:
case KeyEvent.VK_DOWN:
case KeyEvent.VK_S:
case KeyEvent.VK_LEFT:
case KeyEvent.VK_A:
case KeyEvent.VK_RIGHT:
case KeyEvent.VK_D:
mytank.setState(Tank.STATE_STAND);
break;
}
}