1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| TiledMapTileLayer colissionLayer = (TiledMapTileLayer) gameMap.getLayers().get("colission");
Vector3 colissionTile = null; if (colissionLayer != null || colissionOn) { if (pseudoPlayer == null) this.pseudoPlayer = new Player(player.getPostition(), player.getImage()); pseudoPlayer.setFacing(player.getFacing()); pseudoPlayer.setX(player.getX()); pseudoPlayer.setY(player.getY()); pseudoPlayer.update(elpasedTime); colissionTile = Collision.getTileColission(pseudoPlayer, colissionLayer, "blocked"); } if (colissionTile == null) { player.update(elpasedTime); } else { switch (player.getFacing()) { case RIGHT: player.setX(colissionTile.x - player.getWidth() - 1); break; case LEFT: player.setX(colissionTile.x + getTileSize() + 1); break; case UP: player.setY(colissionTile.y - player.getHeight() - 1); break; case DOWN: player.setY(colissionTile.y + getTileSize() + 1); break; } }
public static Vector3 getTileColission(IEntiy entity, TiledMapTileLayer layer, String term) { float y = entity.getY(), x = entity.getX(); float TILE_SIZE = layer.getTileWidth();
int tileX = (int) (x / TILE_SIZE); int tileY = (int) (y / TILE_SIZE);
Vector3 tileA = new Vector3(x, y, 0); Vector3 ereg = new Vector3(0, 0, 0); int width = (int) entity.getWidth(); int height = (int) entity.getHeight();
tileA.x = tileX * TILE_SIZE; tileA.y = tileY * TILE_SIZE; if (intersects(entity, tileA, 32, 32) && !tileisFree(tileX, tileY, layer, term)) {
return ereg.set(World.tilesToPixels(tileX, (int) TILE_SIZE), World.tilesToPixels(tileY, (int) TILE_SIZE), 0); }
x += width; tileX = (int) (x / TILE_SIZE); if (intersects(entity, tileA, 32, 32) && !tileisFree(tileX, tileY, layer, term)) { return ereg.set(World.tilesToPixels(tileX, (int) TILE_SIZE), World.tilesToPixels(tileY, (int) TILE_SIZE), 0); }
x -= width; y += height; tileY = (int) (y / TILE_SIZE); tileX = (int) (x / TILE_SIZE); if (intersects(entity, tileA, 32, 32) && !tileisFree(tileX, tileY, layer, term)) { return ereg.set(World.tilesToPixels(tileX, (int) TILE_SIZE), World.tilesToPixels(tileY, (int) TILE_SIZE), 0); }
x += width; tileX = (int) (x / TILE_SIZE); if (intersects(entity, tileA, 32, 32) && !tileisFree(tileX, tileY, layer, term)) { return ereg.set(World.tilesToPixels(tileX, (int) TILE_SIZE), World.tilesToPixels(tileY, (int) TILE_SIZE), 0); }
return null; } |