Ich mache gerade ein Spiel. Es ist ein 2D-Kachel-basiertes Spiel. Ich habe versucht, es so zu machen, dass sich die Geschwindigkeit und Größe der Spieler ändert, wenn man auf Wasser tritt.Wie kann ich den Ort einer Kachel von einer Zelle in libGDX mithilfe von Floats erhalten?
Ich betreibe diese jeden 60stel Sekunde:
if(map.getTileTypeByCoordinate(0, player.sprite.getX()/4.0f, player.sprite.getY()/4.0f) == TileType.WATER){
player.sprite.setScale(2, 1.75f);
player.speed = 3;
} else {
player.sprite.setScale(2, 2);
player.speed = 5;
}
Die map.getTileTypeByCoordinate(int layer, float x, float y);
Methode ist folgende:
public TileType getTileTypeByCoordinate(int layer, float col, float row) {
Cell cell = ((TiledMapTileLayer) tiledMap.getLayers().get(layer)).getCell((int)(col), (int)(row));
if(cell != null){
TiledMapTile tile = cell.getTile();
if(tile != null){
int id = tile.getId();
return TileType.getTileTypeById(id);
}
}
return TileType.GRASS;
}
Wenn ich auf ganze Zahlen nicht col gegossen und die Reihe, dann bekomme ich ein Fehler, offensichtlich.
Der Grund dafür ist, dass ich Box2D verwende, um Kollisionen zu überprüfen. Ich teile alles durch meine Skala (10.0f
), so dass die Physik-Simulationen genauer sind und ich den Spieler schneller bewegen kann.
Ich frage mich, ob es eine Möglichkeit gibt, eine Kachel von einer Float-Position anstelle einer int-Position zu bekommen. Muss ich Box2D für die Kollisionserkennung nicht mehr verwenden? Mir geht es gut, aber ich bin nicht gut darin, meine eigene Kollisionserkennung zu programmieren. Wenn das der Fall ist, wie würde ich dann meine eigene machen?
schien nicht zu arbeiten, ich habe vergessen, dies zu beachten in meinem Code ist: 'tiledMapRenderer = new OrthogonalTiledMapRenderer (tiledMap, 4f/Main.scale);' – xBegin
änderte ich die if-Anweisung dazu: 'wenn (map.getTileTypeByCoordinate (0, (player.sprite.getX() * (Hauptskala) * 1.0f), player.sprite.getY() * (Main.scale) * 1.0f) == TileType.WATER) { ' – xBegin
Auch das funktioniert perfekt für die Herstellung der Boxen: ' if (! GetTileTypeByCoordinate (Schicht, (int) (x * (16/Main.scale)), (int) (y * (16/Main.scale))). isCollidable()) { // Körper für die Kachel erstellen } ' – xBegin