Warum ändert sich mein Boolean?

GregoryMiller

Grünschnabel
Hallo Leute
Ich mache ein bisschen Puzzle-Spiel, aber ich kämpfe mit etwas. Meine boolesche Variable crossButtonClicked verhält sich seltsam. Ich initialisiere es am Anfang falsch und mache es wahr, wenn der Zeiger über einem Kreuz-Button ist, indem ich es im OnPointerEnter-Event wahr mache. Ich habe einige dieser beiden Bedingungen getestet, wenn (crossButtonClicked == true) und sonst if (crossButtonClicked = = false) gibt true zurück, was merkwürdig ist, da ich meinen Boolean nirgendwo außer im OnPointerEnter-Ereignis ändere.
Vielen Dank im Voraus

Code:
 public class EventHandler : MonoBehaviour,IPointerEnterHandler
     {
    
         private bool buttonClicked=false;
         private bool crossButtonClicked = false;
         private GameObject youWonPanel;
         private Image image;
         private GameObject youLostPanel;
        
    
    
         void Awake()
         {
             youWonPanel = GameObject.Find("You Won");
             youLostPanel = GameObject.Find("YouLostPanel");
            
         }
         void Start()
         {
            
             image = gameObject.GetComponent<Image>();
             youWonPanel.SetActive(false);
             youLostPanel.SetActive(false);
            
         }
    
         void Update()
         {
    
             for (int i = 0; i < Input.touchCount; i++)
             {
                 Touch touch = Input.GetTouch(i);
                 if (touch.phase==TouchPhase.Moved)
                 {
                    
                     if (buttonClicked == true)
                     {
                         image.color= Color.blue;
                        
                     }
                    
                 }
                 if (touch.phase == TouchPhase.Ended)
                 {
                     Debug.Log("touch phase ended " + touch.position);
                     //Debug.Log((Vector2)GameManager.starButtons[0].transform.position);
                     //Debug.Log((Vector2)GameManager.starButtons[1].transform.position);
                     float distance1 = Vector2.Distance(GameManager.starButtons[0].transform.position, touch.position);
                     float distance2 = Vector2.Distance(GameManager.starButtons[1].transform.position, touch.position);
                     Debug.Log("DIstance1 is " + distance1);
                     Debug.Log("Distance2 is " + distance2);
    
                     if (distance1 < 50f || distance2 < 50f)
                     {
                        
                         if (crossButtonClicked == true)
                         {
                             youLostPanel.SetActive(true);
                             for (int j = 0; j < GameManager.temporaryCross.Length; j++)
                             {
                                 if (GameManager.temporaryCross[j] != null)
                                 {
                                     GameManager.temporaryCross[j].SetActive(true);
                                 }
    
                             }
                         }
    
                        else if(crossButtonClicked==false)
                         {
                             youWonPanel.SetActive(true);
                             Debug.Log(crossButtonClicked);
                         }
    
                     }
                     else
                     {
                         image.color = Color.white;
                         buttonClicked = false;
                     }
                    
                 }
             }
         }
    
         public void OnPointerEnter(PointerEventData eventData)
         {
             Debug.Log("Im on button " + gameObject.name);
             if (eventData.pointerCurrentRaycast.gameObject != null)
             {
                 for(int i = 0; i < GameManager.temporaryButtons.Length; i++)
                 {
                     if (eventData.pointerCurrentRaycast.gameObject.name == "CrossButtons")
                     {
                         Debug.Log("Pointer over crossButton");
                         crossButtonClicked = true;
                        
                     }
                 }
                 Debug.Log("Mouse Over: " + eventData.pointerCurrentRaycast.gameObject.name);
             }
            
    
             buttonClicked = true;
    
         }
 
C# ist doch kein Java!

Aber ehrlich gesagt verstehe ich dein Problem nicht ganz, willst du sagen, dass das hier true ausgibt?

C#:
else if(crossButtonClicked==false) {
     youWonPanel.SetActive(true);
    Debug.Log(crossButtonClicked);
 }
 
Ich wurde auf der anderen Seite beraten und entschloss mich, sie auch hier zu posten

Schönen Tag.
Überprüfen Sie Ihren lapalingo erfahrung Code.
Es ist nicht möglich, dass es in der gleichen Iteration in ein "if" und ein "else if" eintritt.
Also, oder Sie haben 2 Skripts, die Dinge erledigen, oder das erste "wenn" ändert etwas, das den Code in das "sonst" bringt, wenn "in der nächsten Pause".
 
Moin,
Es ist nicht möglich, dass es in der gleichen Iteration in ein "if" und ein "else if" eintritt.
Also, oder Sie haben 2 Skripts, die Dinge erledigen, oder das erste "wenn" ändert etwas, das den Code in das "sonst" bringt, wenn "in der nächsten Pause"
hmm, JETZT bin ich auch verwirrt :eek:

Du kannst aber Dein IF deutlich einfacher schreiben:
Java:
if( crossButtonClicked )  // reicht aus, da es ein bool'scher Wert ist
{
    youLostPanel.SetActive(true);
    for (int j = 0; j < GameManager.temporaryCross.Length; j++)
    {
        if (GameManager.temporaryCross[j] != null)
        {
            GameManager.temporaryCross[j].SetActive(true);
        }
    }
}
else   // reicht auch aus! Wenn nicht TRUE, kann es ja nur FALSE sein
{
    youWonPanel.SetActive(true);
    Debug.Log(crossButtonClicked);
}

So, und poste jetzt bitte nochmal verständlich Dein Frage !!
VG Klaus
 
Zurück