WieauchImmer23
Cadet 1st Year
- Registriert
- Aug. 2013
- Beiträge
- 15
Hallo, ich habe jetzt bereits mehrere Tutorials zu diesem Thema durchgelesen und vom Prinzip her ist auch nichts kompliziertes dabei, nur bin ich irgendwie nicht in der Lage es richtig anzuwenden.
Vielleicht hat es auch was damit zu tun, dass ich LibGdx verwende.
Jedenfalls versuche ich zu erkennen wenn ich mit bestimmten Tiles zusammenstoße.
Ja, mein Vorgang ist halt zu schauen welche Properties ein Tile hat auf dem sich mein player befindet und wenn is ein blocked Tile ist soll er zu dem Tile "aligned" also genau dort platziert werden wo das Tile aufhört.
Bei mir hängt aber schon die Erkennung von Kollissionen.
Ich habe mal diese Herangehensweise:
und diese:
Ich habe bei beiden das Problem, dass es sofort erkannt wird, wenn ich eine Kolission von oben nach unten "COLLIDE_DOWN" habe und von rechts nach links wird es eigentlich auch sofort erkannt, außer wenn mein player zu weit unten ist, was ich aber damit erklären kann, dass der ursprung des Bildes links unten ist und so nicht kollidiert.
Das eigentliche Problem ist die erkennung von unten nach oben und von links nach rechts, das wird gar nicht erkannt und ich verstehe einfach nicht weshalb.
Ich hab zwar schon mehrere kleine Spiele gemacht mit Kolissionen, jedoch ist das jetzt mein erstes mit libGDX, bei den anderen hatte ich die Kontrolle über die Tiles und hier ist es für mich noch etwas unübersichtlich.
Vielleicht sieht ja irgendjemand was in meinem Code.
Vielleicht hat es auch was damit zu tun, dass ich LibGdx verwende.
Jedenfalls versuche ich zu erkennen wenn ich mit bestimmten Tiles zusammenstoße.
Ja, mein Vorgang ist halt zu schauen welche Properties ein Tile hat auf dem sich mein player befindet und wenn is ein blocked Tile ist soll er zu dem Tile "aligned" also genau dort platziert werden wo das Tile aufhört.
Bei mir hängt aber schon die Erkennung von Kollissionen.
Ich habe mal diese Herangehensweise:
Code:
//@param e the position of the Player
public static CollisionType collidesOnMap(Vector3 e, float width, float height, TiledMapTileLayer levelLayer, String term, AEntity.Facing facing) {
switch (facing) {
case RIGHT:
if (hasCollision(e.x + width, e.y, levelLayer, term))
return CollisionType.COLLIDE_RIGHT;
case LEFT:
if (hasCollision(e.x, e.y, levelLayer, term))
return CollisionType.COLLIDE_LEFT;
case UP:
if (hasCollision(e.x, e.y + height, levelLayer, term)) {
return CollisionType.COLLIDE_TOP;
}
case DOWN:
if (hasCollision(e.x, e.y, levelLayer, term))
return CollisionType.COLLIDE_DOWN;
default:
break;
}
return CollisionType.COLLIDE_NONE;
}
public static boolean hasCollision(float x, float y, TiledMapTileLayer levelLayer, String term) {
float TILE_SIZE = levelLayer.getTileWidth();
int tileX = (int) (x / TILE_SIZE);
int tileY = (int) (y / TILE_SIZE);
if (levelLayer.getCell(tileX, tileY) == null) return false;
if (levelLayer.getCell(tileX, tileY).getTile().getProperties().containsKey(term)) {
return true;
}
return false;
}
und diese:
Code:
public static boolean hasCollision(Vector3 e, float width, float height, TiledMapTileLayer levelLayer, String term, AEntity.Facing facing){
float TILE_SIZE = levelLayer.getTileWidth();
int tileX = (int) (e.x / TILE_SIZE);
int tileY = (int) (e.y / TILE_SIZE);
if (levelLayer.getCell(tileX, tileY) == null) return false;
if (!levelLayer.getCell(tileX, tileY).getTile().getProperties().containsKey(term)) {
return false;
}
Rectangle entity = new Rectangle(e.x,e.y,width,height) ;
Rectangle block= new Rectangle(tileX*TILE_SIZE,tileY*TILE_SIZE,TILE_SIZE,TILE_SIZE) ;
if(entity.overlaps(block))return true;
return false;
}
Ich habe bei beiden das Problem, dass es sofort erkannt wird, wenn ich eine Kolission von oben nach unten "COLLIDE_DOWN" habe und von rechts nach links wird es eigentlich auch sofort erkannt, außer wenn mein player zu weit unten ist, was ich aber damit erklären kann, dass der ursprung des Bildes links unten ist und so nicht kollidiert.
Das eigentliche Problem ist die erkennung von unten nach oben und von links nach rechts, das wird gar nicht erkannt und ich verstehe einfach nicht weshalb.
Ich hab zwar schon mehrere kleine Spiele gemacht mit Kolissionen, jedoch ist das jetzt mein erstes mit libGDX, bei den anderen hatte ich die Kontrolle über die Tiles und hier ist es für mich noch etwas unübersichtlich.
Vielleicht sieht ja irgendjemand was in meinem Code.