Ich mache ein einfaches Spiel. Es gelang mir, meinen Charakter mit Pfeiltasten und Feuer zu bewegen. Ich habe der Karte einige Wände hinzugefügt, die Bildkästen sind. Ich schaffte es die Kollision wie folgt zu erkennen: „colision“Kollisionserkennung und Stop-Bewegung
private void timer6_Tick(object sender, EventArgs e){
foreach (PictureBox pic in brick){
if (pic.Bounds.IntersectsWith(pb_sprite.Bounds)){
Console.WriteLine("Colision!");
switch (rotation){
case "up":
canup = false;
candown = true;
canleft = true;
canright = true;
break;
case "down":
canup = true;
candown = false;
canleft = true;
canright = true;
break;
case "left":
candown = true;
canup = true;
canleft = false;
canright = true;
break;
case "right":
candown = true;
canup = true;
canleft = true;
canright = false;
break;
}
}
else
{
Console.WriteLine("No colision?!");
}
}
}
Es ist, als aber bald erwartet funktioniert, wie ich das Objekt getroffen (Wand) ich Echo, das in Ordnung ist, stoppt auch die Bewegung in die Richtung, in die der Charakter bei der Kollision blickte. Die Sache ist, wenn ich die Kollision verlasse, bleibt eines dieser Bools falsch, was verhindert, dass sich mein Charakter wieder in dieselbe Richtung bewegt. Ich habe versucht, alle diese Bools in anderen Zweig True, aber da es fünf Wände gibt, auch wenn es eine Kollision sonst Zweig wird ausgeführt 4 mal von 5. Ich brauche eine Art von "any" -Funktion, um zu überprüfen, ob keine oder keine Wände sind in einem Moment getroffen werden.
Sie können Kollision überprüfen auf Ihrer 'movement' Funktion -assuming Sie ein- haben, anstatt in Ihrem' Timer' und wenn Sie eine Kollision erkennen, was Sie tun erlaube diese Bewegung nicht. – uTeisT
Betrachten Sie einen anderen Ansatz: Der Benutzer gibt einen * Befehl * ein. Sie * bewerten dann den Befehl im Kontext des Spiels * und der Befehl ist entweder * genehmigt * oder * abgelehnt *. Wenn genehmigt, dann bewegt sich das Zeichen in der angegebenen Richtung; wenn es abgelehnt wird, passiert nichts. Ich denke, wenn Sie Ihr Spiel mit diesem Muster strukturieren, werden viele Ihrer Probleme verschwinden. –