Как переместить изображение внутри сетки? - PullRequest
0 голосов
/ 07 мая 2020

Как я могу перемещать изображения внутри сетки?

У меня есть сетка 8x8, которую я заполняю объектами BoxView.

 var tap = new TapGestureRecognizer();
        tap.Tapped += (s, e) =>
        {
            Xamarin.Forms.BoxView b = s as Xamarin.Forms.BoxView;
            if (tapped == false)
            {
                xp = Convert.ToInt32(b.StyleId.Last());
                yp = Convert.ToInt32(b.StyleId.First());
                tapped = true;
            }
            else
            {
                int xd = Convert.ToInt32(b.StyleId.Last());
                int yd = Convert.ToInt32(b.StyleId.First());
                movePiece(chessboard.Board[xp, yp], xp, yp, xd, yd);
                tapped = false;
            }
        };

        for (int i = 0; i < 8; i++) // row
        {
            for(int j = 0; j < 8; j++) // column
            {
                if(((i % 2 == 0) && (j % 2 == 0)) || ((i % 2 != 0) && (j % 2 != 0)))
                {
                    Xamarin.Forms.BoxView box = new Xamarin.Forms.BoxView { Color = Color.AntiqueWhite, StyleId = i.ToString() + j.ToString()};
                    board.Children.Add(box, i, j);
                    box.GestureRecognizers.Add(tap);
                }
                else
                {
                    Xamarin.Forms.BoxView box = new Xamarin.Forms.BoxView { Color = Color.IndianRed, StyleId = i.ToString() + j.ToString()};
                    board.Children.Add(box, i, j);
                    box.GestureRecognizers.Add(tap);
                }

            }
        }

        return board;
    }

Я пытался использовать TapGestureRecognizer на плитках, но он не реагировал, или я получил исключение IndexOutOfBound из этого: movePiece(chessboard.Board[xp, yp], xp, yp, xd, yd);

Изменить:

Код для movePiece ():

private static void movePiece(Piece piece, int x_prev, int y_prev, int x_dest, int y_dest)
    {
        loadPieces(piece, x_dest, y_dest);
    }

Я еще не реализовал logi c в функции. На данный момент все, что ему нужно сделать, это загрузить похожий кусок на плитку назначения.

Код для loadPieces ()

private static void loadPieces(Piece piece, int x, int y)
    {
        Image image = new Image();

        switch (piece.Name)
        {
            case "pawn" when piece.White == true:
                image.Source = "Assets/Pieces/WhitePawn.png";
                break;
            case "rook" when piece.White == true:
                image.Source = "Assets/Pieces/WhiteRook.png";
                break;
            case "knight" when piece.White == true:
                image.Source = "Assets/Pieces/WhiteKnight.png";
                break;
            case "bishop" when piece.White == true:
                image.Source = "Assets/Pieces/WhiteBishop.png";
                break;
            case "king" when piece.White == true:
                image.Source = "Assets/Pieces/WhiteKing.png";
                break;
            case "queen" when piece.White == true:
                image.Source = "Assets/Pieces/WhiteQueen.png";
                break;
            case "pawn" when piece.White == false:
                image.Source = "Assets/Pieces/BlackPawn.png";
                break;
            case "rook" when piece.White == false:
                image.Source = "Assets/Pieces/BlackRook.png";
                break;
            case "knight" when piece.White == false:
                image.Source = "Assets/Pieces/BlackKnight.png";
                break;
            case "bishop" when piece.White == false:
                image.Source = "Assets/Pieces/BlackBishop.png";
                break;
            case "king" when piece.White == false:
                image.Source = "Assets/Pieces/BlackKing.png";
                break;
            case "queen" when piece.White == false:
                image.Source = "Assets/Pieces/BlackQueen.png";
                break;
        }
        Grid.SetRow(image, x);
        Grid.SetColumn(image, y);
        board.Children.Add(image);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...