2010-12-31 6 views
0

私は現在、ゲームを作成していますが、なぜそれが発生しているのか分かっていないと思っていますが、私が知っていても解決方法はわかりません。 私は2D配列10 x 10を持っていて、タイルを占める「プレーヤー」クラスを持っています。 これで、プレイヤーのインスタンスを2つ作成し、スワイプでそれらを移動しました。 私は壁を取り除くまで、端を囲んで、プレイヤーが歩くことができず、すべてがうまく動作する「壁」を付けました。 壁を取り除いてキャラクター/プレイヤーを画面の端に移動させると、プレイヤーはそれ以上進むことができません。 ここでは、プレーヤーの2番目のインスタンスが画面の端になく、エッジにある「プレーヤー」の最初のインスタンスから2つのタイルを表示するという問題が発生します。 私はそれらをさらにエッジの方向に移動しようとすると、プレーヤーの最初のインスタンスが動かない、または何もしないことを理解していますが、プレーヤーの2番目のインスタンスはまだ移動する必要があります。Androidゲームのロジック問題

これは、ユーザーがスワイプ時に実行されるコードです:私が持っているプレイヤークラスで

if (player.getArrayX() - 1 != player2.getArrayX()) { 
    player.moveLeft(); 
} else if (player.getArrayX() - 1 == player2.getArrayX() && player.getArrayY() != player2.getArrayY()) { 
    player.moveLeft(); 
} 

if (player2.getArrayX() - 1 != player.getArrayX()) { 
    player2.moveLeft(); 
} else if (player2.getArrayX() - 1 == player.getArrayX() && player2.getArrayY() != player.getArrayY()) { 
    player2.moveLeft(); 
} 

を:

public void moveLeft() { 
    if (alive) { 
     switch (levelMaster.getLevel1(getArrayX() - 1, getArrayY())) { 
     case 0: 
      break; 
     case 1: 
      subX(); // basically moves player left 
      setArrayX(getArrayX() - 1); // shifts x coord of player 1 within tilemap 
      Log.d("semajhan", "x: " + getArrayX()); 
      break; 
     case 9: 
      subX(); 
      setArrayX(getArrayX() - 1); 
      setAlive(false); 
      break; 
     } 
    } 
} 

物質またはさらなる洞察上の任意のヘルプは大幅に、おかげでいただければ幸いです。もしelse文を追加することで解決

+0

だから、多くの質問を... 'player.getArrayXは()'は何ですか。 'subX()'とは何ですか? 'setArray()'は何をするのですか? 'getLeve1'は何を返しますか?今、この質問は完全に答えることはできません、あなたはかなり厄介なデザインを持っているように見えます。 – Falmarri

+0

getArrayX()は、プレーヤーのx座標を返します。 subX()はタイル幅を減算し、setArrayX()はプレーヤーの新しいx座標を設定し、getLevelは位置(x、y)に2dタイルマップIDを返します。私は本当にこれらの方法のすべてがうまくいくので質問した質問とは何が関係しているのか分かりません。私は、プレーヤーのインスタンスが、最初のプレーヤーインスタンスがタイルマップの端に当たることと関係があるために動いていないのかどうか疑問に思っていました。 – semajhan

+0

私はまだ 'subX()'が何をしているのか混乱しています。また、タイルマップIDは何を意味しますか? 0は壁、1は空きスペース、9は座標が無効であることを意味すると思いますか? – Computerish

答えて

0

public int getLevel1(int i, int j) { 

    int[][] level = { 
      {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, 
      {1, 1, 1, 0, 0, 1, 0, 1, 1, 1}, 
      {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, 
      {1, 0, 1, 1, 1, 1, 1, 1, 0, 1}, 
      {1, 0, 1, 1, 1, 1, 0, 1, 0, 1}, 
      {1, 0, 1, 1, 0, 1, 0, 1, 0, 1}, 
      {1, 0, 1, 1, 0, 1, 1, 1, 0, 1}, 
      {1, 0, 1, 1, 1, 1, 1, 1, 0, 1}, 
      {1, 0, 1, 1, 0, 1, 1, 1, 0, 1}, 
      {1, 0, 1, 1, 0, 1, 8, 1, 0, 1}, 
      {1, 0, 9, 1, 1, 1, 0, 1, 0, 1}, 
      {1, 0, 1, 1, 1, 1, 0, 1, 0, 1}, 
      {1, 0, 1, 1, 1, 1, 1, 1, 0, 1}, 
      {1, 0, 0, 0, 0, 0, 0, 0, 0, 1}, 
      {1, 1, 1, 1, 1, 1, 1, 1, 1, 1} 
    }; 
    if (i >= 0 && i <= 9 && j >= 0 && j <= 14) { 
     return level[j][i]; 
    } else { 
     return 10; 
    } 
}