Nochmals Hallo,
im Zuge meines aktuellen OOP-Projektes hab ich eine Klasse "Ball" von einer PictureBox erstellt, welche auf einem Panel, dem "Spielfeld" sich frei bewegen können soll.
Funktioniert soweit prächtig, jedoch soll er bei Kollision mit dem Spielfeldrand die Richtung wechseln. Auf der Unterseite tut er es, auf der Oberseite nicht.
Hier nun aller relevanter Code:
Ball.cs:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| namespace Arkanoid { class Ball : System.Windows.Forms.PictureBox { private bool up = false; private bool down = true;
public void MoveYourself() { if (down) { this.Top = this.Top + 1; } else if (up) { this.Top = this.Top - 1; } } public void ChangeDirectionY() { if (up) { up = false; down = true; } if (down) { up = true; down = false; } } } } |
Form1.cs:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| namespace Arkanoid { public partial class Form1 : Form { Timer tim_thegame = new Timer(); Ball ball = new Ball();
private void Form1_Load(object sender, EventArgs e) { ball.Width = 16; ball.Height = 16; ball.Image = Arkanoit.Properties.Resources.ball; ball.Top = 200; ball.Left = 200; pan_gamefield.Controls.Add(ball); tim_thegame.Tick += new EventHandler(tim_thegame_Tick); tim_thegame.Interval = 10; tim_thegame.Enabled = true; }
void tim_thegame_Tick(object sender, EventArgs e) { if (ball.Top <= pan_gamefield.Top) { ball.ChangeDirectionY(); } else if (ball.Bottom >= pan_gamefield.Bottom) { ball.ChangeDirectionY(); } ball.MoveYourself(); } } |
Der Ball startet jetzt auf dem Spielfeld und fährt nach unten, prallt ab und verschwindet nach oben aus dem Bild. Habe ich etwas bei der Kollisionsabfrage falsch gemacht?
Warum geht es nach unten, aber nach oben nicht?