我做一个游戏要控制图象运动的8个方向,其它都可以动作,就是当按下向右的键时候,向右下方运动,代码好像没有问题,期望高手帮帮记忙。void move(){
switch(dir){
case L:
x-=XSPEED;
break;
case LU:
x-=XSPEED;
y-=YSPEED;
break;
case U:
y-=YSPEED;
break;
case RU:
x+=XSPEED;
y-=YSPEED;
break;
case R:
x+=XSPEED;
case RD:
x+=XSPEED;
y+=YSPEED;
break;
case D:
        y+=YSPEED;
        break;
case LD:
x-=XSPEED;
y+=YSPEED;
break;
case STOP:
break;
}
}
public void keyPressed(KeyEvent e){
int key=e.getKeyCode();
switch(key){
case KeyEvent.VK_UP:
bu=true;
break;
case KeyEvent.VK_DOWN:
bd=true;
break;
case KeyEvent.VK_LEFT:
bl=true;
break;
case KeyEvent.VK_RIGHT:
br=true;
break;
}
location();
}
void location(){
if(bl && !bu && !br && !bd)
dir=direction.L ;
else if(bl && bu && !br && !bd)
dir=direction.LU;
else if(bl && !bu && !br && bd)
dir=direction.LD ;
else if(!bl && bu && br && !bd)
dir=direction.RU ;
else if(!bl && !bu && br && bd)
dir=direction.RD ;
else if(!bl && bu && !br && !bd)
dir=direction.U;
else if(!bl && !bu && br && !bd)
dir=direction.R ;
else if(!bl && !bu && !br && bd)
dir=direction.D ;
else if(!bl && !bu && !br && !bd)
dir=direction.STOP;
     }
public void keyReleased(KeyEvent e) {
int key=e.getKeyCode();
switch(key){
case KeyEvent.VK_UP:
bu=false;
break;
case KeyEvent.VK_DOWN:
bd=false;
break;
case KeyEvent.VK_LEFT:
bl=false;
break;
case KeyEvent.VK_RIGHT:
br=false;
break;
}
location();

        } }这个就是我的代码

解决方案 »

  1.   

    import java.awt.*;
    import java.awt.event.*;
    public class Tank {
    TankClient tc=null;
    private int x,y;
    private final int XSPEED=5;
    private final int YSPEED=5;
    private boolean bl=false,bu=false,br=false,bd=false;
    enum direction{L,LU,U,RU,R,RD,D,LD,STOP};
    private direction dir=direction.STOP;
    public Tank(int x, int y) {
        this.x = x;
    this.y = y;
    }
        public Tank(int x,int y,TankClient tc){
         this(x,y);
         this.tc=tc;
        
        }
    public void draw(Graphics g){
    Color c=g.getColor();
    g.setColor(Color.red);
    g.fillOval(x, y,30,30);
    g.setColor(c);
    move();
    }
    void move(){
    switch(dir){
    case L:
    x-=XSPEED;
    break;
    case LU:
    x-=XSPEED;
    y-=YSPEED;
    break;
    case U:
    y-=YSPEED;
    break;
    case RU:
    x+=XSPEED;
    y-=YSPEED;
    break;
    case R:
    x+=XSPEED;
    case RD:
    x+=XSPEED;
    y+=YSPEED;
    break;
    case D:
            y+=YSPEED;
            break;
    case LD:
    x-=XSPEED;
    y+=YSPEED;
    break;
    case STOP:
    break;
    }
    }
    public void keyPressed(KeyEvent e){
    int key=e.getKeyCode();
    switch(key){
    case KeyEvent.VK_UP:
    bu=true;
    break;
    case KeyEvent.VK_DOWN:
    bd=true;
    break;
    case KeyEvent.VK_LEFT:
    bl=true;
    break;
    case KeyEvent.VK_RIGHT:
    br=true;
    break;
    }
    location();
    }
    void location(){
    if(bl && !bu && !br && !bd)
    dir=direction.L ;
    else if(bl && bu && !br && !bd)
    dir=direction.LU;
    else if(bl && !bu && !br && bd)
    dir=direction.LD ;
    else if(!bl && bu && br && !bd)
    dir=direction.RU ;
    else if(!bl && !bu && br && bd)
    dir=direction.RD ;
    else if(!bl && bu && !br && !bd)
    dir=direction.U;
    else if(!bl && !bu && br && !bd)
    dir=direction.R ;
    else if(!bl && !bu && !br && bd)
    dir=direction.D ;
    else if(!bl && !bu && !br && !bd)
    dir=direction.STOP;
         }
    public void keyReleased(KeyEvent e) {
    int key=e.getKeyCode();
    switch(key){
    case KeyEvent.VK_CONTROL:
    tc.m =fire();
    break;
    case KeyEvent.VK_UP:
    bu=false;
    break;
    case KeyEvent.VK_DOWN:
    bd=false;
    break;
    case KeyEvent.VK_LEFT:
    bl=false;
    break;
    case KeyEvent.VK_RIGHT:
    br=false;
    break;
    }
    location();

            }
      public Milssile fire(){
      Milssile m=new Milssile(x,y,dir);
      return m;
      }
    }

    就是这个了,谢谢帮忙。
      

  2.   


    case R:
    x+=XSPEED;
    case RD:
    x+=XSPEED;
    y+=YSPEED;
    break;改成case R:
    x+=XSPEED;
    break;
    case RD:
    x+=XSPEED;
    y+=YSPEED;
    break;
    没有break