在XNA中双击单击

时间:2016-04-12 00:22:30

标签: c# oop xna

我正在制作国际象棋游戏,我制作了一个2D 2D数组的vector2D来保持棋子的位置,然后在第一次点击它然后在棋盘上它应该改变位置但我遇到了2个问题。

首先:我必须单击所需的一个Box 第二个:2个单击同时读取,所以当我点击它时,它只是将它的位置改为我点击它的位置

这是我的代码:

  public void ChangePositionAfterDrag()
        {
            bool CheckifFound=false,Black=false,White=false ; // if the loops hits the _mousedownposition and which kind was in the box
                                // save the index

       /*     for (int i = 100; i < 100+(80*8); i += 80)
            {
                for (int j = 80; j < 80 + (80 * 8); j += 80)
                {*/

            lastMouseState = currentMouseState;
            currentMouseState = Mouse.GetState();
            if (lastMouseState.LeftButton == ButtonState.Released && currentMouseState.LeftButton == ButtonState.Pressed)
            {
                if (CheckifFound == false)
                {
                    for (int k = 0; k < 2; k++)
                    {
                        for (int l = 0; l < 8; l++)
                        {
                            if (currentMouseState.X > _BlackPiecesPosition[k, l].X && currentMouseState.X < _BlackPiecesPosition[k, l].X + 80 && currentMouseState.Y < _BlackPiecesPosition[k, l].Y && currentMouseState.Y > _BlackPiecesPosition[k, l].Y-80 )
                            {
                                CheckifFound = true;
                                IndX = k;
                                IndY = l;
                                Black = true;
                                break;
                            }
                            if (currentMouseState.X > _WhitePiecesPosition[k, l].X && currentMouseState.X < _WhitePiecesPosition[k, l].X + 80 && currentMouseState.Y < _WhitePiecesPosition[k, l].Y && currentMouseState.Y > _WhitePiecesPosition[k, l].Y -80 )
                            {
                                CheckifFound = true;
                                IndX = k;
                                IndY = l;
                                White = true;
                                break;
                            }
                        }
                        if (CheckifFound == true)
                            break;
                    }
                }
            }
            LastMouseState2 = CurrentMouseState2;
            CurrentMouseState2 = Mouse.GetState();
            if (LastMouseState2.LeftButton == ButtonState.Pressed && CurrentMouseState2.LeftButton == ButtonState.Released)
            {
                NewPosition.X = LastMouseState2.X;
                NewPosition.Y = LastMouseState2.Y;
            }

            if(Black==true)
            {
                _BlackPiecesPosition[IndX, IndY].X = NewPosition.X;
                _BlackPiecesPosition[IndX, IndY].Y = NewPosition.Y;
            }
            else if (White == true)
            {
                    _WhitePiecesPosition[IndX, IndY].X = NewPosition.X;
                    _WhitePiecesPosition[IndX, IndY].Y = NewPosition.Y;
            }


        }

1 个答案:

答案 0 :(得分:0)

你正试图把它放在同一个功能中。这就是为什么你同时获得2次点击的原因。

您需要创建Take()Drop()功能,并在需要时调用它们。要知道女巫是应该调用的下一个函数,你可以使用一个简单的布尔变量。

代码结构应该是这样的:

bool isLastCalledTake = false;
protected override void Update (GameTime gameTime)
{
    //whtever are your first steps in update...
    if(/*user clicked on table logic here*/)
    {
        if(/*left button is clicked logic here*/)
        {
            if(isLastCalledTake)
            {
                isLastCalledTake = false;
                Drop();
            }
            else
            {
                isLastCalledTake = true;
                Take();
            }
        }
    }
}

所以,当你Take()时,你应该检查是否有什么需要采取,是否采取正确的颜色数字等,当你Drop()时,检查数字是否被删除桌子,可能的地方,另一个人物等等。

通过这种方式,您只需检查每次点击一次(不是功能的两倍),并执行Drop()Take()。这样就简化了代码和逻辑。

编辑: 或者,创建一个功能女巫将决定天气采取或放弃和平,并在每次点击鼠标时调用该功能

void OnMouseClick (bool take)
{
    if(take)
        /* take logic here */
    else
        /* drop logic here */
}