2016-04-12 11 views
0

Ich mache ein Schachspiel und ich machte ein 2D-2D-Vektor2D, um die Position der Stücke zu halten und dann, wenn Sie zuerst auf das Board klicken, dann sollte es die Position ändern, aber ich bekam 2 Probleme.Double Single Klicken in XNA

zuerst: Ich habe eine Box über den erforderlichen eine zweiten klicken: so das 2 Einzel Clicked liest zur gleichen Zeit, wenn ich auf den Stücken klicken Sie es einfach ändern Position an den Ort, wo ich es von

geklickt

hier ist mein Code:

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

Vielleicht könnten Sie etwas Bild/Screenshot hinzufügen, was zu erklären, ist Ihr Absicht, und was sind deine Probleme? Deine Beschreibung sieht für mich zu vage aus. –

Antwort

0

Sie versuchen, das Stück zu nehmen und es in der gleichen Funktion fallen. Deshalb erhalten Sie 2 Klicks gleichzeitig.

Sie müssen eine Take() und Drop() Funktion erstellen und diese bei Bedarf aufrufen. Um zu wissen, dass Hexe die nächste Funktion ist, die aufgerufen werden sollte, könnten Sie eine einfache boolesche Variable verwenden.

sollte die Code-Struktur so etwas wie diese:

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(); 
      } 
     } 
    } 
} 

Und so, wenn Sie Take(), sollten Sie prüfen, ob es etwas zu nehmen ist, ist die richtige Farbe Figur genommen, usw., und wenn Sie Drop(), prüfen Sie, ob die Figur auf den Tisch fallen gelassen wird, auf den möglichen Platz auf der anderen Figur, usw.

auf diese Weise können einmal klicken, werden überprüft (nicht doppelt so in Ihrer Funktion), und tun Drop() oder Take() . Auf diese Weise werden Code und Logik vereinfacht.

EDIT: Alternativ erstellen Sie eine Funktion Hexe wird Wetter entscheiden, um den Frieden zu nehmen oder fallen lassen, und auf jeder Maus, die Funktion aufrufen

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