首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2ME开发 >

游戏按键有关问题

2012-04-14 
游戏按键问题小弟做了个游戏,在操作精灵时如同时按下两个方向健精灵就斜着走这个问题应怎样解决,各位大哥

游戏按键问题
小弟做了个游戏,在操作精灵时   如同时按下两个方向健   精灵就斜着走   这个问题应怎样解决,各位大哥帮帮忙。  
  我的代码如下:
    package   hello;
import   java.io.IOException;
import   java.io.InputStream;
import   javax.microedition.midlet.*;
import   javax.microedition.lcdui.*;
import   javax.microedition.midlet.MIDlet;
import   java.util.Random;
import   javax.microedition.lcdui.game.*;

/**
  *
  *   @author     wjs5-8
  *   @version
  */
public   class   Midlet   extends   MIDlet   implements   CommandListener  
{
        private   Display   display;
        private   deycanvas   maincanvas;
        private   Command   exitCommand=new   Command( "退出 ",Command.EXIT,1);
        public   void   startApp()   {
                if(display==null)
                {display=Display.getDisplay(this);
                  maincanvas=new   deycanvas();
                  maincanvas.addCommand(exitCommand);
                  maincanvas.setCommandListener(this);
                  new   Thread(maincanvas).start();
                  display.setCurrent(maincanvas);
               
                }
               
        }
       
        public   void   pauseApp()   {
        }
       
        public   void   destroyApp(boolean   unconditional)   {
        }
        public   void   commandAction(Command   cmd,Displayable   displayable){
       
        if(cmd==exitCommand)
        {
        destroyApp(false);
        notifyDestroyed();
          }
       
        }
}
  class   deycanvas   extends   GameCanvas   implements   Runnable{


public   int   action;
public   boolean   leftPressed,righrPressed,stop,upPressed,downPressed;
private   int   width;//屏幕宽度
  private   int   height;//屏幕高
  private   int   x,y,vx,vy;
  public   static   final   int   BLUE   =   0x000000ff;
  public   Graphics   g;
    private   Sprite   spriteTank;
    private   Sprite   diren;
    private   Sprite   spr;
    private   Sprite   spl;
    private   Sprite   spu;
    private   Sprite   spd;
    private   boolean   zhuangtai=false;
deycanvas()
{   super(true);
g=getGraphics();


stop=true;
width   =   getWidth();
height   =   getHeight();
x=width/2;
y=height/2;
vx=x;
vy=y;


try{
Image   image   =   Image.createImage( "/img/5.png ");
Image   imagediren=Image.createImage( "/img/4.png ");


spr=new   Sprite(image,24,32);
spl=new   Sprite(image,24,32);
spu=new   Sprite(image,24,32);
spd=new   Sprite(image,24,32);
spriteTank=new   Sprite(image,24,32);
diren=new   Sprite(imagediren,24,32);
spl.setFrameSequence(new   int[]{9,10,11});
spr.setFrameSequence(new   int[]{3,4,5});
spu.setFrameSequence(new   int[]{0,1,2});
spd.setFrameSequence(new   int[]{6,7,8});


}
catch(IOException   e)  
          {   e.printStackTrace();
                }
}
private   void   input()
{
int   keyStates=getKeyStates();
if((keyStates   &   LEFT_PRESSED)!=0)
{spriteTank=spl;
            leftPressed=true;
        System.out.println( "leftleftleftlelt ");
}
if((keyStates   &   RIGHT_PRESSED)!=0)
{
   
spriteTank=spr;

    righrPressed=true;
           
}
if((keyStates   &   UP_PRESSED)!=0)
{   spriteTank=spu;
    upPressed=true;
           
}
if((keyStates   &   DOWN_PRESSED)!=0)
{   spriteTank=spd;
  downPressed=true;
         
}
}
public   synchronized   void   keyPressed(int   keyCode)
{
int   action=getGameAction(keyCode);

switch(action)
{  
        case   LEFT:
          leftPressed=true;
         
                break;
        case   RIGHT:
         
            righrPressed=true;
                break;
        case   UP   :
         
                upPressed=true;
                break;
        case   DOWN   :
               
                downPressed=true;
                break;
        default:
                break;
                               


}
}


public   void   run()
{   int   i=3;

   
  while(stop)
{
        input();
     
    if(leftPressed)
  {
          left();
         
          leftPressed=false;
           


  }
if(righrPressed)
{  
 
    right();

 
    righrPressed=false;
}
if(upPressed)
{
up();
upPressed=false;
}
if(downPressed)
{
down();
downPressed=false;
}
            diren.setPosition(100,57);
    spriteTank.setPosition(vx,vy);
 
    if(spriteTank.collidesWith(diren   ,true))
    {
    zhuangtai=true;
    vx=vx-2;
      spriteTank.prevFrame();
    }else{
        zhuangtai=false;
    }

  rrrr(g,   spriteTank);


try{
        Thread.sleep(50);
       

}catch(InterruptedException   e)

{

}
  }
}
public   void   left()
{
        if(vx> 5)
        {
            vx=vx-2;
            spriteTank.nextFrame();
        }


}
public   void   right()
{
if(vx <width-5)
{
      vx=vx+2;
      spriteTank.nextFrame();
}


}
public   void   up(){
if(vy> 5)
{    
        vy=vy-2;
        spriteTank.nextFrame();
}

}
public   void   down()
{
if(vy <height-5)
{
vy=vy+2;
spriteTank.nextFrame();
}

 
}
public   void   rrrr(Graphics   g,Sprite     spriteTank   ){
    g.setColor(BLUE);
                g.fillRect(0,   0,   width,   height);
         
              if(zhuangtai)
              {
                        g.setColor(0xffffff);
              }else
                {   g.setColor(0x0000ffff);
              }
                g.fillRect(0,   0,   width,   height);

  diren.paint(g);
  spriteTank.paint(g);
                flushGraphics();
}

[解决办法]
斜着走不是正确的吗?同时按右和上,不是理所当然的往右上走?

你要是不想这样,那把你input方法里的一堆if/if/if...换成if/else if/else if......处理一个按键后就不再处理其他。
注意优先级。
[解决办法]
if(leftPressed)
{
left();

leftPressed=false;

}
if(righrPressed)
{

right();


righrPressed=false;
}
if(upPressed)
{
up();
upPressed=false;
}
if(downPressed)
{
down();
downPressed=false;
}

把这些if修改成一个if-else if这样的结构,合并成一个条件

热点排行