Colisiones básicas terminadas
This commit is contained in:
@@ -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,0,0,0,0,0,0,0,
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,65,0,0,0,0,
|
||||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,0,0,0,0,74,74,74,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,68,68,68,74,74,78,74,68,74,68,68
|
74,74,74,75,75,74,74,68,68,65,68,68,74,74,78,74,68,74,68,68
|
||||||
</data>
|
</data>
|
||||||
</layer>
|
</layer>
|
||||||
</map>
|
</map>
|
||||||
|
|||||||
@@ -186,11 +186,11 @@ void Map::fillMapTexture()
|
|||||||
{
|
{
|
||||||
SDL_SetRenderTarget(renderer, map_texture);
|
SDL_SetRenderTarget(renderer, map_texture);
|
||||||
SDL_SetTextureBlendMode(map_texture, SDL_BLENDMODE_BLEND);
|
SDL_SetTextureBlendMode(map_texture, SDL_BLENDMODE_BLEND);
|
||||||
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0x00);
|
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF);
|
||||||
SDL_RenderClear(renderer);
|
SDL_RenderClear(renderer);
|
||||||
|
|
||||||
// Dibuja la textura de fondo
|
// 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);
|
texture_bg->render(renderer, 0, 0, &clip);
|
||||||
|
|
||||||
// Dibuja el mapeado de tiles
|
// Dibuja el mapeado de tiles
|
||||||
@@ -209,6 +209,22 @@ void Map::fillMapTexture()
|
|||||||
texture_tile->render(renderer, x * tile_size, y * tile_size, &clip);
|
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);
|
SDL_SetRenderTarget(renderer, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ Player::Player(SDL_Renderer *renderer, Asset *asset, Input *input, Map *map)
|
|||||||
|
|
||||||
sprite = new AnimatedSprite(texture, renderer, asset->get("player.ani"));
|
sprite = new AnimatedSprite(texture, renderer, asset->get("player.ani"));
|
||||||
|
|
||||||
x = 16;
|
x = 3 * 16;
|
||||||
y = 40;
|
y = 40;
|
||||||
vx = 0;
|
vx = 0;
|
||||||
vy = 0;
|
vy = 0;
|
||||||
@@ -120,6 +120,8 @@ bool Player::checkMapCollisions()
|
|||||||
{
|
{
|
||||||
bool collision = false;
|
bool collision = false;
|
||||||
|
|
||||||
|
updateColliders();
|
||||||
|
|
||||||
for (auto c : collider)
|
for (auto c : collider)
|
||||||
{
|
{
|
||||||
collision |= (map->getTile(c) == wall);
|
collision |= (map->getTile(c) == wall);
|
||||||
@@ -133,18 +135,32 @@ void Player::move()
|
|||||||
{
|
{
|
||||||
const float old_x = x;
|
const float old_x = x;
|
||||||
x += vx;
|
x += vx;
|
||||||
updateColliders();
|
|
||||||
if (checkMapCollisions())
|
if (checkMapCollisions())
|
||||||
{
|
{
|
||||||
x = old_x;
|
x = old_x;
|
||||||
}
|
}
|
||||||
|
|
||||||
const float old_y = y;
|
// const float old_y = y;
|
||||||
y += vy;
|
y += vy;
|
||||||
updateColliders();
|
|
||||||
if (checkMapCollisions())
|
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);
|
sprite->setPosX(x);
|
||||||
|
|||||||
Reference in New Issue
Block a user