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

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

View File

@@ -43,8 +43,8 @@ Player::Player(SDL_Renderer *renderer, Asset *asset, Input *input, Map *map)
coins = 0;
key.insert(key.end(), {0, 0, 0, 0, 0, 0});
const SDL_Point p = {0, 0};
collider.insert(collider.end(), {p, p, p, p, p, p});
underFeet.insert(underFeet.end(), {p, p});
collider.insert(collider.end(), {p, p, p, p, p, p, p, p, p, p, p, p});
underFeet.insert(underFeet.end(), {p, p, p});
}
// Destructor
@@ -139,15 +139,33 @@ void Player::updateColliders()
{
const SDL_Point p = {(int)x, (int)y};
// Lado izquierdo
collider[0] = p;
collider[1] = {p.x, p.y + 12};
collider[2] = {p.x, p.y + 23};
collider[3] = {p.x + 15, p.y};
collider[4] = {p.x + 15, p.y + 12};
collider[5] = {p.x + 15, p.y + 23};
collider[1] = {p.x, p.y + 7};
collider[2] = {p.x, p.y + 12};
collider[3] = {p.x, p.y + 18};
collider[4] = {p.x, 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[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
@@ -224,7 +242,7 @@ void Player::animate()
}
else
{
if (abs(vx) < 1.00f)
if (abs(vx) < 0.50f)
{
sprite->setCurrentAnimation("stand");
}
@@ -242,7 +260,7 @@ bool Player::isOnFloor()
{
bool onFloor = false;
updateColliders();
updateFeet();
for (auto f : underFeet)
{

View File

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

View File

@@ -139,6 +139,7 @@ bool Prog::setFileList()
// Ficheros binarios
asset->add("/data/map/01.map", 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/gamecontrollerdb.txt", data);
asset->add("/data/animations/player.ani", data);