Hallo liebe User,
da ich gerade Semesterferien habe arbeite ich an einem kleinen Spielchen.
In der Mitte des Spielfeldes befindet sich ein Panzer. Mit den Tasten A und D lässt er sich rotieren. Mit W und S fährt er in Richtung des Vektors. Genau genommen verschiebt sich der Hintergrund. Der Panzer ist also immer im Zentrum.
Um Kollisionen zu erkennen habe ich ein Polygon um den Panzer gelegt. Über die Rotationsmatrix dreht sich das Polygon entsprechend um den Mittelpunkt des Panzers. Das klappt alles einwandfrei.
Ich habe nun Hindernisse(Häuser), als Rectangle in die Spielwelt eingefügt. Fährt der Panzer beispielsweise von unten auf ein Haus zu soll das drücken der W-Taste keine Verschiebung mehr in
(-y)-Richtung zulassen. Fährt er Rückwärts mit der S-Taste gegen das Haus soll natürlich auch die
(-y)-Verschiebung blockiert werden. Dieses Problem habe ich über den aktuellen Winkel des Panzers gelöst.
Mein Problem jedoch ist, dass sich der Panzer oft verhängt. Beispielsweise an den Ecken eines Hauses. Hat jemand eine Idee wie ich dieses Problem lösen kann? ;(
Hier mal ein bisschen Quellcode:
Bei "Kol" handelt es sich um das Kollidierte Rectangle Haus.
minX, maxX, minY und maxY sind die Extremwerte des Polygons vom Panzer!
da ich gerade Semesterferien habe arbeite ich an einem kleinen Spielchen.
In der Mitte des Spielfeldes befindet sich ein Panzer. Mit den Tasten A und D lässt er sich rotieren. Mit W und S fährt er in Richtung des Vektors. Genau genommen verschiebt sich der Hintergrund. Der Panzer ist also immer im Zentrum.
Um Kollisionen zu erkennen habe ich ein Polygon um den Panzer gelegt. Über die Rotationsmatrix dreht sich das Polygon entsprechend um den Mittelpunkt des Panzers. Das klappt alles einwandfrei.
Ich habe nun Hindernisse(Häuser), als Rectangle in die Spielwelt eingefügt. Fährt der Panzer beispielsweise von unten auf ein Haus zu soll das drücken der W-Taste keine Verschiebung mehr in
(-y)-Richtung zulassen. Fährt er Rückwärts mit der S-Taste gegen das Haus soll natürlich auch die
(-y)-Verschiebung blockiert werden. Dieses Problem habe ich über den aktuellen Winkel des Panzers gelöst.
Mein Problem jedoch ist, dass sich der Panzer oft verhängt. Beispielsweise an den Ecken eines Hauses. Hat jemand eine Idee wie ich dieses Problem lösen kann? ;(
Hier mal ein bisschen Quellcode:
Java:
if(kol != null){
if(maxY > kol.getMinY() && minY < kol.getMinY() && maxX > kol.getMinX() && minX < kol.getMaxX()){
if(tankRotation >= 181 && tankRotation <= 359){
System.out.println("W");
wBlocked = true;
}else if(tankRotation >= 1 && tankRotation <= 179){
System.out.println("S");
sBlocked = true;
}else{
//Keine Blockade
}
}else if(minY < kol.getMaxY() && maxY > kol.getMaxY() && minX < kol.getMaxX() && maxX > kol.getMinX()){
if(tankRotation >= 1 && tankRotation <= 179){
System.out.println("W");
wBlocked = true;
}else if(tankRotation >= 181 && tankRotation <= 359){
System.out.println("S");
sBlocked = true;
}else{
//Kein Block
}
}else if(minX < kol.getMaxX() && maxX > kol.getMaxX() && maxY > kol.getMinY() && minY < kol.getMaxY()){
if(tankRotation >= 91 && tankRotation <= 269){
System.out.println("W");
wBlocked = true;
}
else if(tankRotation >= 271 && tankRotation <= 359 || tankRotation >= 1 && tankRotation <= 89){
System.out.println("S");
sBlocked = true;
}else{
//Kein Block
}
}else if(maxX > kol.getMinX() && minX < kol.getMinX() && maxY > kol.getMinY() && minY < kol.getMaxY()){
if(tankRotation >= 271 && tankRotation <= 359 || tankRotation >= 1 && tankRotation <= 89){
System.out.println("W");
wBlocked = true;
}
else if(tankRotation >= 91 && tankRotation <= 269){
System.out.println("S");
sBlocked = true;
}else{
//Kein Block
wBlocked = false;
sBlocked = false;
}
}
}
else{
//Kein Block
wBlocked = false;
sBlocked = false;
}
Bei "Kol" handelt es sich um das Kollidierte Rectangle Haus.
minX, maxX, minY und maxY sind die Extremwerte des Polygons vom Panzer!
Zuletzt bearbeitet: