2017-09-25 28 views
1

我正在用java制作游戏,并且它工作正常。但事情是,当我在地图上产生2名球员时,我正在移动一名球员,另一名球员正在同步。我希望玩家1使用(AWSD),玩家2使用箭头。Java 2球员在1键盘上使用AWSD和箭头

这是我现在所拥有的该类的代码:“KeyInput”

public void keyPressed(KeyEvent e){ 
     int key = e.getKeyCode(); 

     //If the special key is pressed, set it to true. 
     if(key == KeyEvent.VK_W) handler.setUp(true); 
     if(key == KeyEvent.VK_S) handler.setDown(true); 
     if(key == KeyEvent.VK_A) handler.setLeft(true); 
     if(key == KeyEvent.VK_D) handler.setRight(true); 

     if(key == KeyEvent.VK_I) handler.setUp(true); 
     if(key == KeyEvent.VK_K) handler.setDown(true); 
     if(key == KeyEvent.VK_J) handler.setLeft(true); 
     if(key == KeyEvent.VK_L) handler.setRight(true); 
    } 
    //If the pressed key is released, set everything to false. 
    public void keyReleased(KeyEvent e){ 
     int key = e.getKeyCode(); 

     //If the special key is released, put it to false. 
     if(key == KeyEvent.VK_W) handler.setUp(false); 
     if(key == KeyEvent.VK_S) handler.setDown(false); 
     if(key == KeyEvent.VK_A) handler.setLeft(false); 
     if(key == KeyEvent.VK_D) handler.setRight(false); 
     if(key == KeyEvent.VK_P) handler.setDropBomb(true); 

     if(key == KeyEvent.VK_I) handler.setUp(false); 
     if(key == KeyEvent.VK_K) handler.setDown(false); 
     if(key == KeyEvent.VK_J) handler.setLeft(false); 
     if(key == KeyEvent.VK_L) handler.setRight(false); 
     if(key == KeyEvent.VK_M) handler.setDropBomb(true);  
    } 

在类:“玩家”作为跟随代码:

public Player(int x, int y, ID id, Handler handler, Game game, SpriteSheet ss) { 
     super(x, y, id, ss); 
     this.handler = handler; 
     this.game = game; 

     //Get the player image of the SpriteSheet 
     player_image= ss.grabImage(1,1,32,48); 
    } 

    public void tick() { 
     x += velX; 
     y += velY; 

     collision(); 

     //Set the movement of the player: left,right,up,down 
     if(handler.isUp()) velY = -5; 
     else if(!handler.isDown()) velY = 0; 

     if(handler.isDown()) velY = 5; 
     else if(!handler.isUp()) velY = 0; 

     if(handler.isRight()) velX = 5; 
     else if(!handler.isLeft()) velX = 0; 

     if(handler.isLeft()) velX = -5; 
     else if(!handler.isRight()) velX = 0; 

     if(handler.isDropped()){ 
      Dropbomb(x,y); 
     } 

    } 

我一直思考这个年龄..我试图做第二个处理程序,但导致了很多重复的代码。不知何故有一个想法?

+0

随着不同的控制你需要一些“重复的代码” – coinbird

回答

0

您需要推迟哪些键会影响player1以及哪些键会影响player2。事情是这样的:

//If the special key is pressed, set it to true. 
    if(key == KeyEvent.VK_W) handler.setUpPlayer1(true); 
    if(key == KeyEvent.VK_S) handler.setDownPlayer1(true); 
    if(key == KeyEvent.VK_A) handler.setLeftPlayer1(true); 
    if(key == KeyEvent.VK_D) handler.setRightPlayer1(true); 

    if(key == KeyEvent.VK_I) handler.setUpPlayer2(true); 
    if(key == KeyEvent.VK_K) handler.setDownPlayer2(true); 
    if(key == KeyEvent.VK_J) handler.setLeftPlayer2(true); 
    if(key == KeyEvent.VK_L) handler.setRightPlayer2(true); 

或者你也可以在通过播放器作为一个变量:

... 
if(key == KeyEvent.VK_W) handler.setUp(true,1); 
... 
if(key == KeyEvent.VK_I) handler.setUp(true,2); 
... 

或者,如果你有这些播放器变量全球访问,就像这样:

... 
if(key == KeyEvent.VK_W) handler.setUp(true, Global.PLAYER_1); 
... 
if(key == KeyEvent.VK_I) handler.setUp(true, Global.PLAYER_2); 
... 
+0

然后我必须(为player1和player2设置方法)这是一个有点脏的代码,我猜.. – Alegou20

+0

如果你有玩呃对象,你可以做播放器[1,2] .setUp(true) – jwils

相关问题