Colisiones básicas terminadas

This commit is contained in:
2022-08-17 17:06:49 +02:00
parent 02c2c1bce2
commit d7c59cd48a
3 changed files with 44 additions and 12 deletions

View File

@@ -11,11 +11,11 @@
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,74,74,74,0,0,0,0,
74,74,74,75,75,74,74,68,68,68,68,68,74,74,78,74,68,74,68,68
0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,65,0,0,0,0,
65,65,0,0,65,65,0,0,0,0,0,0,0,0,0,68,0,0,0,0,
0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,
0,49,0,0,0,0,0,47,0,0,0,0,0,77,74,76,0,0,0,0,
74,74,74,75,75,74,74,68,68,65,68,68,74,74,78,74,68,74,68,68
</data>
</layer>
</map>

View File

@@ -186,11 +186,11 @@ void Map::fillMapTexture()
{
SDL_SetRenderTarget(renderer, map_texture);
SDL_SetTextureBlendMode(map_texture, SDL_BLENDMODE_BLEND);
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0x00);
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF);
SDL_RenderClear(renderer);
// Dibuja la textura de fondo
SDL_Rect clip = {0, 0, 320, 240 - 32};
SDL_Rect clip = {0, 0, 320, 208};
texture_bg->render(renderer, 0, 0, &clip);
// Dibuja el mapeado de tiles
@@ -209,6 +209,22 @@ void Map::fillMapTexture()
texture_tile->render(renderer, x * tile_size, y * tile_size, &clip);
}
// Dibuja el degradado del marcador
int color = 105;
for (int i = 208; i < 240; i++)
{
SDL_SetRenderDrawColor(renderer, 0x69, color, 0x69, 0xFF);
SDL_RenderDrawLine(renderer, 0, i, 320, i);
color--;
}
// Dibuja el marco del marcador
SDL_SetRenderDrawColor(renderer, 85, 50, 85, 0xFF);
SDL_Rect rect = {0, 208, 320, 32};
SDL_RenderDrawRect(renderer, &rect);
rect = {1, 209, 318, 30};
SDL_RenderDrawRect(renderer, &rect);
SDL_SetRenderTarget(renderer, nullptr);
}

View File

@@ -17,7 +17,7 @@ Player::Player(SDL_Renderer *renderer, Asset *asset, Input *input, Map *map)
sprite = new AnimatedSprite(texture, renderer, asset->get("player.ani"));
x = 16;
x = 3 * 16;
y = 40;
vx = 0;
vy = 0;
@@ -120,6 +120,8 @@ bool Player::checkMapCollisions()
{
bool collision = false;
updateColliders();
for (auto c : collider)
{
collision |= (map->getTile(c) == wall);
@@ -133,18 +135,32 @@ void Player::move()
{
const float old_x = x;
x += vx;
updateColliders();
if (checkMapCollisions())
{
x = old_x;
}
const float old_y = y;
// const float old_y = y;
y += vy;
updateColliders();
if (checkMapCollisions())
{
y = old_y;
// y = old_y;
if (vy > 0)
{
do
{
y--;
} while (checkMapCollisions());
}
else
{
do
{
y++;
} while (checkMapCollisions());
}
vy = 0;
}
sprite->setPosX(x);