2017-09-25 4 views
1

私はJavaでゲームを作っていて、うまくいきます。しかし、問題は、私が地図上に2人のプレイヤーをスポーンするときに、1人のプレイヤーを移動させているときに、他のプレイヤーが同期していることです。私はそのプレーヤー1が(AWSD)を使い、player2が矢印を使うようにしたい。AWSDと矢印を使用して1キーボードのJava 2プレイヤー

これは、クラスのために、今私が持っているコードです:「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); 
     } 

    } 

私がしてきました私は2番目のハンドラを作成しようとしましたが、その結果、重複したコードがたくさんありました。何とかアイデアがありますか?

+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(真) – jwils

関連する問題