Also das ist ein Spiel, an dem ich gerade arbeite, und ich habe Kollisionen zu arbeiten und zu bewegen, aber wenn ich auf beiden Seiten kollidiere eine Wand (aus der Liste Wänden) stoppt den Player bewegt, aber wenn ich den Schlüssel immer gedrückt hält, wird der Spieler vollständig durchC# Kollision, wie man den Spieler nicht bewegt, wenn ein Boolescher sagt, er kann sich nicht bewegen
Dies ist der Code bewegt zum bewegen und Kollision:
bool left = false;
bool up = false;
bool right = false;
bool down = false;
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
#region Movement
if (e.KeyCode == Keys.D && !right)
{
right = true;
}
if (e.KeyCode == Keys.A && !left)
{
left = true;
}
if (e.KeyCode == Keys.W)
{
up = true;
}
if (e.KeyCode == Keys.S)
{
down = true;
}
#endregion
}
public void Collision()
{
for (int x = 0; x < walls.Count; x++)
{
if (player.obj.Bounds.IntersectsWith(walls[x].Bounds) && right)
{
right = false;
}
if (player.obj.Bounds.IntersectsWith(walls[x].Bounds) && left)
{
left = false;
}
if (player.obj.Bounds.IntersectsWith(walls[x].Bounds) && up)
{
up = false;
}
if (player.obj.Bounds.IntersectsWith(walls[x].Bounds) && down)
{
down = false;
}
}
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.D)
{
right = false;
}
if (e.KeyCode == Keys.A)
{
left = false;
}
if (e.KeyCode == Keys.W)
{
up = false;
}
if (e.KeyCode == Keys.S)
{
down = false;
}
}
private void timer1_Tick(object sender, EventArgs e)
{
#region True
if (right)
{
Point loc = player.obj.Location;
loc.X = loc.X + 4;
player.obj.Location = loc;
}
if (left)
{
Point loc = player.obj.Location;
loc.X = loc.X - 4;
player.obj.Location = loc;
}
if (up)
{
Point loc = player.obj.Location;
loc.Y = loc.Y - 4;
player.obj.Location = loc;
}
if (down)
{
Point loc = player.obj.Location;
loc.Y = loc.Y + 4;
player.obj.Location = loc;
}
#endregion
#region NotTrue
if (!right)
{
Point loc = player.obj.Location;
loc.X = loc.X + 0;
player.obj.Location = loc;
}
if (!left)
{
Point loc = player.obj.Location;
loc.X = loc.X - 0;
player.obj.Location = loc;
}
if (!up)
{
Point loc = player.obj.Location;
loc.Y = loc.Y - 0;
player.obj.Location = loc;
}
if (!down)
{
Point loc = player.obj.Location;
loc.Y = loc.Y + 0;
player.obj.Location = loc;
}
#endregion
Collision();
}
}
}
Erinnerung: Alles funktioniert, aber mein Spieler wird, nachdem er mit dem Objekt kollidiert ist und für ein paar Sekunden stehen bleibt, sich durch die Wand bewegen.
Ok, ich werde diese Methode am Morgen versuchen, wenn ich aufwache. –