Convertido el juego a mapas con tiles de 8x8

This commit is contained in:
2022-08-18 21:18:15 +02:00
parent c848a8b234
commit 6a5f0b3b46
6 changed files with 77 additions and 21 deletions

View File

@@ -7,5 +7,5 @@ room_left=0
room_right=0 room_right=0
[tilemap] [tilemap]
01.tmx 01_8.tmx
[tilemap-end] [tilemap-end]

34
data/map/01_8.tmx Normal file
View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.9" tiledversion="1.9.1" orientation="orthogonal" renderorder="right-down" width="40" height="26" tilewidth="8" tileheight="8" infinite="0" nextlayerid="2" nextobjectid="1">
<tileset firstgid="1" source="../../../volcano_2022_resources/tilesets/tiles_surface.tsx"/>
<layer id="1" name="Capa de patrones 1" width="40" height="26">
<data encoding="csv">
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,263,264,0,0,0,0,0,0,0,0,257,258,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,295,296,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,263,264,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,295,296,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,263,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,263,0,0,0,0,
0,0,0,0,239,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,257,258,257,258,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,93,94,0,0,0,0,0,0,263,0,0,0,0,0,0,
0,0,0,289,290,289,290,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,125,126,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,157,158,0,0,0,0,263,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,189,190,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,193,194,0,0,0,0,0,0,0,0,0,0,0,0,0,281,282,277,278,279,280,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,225,226,0,0,0,0,0,0,0,0,281,275,275,275,275,313,314,309,310,311,312,0,0,0,0,0,0,0,0,0,0,0,0,
263,264,263,264,263,264,263,264,263,264,263,264,263,264,263,264,263,264,263,266,266,266,283,284,266,265,266,264,263,264,263,264,263,264,263,264,263,264,263,264,
295,296,295,296,295,296,295,296,295,296,295,296,295,296,295,296,295,296,295,296,295,296,315,316,298,297,298,296,295,296,295,296,295,296,295,296,295,296,295,296
</data>
</layer>
</map>

View File

@@ -23,9 +23,9 @@ Map::Map(std::string file, SDL_Renderer *renderer, Asset *asset)
fillMapTexture(); fillMapTexture();
// Inicializa variables // Inicializa variables
tile_width = 16; tile_width = 16/2;
map_width = 20; map_width = 20*2;
map_height = 13; map_height = 13*2;
} }
// Destructor // Destructor
@@ -194,10 +194,10 @@ void Map::fillMapTexture()
texture_bg->render(renderer, 0, 0, &clip); texture_bg->render(renderer, 0, 0, &clip);
// Dibuja el mapeado de tiles // Dibuja el mapeado de tiles
const int tile_size = 16; const int tile_size = 16/2;
const int tileset_width_in_tiles = 16; const int tileset_width_in_tiles = 16*2;
const int map_width_in_tiles = 20; const int map_width_in_tiles = 20*2;
const int map_height_in_tiles = 13; const int map_height_in_tiles = 13*2;
clip = {0, 0, tile_size, tile_size}; clip = {0, 0, tile_size, tile_size};
@@ -240,13 +240,13 @@ void Map::render()
t_tile_map Map::getTile(SDL_Point p) t_tile_map Map::getTile(SDL_Point p)
{ {
const int tile = tilemap[((p.y / tile_width) * map_width) + (p.x / tile_width)]; const int tile = tilemap[((p.y / tile_width) * map_width) + (p.x / tile_width)];
const int png_width = 16; const int png_width = 16*2;
if (tile >= 0 && tile < 4 * png_width) if (tile >= 0 && tile < 4*2 * png_width)
{ {
return nothing; return nothing;
} }
else if (tile >= (4 * png_width) && tile < 8 * png_width) else if (tile >= (4*2 * png_width) && tile < 8*2 * png_width)
{ {
return wall; return wall;
} }

View File

@@ -43,8 +43,8 @@ Player::Player(SDL_Renderer *renderer, Asset *asset, Input *input, Map *map)
coins = 0; coins = 0;
key.insert(key.end(), {0, 0, 0, 0, 0, 0}); key.insert(key.end(), {0, 0, 0, 0, 0, 0});
const SDL_Point p = {0, 0}; const SDL_Point p = {0, 0};
collider.insert(collider.end(), {p, p, p, p, p, p}); collider.insert(collider.end(), {p, p, p, p, p, p, p, p, p, p, p, p});
underFeet.insert(underFeet.end(), {p, p}); underFeet.insert(underFeet.end(), {p, p, p});
} }
// Destructor // Destructor
@@ -139,15 +139,33 @@ void Player::updateColliders()
{ {
const SDL_Point p = {(int)x, (int)y}; const SDL_Point p = {(int)x, (int)y};
// Lado izquierdo
collider[0] = p; collider[0] = p;
collider[1] = {p.x, p.y + 12}; collider[1] = {p.x, p.y + 7};
collider[2] = {p.x, p.y + 23}; collider[2] = {p.x, p.y + 12};
collider[3] = {p.x + 15, p.y}; collider[3] = {p.x, p.y + 18};
collider[4] = {p.x + 15, p.y + 12}; collider[4] = {p.x, p.y + 23};
collider[5] = {p.x + 15, p.y + 23};
// Lado derecho
collider[5] = {p.x + 15, p.y};
collider[6] = {p.x + 15, p.y + 7};
collider[7] = {p.x + 15, p.y + 12};
collider[8] = {p.x + 15, p.y + 18};
collider[9] = {p.x + 15, p.y + 23};
// Centro
collider[10] = {p.x + 7, p.y};
collider[11] = {p.x + 7, p.y + 23};
}
// Actualiza los puntos de los pies
void Player::updateFeet()
{
const SDL_Point p = {(int)x, (int)y};
underFeet[0] = {p.x, p.y + 24}; underFeet[0] = {p.x, p.y + 24};
underFeet[1] = {p.x + 15, p.y + 24}; underFeet[1] = {p.x + 7, p.y + 24};
underFeet[2] = {p.x + 15, p.y + 24};
} }
// Compruena las colisiones con el mapa // Compruena las colisiones con el mapa
@@ -224,7 +242,7 @@ void Player::animate()
} }
else else
{ {
if (abs(vx) < 1.00f) if (abs(vx) < 0.50f)
{ {
sprite->setCurrentAnimation("stand"); sprite->setCurrentAnimation("stand");
} }
@@ -242,7 +260,7 @@ bool Player::isOnFloor()
{ {
bool onFloor = false; bool onFloor = false;
updateColliders(); updateFeet();
for (auto f : underFeet) for (auto f : underFeet)
{ {

View File

@@ -57,6 +57,9 @@ public:
// Actualiza los puntos de colisión // Actualiza los puntos de colisión
void updateColliders(); void updateColliders();
// Actualiza los puntos de los pies
void updateFeet();
// Compruena las colisiones con el mapa // Compruena las colisiones con el mapa
bool checkMapCollisions(); bool checkMapCollisions();

View File

@@ -139,6 +139,7 @@ bool Prog::setFileList()
// Ficheros binarios // Ficheros binarios
asset->add("/data/map/01.map", data); asset->add("/data/map/01.map", data);
asset->add("/data/map/01.tmx", data); asset->add("/data/map/01.tmx", data);
asset->add("/data/map/01_8.tmx", data);
asset->add("/data/config.bin", data, false); asset->add("/data/config.bin", data, false);
asset->add("/data/gamecontrollerdb.txt", data); asset->add("/data/gamecontrollerdb.txt", data);
asset->add("/data/animations/player.ani", data); asset->add("/data/animations/player.ani", data);