none
Ein Taste kurz ignorieren möglich? RRS feed

  • Frage

  • void Rectangles(object sender, EventArgs e)
            {
                double p1 = Canvas.GetTop(rectangle1) ;
                double p2 = p1 + 50;
                double p3 = Canvas.GetTop(rectangle2);
                double p4 = p3 + 50;
                double y = Canvas.GetTop(ball);
                double x = Canvas.GetLeft(ball);
                double x2 = Canvas.GetLeft(ball);
                if (y + ball.ActualHeight >= p1 && y <= p2 && x == ball.ActualWidth)
                {
                    score++;
                    ScoreLeft.Content = score;
                }
                if (y + ball.ActualHeight >= p3 && y <= p4 && x2 == 457)
                {
                    score2++;
                    ScoreRight.Content = score2;
                }
                if (p1 == 0) //hier soll die Taste ignoriert werden
                {
                    Canvas.SetTop(rectangle1, 1);
    
                }
            }

    Ich möchte das, wenn p1 = 0 ist, dass die Taste W vom Prgramm ignoriert wird bis p1 nicht mehr 0 ist. Ist das umsetzbar?

    Wenn mehr Infos und/oder Code benötigt wird, einfach Bescheid geben.

    Danke im Voraus.


    • Bearbeitet FoxGaming Sonntag, 10. September 2017 16:41
    Sonntag, 10. September 2017 16:41

Antworten

Alle Antworten

  • Hey,

    um auf das Drücken der Taste W zu reagieren, verwendest du sicherlich einen EventHandler. Dort kannst du überprüfen, ob p1 != 0 ist.

    public void keyDownEventHandler(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.W)
        {
            if (Canvas.GetTop(rectangle1) == 0)
            {
                return;
            }
            // Set new position of rectangle
        }
    }


    Ein anderer Ansatz, den man wählen kann, ist es, für den Pong-Schläger eine eigene Klasse zu erstellen und im Setter darauf zu achten, dass man der y-Koordinate keine negativen Werte zuweist.

    class Paddle
    {
        private Point position;
        public Point Position
        {
            get => this.position;
            set
            {
                if (value.Y > 0)
                {
                    this.position = value;
                }
            }
        }
    }

    Dadurch wird zwar nicht das Drücke der Taste ignoriert, aber die Position des Schlägers ändert sich nicht und kann sozusagen nicht über den Rand hinaus.

    Beste Grüße

    Sonntag, 10. September 2017 17:19
  • Hey,

    um auf das Drücken der Taste W zu reagieren, verwendest du sicherlich einen EventHandler. Dort kannst du überprüfen, ob p1 != 0 ist.

    public void keyDownEventHandler(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.W)
        {
            if (Canvas.GetTop(rectangle1) == 0)
            {
                return;
            }
            // Set new position of rectangle
        }
    }


    Ein anderer Ansatz, den man wählen kann, ist es, für den Pong-Schläger eine eigene Klasse zu erstellen und im Setter darauf zu achten, dass man der y-Koordinate keine negativen Werte zuweist.

    class Paddle
    {
        private Point position;
        public Point Position
        {
            get => this.position;
            set
            {
                if (value.Y > 0)
                {
                    this.position = value;
                }
            }
        }
    }

    Dadurch wird zwar nicht das Drücke der Taste ignoriert, aber die Position des Schlägers ändert sich nicht und kann sozusagen nicht über den Rand hinaus.

    Beste Grüße

    Hier EventHandler:

    private void OnButtonKeyDown(object sender, KeyEventArgs e)
            {
                string test = e.Key.ToString();
    
                if (test == "W" )
                {
                    Canvas.SetTop(rectangle1, Canvas.GetTop(rectangle1) - 2.5);
                }
                if (test == "S")
                {
                    Canvas.SetTop(rectangle1, Canvas.GetTop(rectangle1) + 2.5);
                }
    
            }

    Allerdings wüsste ich nicht wie ich deinen ersten Vorschlag drauf anwenden könnte. Könntest du mir da behilfreich sein

    Sonntag, 10. September 2017 17:46
  • Okay ich habe es durch rumprobieren hinbekommen. Lösung war einfacher als gedacht:

    if (p1 <= 0)
                {
                    Canvas.SetTop(rectangle1, 1);
                }

    man kann W drücken wie man will, der Rechteck bleibt im Bild.

    Trotzdem danke für deine Bemühungen

    Sonntag, 10. September 2017 17:52