Du kannst Box2d verwenden oder wenn du Custom gehst, so würde ich wenn es simple Kollisionen sein sollen, Rectangles verwenden.
Am Besten du versuchst es erst garnicht dazu kommen, dass ein Objekt in einen Kollsionsbereich kommt.
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
float x = object.x;
float y = object.y;
float width = object.getWidth();
float height = object.getHeight();
float cullLeft = otherObject.x;
float cullRight = cullLeft + otherObject.width;
float cullBottom = otherObject.y;
float cullTop = cullBottom + otherObject.height;
//
if((x <= cullRight &&
y <= cullTop &&
(x + width) >= cullLeft &&
(y + height) >= cullBottom))
{
//is in collsion
}
|
So kannst du ganz fix AABB Kollisionen testen von zwei Rectangles.
Am Besten du arbeitest mit einem Geschwindigkeitsvektor, mit dem du deinen Spieler bewegst. So kannst du dann schnell gucken ob er im nächsten Move dich in einer Wand landen lassen wird. Wenn ja, führe die Bewegung nicht aus. Wenn nein, führe Bewegung aus.
Man kann das alles noch optimieren. Dass man die Differenz misst noch dazwischen, um ihn dann direkt an der Wand zu plazieren. Aber das wichtigste ist, dass man es garnicht erst dazu kommen lässt, dass dein Objekt in der Wand landet.
Wenn du schnelle Objekte hast, kannst du den Geschwindigkeitsvektor in Stücke zerteilen und für jedes einzeln vom Spieler aus, prüfen ob eine Kollision statt finden wird. Ansonsten kann es passieren, dass dein Spieler durch eine Wand geht. Bei dünnen Wänden oder schnellen Bewegungen sollte man auf jeden Fall den Geschwindigkeitsvektor zerteilen.