我正在制作国际象棋游戏,我制作了一个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;
}
}
答案 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 */
}