2016-12-24 2 views
0

私は一種のチェスゲームをコーディングしていますが、少し問題があります。 私のゲームではボードにいくつかのポーンがあり、ボードは100タイルに分割されています。私は何をしたいのかLibgdx - クリックすると俳優を選択し、2回目のクリックで別の位置に移動します。

は次のとおりです。私はポーンをクリックすると、それを選択だと私は空のタイルをクリックしたときに、選択されたポーンは、このタイルに移動します。

私はPawnをクリックしても問題はありませんが、2番目のクリックで問題が発生します。私はエラーがあります:Null Pointer Exception。私は選択されたPawnをメモリに保持し、2回目をクリックすると新しい座標に移動する方法を知らない。

私は俳優がクリックされた場合に待機するようにタッチダウン()メソッドでジェスチャー検出器を使用します。

これは私のコードです、コントローラです。私は空のタイルをクリックするとIF条件がOKではないとthis.plateau.PieceSelectがNullであるので、私はそれが動作していない知っている

Actor cibletile = tiles[(int) Cx][(int) Cy]; //the clicked tile 

    int tx = (int) cibletile.getX(); // pos x clicked tile 
    int ty = (int) cibletile.getY(); // pos y clicked tile 

    // if there is a Pawn on the tile 
    if (pieces[tx][ty] != null) { 
     System.out.println("there is a pawn here !"); 
     Piece piece = pieces[tx][ty]; 
     this.selectPiece(piece); //select the clicked pawn => this.plateau.PieceSelect 

     } // there are no problems with this if condition all is working 

    else{ 
     this.movePiece(this.plateau.PieceSelect,tx,ty); //move the selected Pawn to new coordonates when I click a second time 


    } //the problem is here, I don't know how to move the Pawn after he is selected 

:私はちょうどクリック質屋で興味深い部分を置きます。これが私がNull Pointer Exceptionを持っている理由です。

私は本当にポーンを選択して、私は二度目、多分別の方法をクリックしたときに、それを動かすために行う方法がわかりませんか?

私を助けることができればとてもうれしいです。私は今、この問題を1週間かかっています。

答えて

0

これは本当に簡単です。 else句をelse ifに変換し、actorを選択したかどうかを確認してください。

else if(//Actor is selected i.e. some Actor object != null) { 
    this.movePiece(this.plateau.PieceSelect,tx,ty); 
} 
+0

回答ありがとうございますが、私は試してもまだ動作していません。問題は、私が全体のメドをクリックするたびに(私が最初の投稿に入れたすべてのコード)再び呼び出されるということです。だから、私がPawnをクリックすると、ピースは選択されますが、空のタイルをもう一度クリックすると、selectPieceはもう存在しません。空のタイルをクリックするとIF条件がOKになります。ヌルポインタ例外が発生します。 – jejelink69

関連する問題