2016-04-14 12 views
1

Ich arbeite derzeit an der Entwicklung einer Android-Version von Schach, aber ich habe ein Problem mit dem Zeichnen. Ich habe eine ChessboardView-Klasse eingerichtet, die die Ansicht erweitert und eine andere Hilfsklasse namens Tile verwendet. Das Problem ist, dass alle meine Teile an den richtigen Stellen gezeichnet werden (mein Debugger zeigt, wenn ich auf Fliesen klicke, welches Stück ich treffe), aber alle Bilder erscheinen als schwarze Königinnen (ich denke, weil es der letzte Fall ist ist in meiner Schalteraussage getroffen, weil, wenn ich es los werde, alle Stücke in schwarze Türme verwandeln). Hier ist relevant Code:Android Zeichnung Schachfiguren

ChessboardView.java:

protected void onDraw(final Canvas canvas){ 
    final int width = getWidth(); 
    final int height = getHeight(); 
    this.squareSize = Math.min(
      getSquareSizeWidth(width), 
      getSquareSizeHeight(height) 
    ); 
    getOrigins(width,height); 
    for(int col = 0; col < NUM_RC; col++){ 
     for(int row = 0; row < NUM_RC; row++){ 
      final int xCoord = getXCoord(col); 
      final int yCoord = getYCoord(row); 
      final Rect tileRect = new Rect(xCoord,yCoord,xCoord+squareSize,yCoord+squareSize); 
      String loc = getRowString(row) + getColumnString(col); 
      String piece = Chessboard.getPieceAtLocation(loc); 
      tiles[col][row].setTileRect(tileRect); 
      tiles[col][row].draw(canvas,piece,getContext()); 
     } 
    } 
} 

Tile.java

public void draw(Canvas canvas,String piece, Context c){ 
    canvas.drawRect(tileRect, tileColor); 
    if(!piece.equals(" ") && !piece.equals("##")){ 
     Bitmap pieceBM = null; 
     switch(piece) { 
      case "wp": { 
       pieceBM = BitmapFactory.decodeResource(c.getResources(), R.drawable.white_pawn); 
      } 
      case "wK": { 
       pieceBM = BitmapFactory.decodeResource(c.getResources(), R.drawable.white_king); 
      } 
      case "wB": { 
       pieceBM = BitmapFactory.decodeResource(c.getResources(), R.drawable.white_bishop); 
      } 
      case "wN": { 
       pieceBM = BitmapFactory.decodeResource(c.getResources(), R.drawable.white_knight); 
      } 
      case "wR": { 
       pieceBM = BitmapFactory.decodeResource(c.getResources(), R.drawable.white_rook); 
      } 
      case "wQ": { 
       pieceBM = BitmapFactory.decodeResource(c.getResources(), R.drawable.white_queen); 
      } 
      case "bp": { 
       pieceBM = BitmapFactory.decodeResource(c.getResources(), R.drawable.black_pawn); 
      } 
      case "bK": { 
       pieceBM = BitmapFactory.decodeResource(c.getResources(), R.drawable.black_king); 
      } 
      case "bB": { 
       pieceBM = BitmapFactory.decodeResource(c.getResources(), R.drawable.black_bishop); 
      } 
      case "bN": { 
       pieceBM = BitmapFactory.decodeResource(c.getResources(), R.drawable.black_knight); 
      } 
      case "bR": { 
       pieceBM = BitmapFactory.decodeResource(c.getResources(), R.drawable.black_rook); 
      } 
      case "bQ": { 
       pieceBM = BitmapFactory.decodeResource(c.getResources(), R.drawable.black_queen); 
      } 
     } 
     canvas.drawBitmap(pieceBM,null,tileRect,null); 
    } 
} 

Antwort

3

Sie benötigen einen break; am Ende jeweils setzen. Sonst fällt es herunter und führt auch den nächsten Fall aus.

+0

ahh wow ich habe das komplett vermisst. Danke! – atg963

+0

@ atg963 und die Klammern ('{}') sind redundant; In einem switch/case-Block werden die Anweisungen pro Fall durch 'case x:' und 'break' begrenzt, mit Ausnahme der äußeren Klammern nach 'switch()' sind keine Klammern für einen Schalter/Fall-Block erforderlich. Beispiel und weitere Informationen: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html – 11684

+0

Und @GabeSechan: Ich weiß, es ist schon eine Weile her, seit du deine Antwort geschrieben hast, aber ich denke, es könnte sein Schön für zukünftige Besucher, dies in Ihre Antwort aufzunehmen. – 11684