Martin Lantzsch
Software Entwickler
26. Februar 2012

Prüfen ob in einer C# Forms Anwendung zwei Panele kollidieren

26. Februar 2012 - Geschrieben von Martin - 4 Kommentare

Um zu prüfen ob zwei Panele in einer C# Windows Forms Anwendung miteinander kollidieren, habe ich mir eben eine kleine Panel Collider Klasse geschrieben, die anhand der Position sowie Höhe und Breite prüft ob sich zwei Panele berühren.

class panelCollider
{
    public static bool check(Panel one, Panel two)
    {
        if (one.Left == two.Left)
        {
            if (one.Top == two.Top)
            {
                return true;
            }
            else if (one.Top < two.Top)
            {
                if (one.Top + one.Height >= two.Top)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                if (two.Top + two.Height >= one.Top)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }
        else if (one.Left > two.Left)
        {
            if (two.Left + two.Width >= one.Left)
            {
                if (one.Top == two.Top)
                {
                    return true;
                }
                else if (one.Top < two.Top)
                {
                    if (one.Top + one.Height >= two.Top)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    if (two.Top + two.Height >= one.Top)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
            else
            {
                return false;
            }
        }
        else if (one.Left < two.Left)
        {
            if (one.Left + one.Width >= two.Left)
            {
                if (one.Top == two.Top)
                {
                    return true;
                }
                else if (one.Top < two.Top)
                {
                    if (one.Top + one.Height >= two.Top)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    if (two.Top + two.Height >= one.Top)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }
}

Soweit ich es in meiner Anwendung testen konnte, funktioniert sie. Sollte doch noch jemandem ein Fehler auffallen, würde ich mich über einen Kommentar freuen.

18. Dezember 2011

Das nenne ich Fahrphysik

18. Dezember 2011 - Geschrieben von Martin - Keine Kommentare

var speed = 0.25;
var turnSpeed = 2;
 
function Update () {
	// drive ahead and back
	transform.Translate(0, 0, Input.GetAxis("Vertical") * speed);
	// turn around
	if(Input.GetAxis("Vertical") > 0) {
		transform.Rotate(0, Input.GetAxis("Horizontal") * turnSpeed, 0);
	} else if(Input.GetAxis("Vertical") < 0) {
		transform.Rotate(0, Input.GetAxis("Horizontal") * turnSpeed * -1, 0);
	}
}


Meine Basis Fahrphysik für Unity3D, das Auto bewegt sich schon mal, nun fehlt nur noch Beschleunigung, etc :D

Aber echt Klasse Unity, ich hab nun in 10 Minuten eine Welt geschaffen in der man mit einem Auto herumfahren kann, in der Zeit hätte ich mit herkömmlichen Methoden noch nicht mal die Grafikkarte initialisiert. Respekt.