2016-05-25 29 views
2

Ich entwickle gerade ein ähnliches Spiel wie "Breakout". Das Problem ist, dass, wenn der Ball über die Kanten eines Steins geht, er weder den Stein entfernt noch die Richtung des Balls ändert.Kollisionsfunktion funktioniert nicht richtig

if (ball.Left > l.Left && (ball.Left + ball.Width) < l.Left-margin + l.Width) 
{ 
    if (ball.Top > l.Height && ball.Top < l.Top) 
    { 
     this.Controls.Remove(l); 
     ballDX *= -1; 
     ballDY *= -1; 
    } 

    else if (ball.Top < l.Height && ball.Top > l.Bottom) 
    { 
     this.Controls.Remove(l); 
     ballDX *= +1; 
     ballDY *= +1; 
    } 
} 
+1

Ich würde den ersten Teil dieser beiden inneren ifs betrachten - Sie vergleichen die Position des Balls mit der Größe des Steuerelements (Höhe) - wahrscheinlich nicht das, was Sie von Anfang an wollten. – decPL

Antwort

0

an Ihrem Code Sehen, testen Sie

if (ball.Top > l.Height && ball.Top < l.Top) 

Aber dies scheint zu überprüfen, ob die Spitze Ihrer Kugel größer ist als die Höhe Ihres Ziegel, anstatt die Position des Ziegels . Könnte dort ein Problem sein?

Wenn das nicht das Problem ist, wäre mein Vorschlag, einen Debug-Code hinzuzufügen, um die Werte der Kugel- und Ziegelpositionen und -höhen auszugeben, damit Sie eine Vorstellung davon bekommen, was in Ihrer Berechnung falsch ist.