读书人

游戏按键有关问题

发布时间: 2012-04-14 17:14:21 作者: rapoo

游戏按键问题
小弟做了个游戏,在操作精灵时 如同时按下两个方向健 精灵就斜着走 这个问题应怎样解决,各位大哥帮帮忙。
我的代码如下:
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这样的结构,合并成一个条件

读书人网 >J2ME开发

热点推荐