forked from jaildesigner-jailgames/jaildoctors_dilemma
Corregido un bug en las colisiones. El rectangulo era un pixel demasiado bajo o estrecho
This commit is contained in:
@@ -12,11 +12,11 @@
|
|||||||
26,0,0,0,86,0,86,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,
|
26,0,0,0,86,0,86,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,
|
||||||
26,0,0,0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,
|
26,0,0,0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,
|
||||||
26,0,0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,62,62,0,0,0,0,26,
|
26,0,0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,62,62,0,0,0,0,26,
|
||||||
26,0,0,0,0,0,0,0,0,161,212,212,212,212,212,212,212,0,212,212,181,0,0,0,0,62,62,0,0,0,0,26,
|
26,0,0,0,0,0,0,0,0,161,212,212,212,212,212,212,212,0,212,212,0,0,0,0,0,62,62,0,0,0,0,26,
|
||||||
26,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0,0,0,181,0,0,0,0,0,0,0,0,0,26,
|
26,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,
|
||||||
26,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,269,0,0,0,0,181,0,0,0,22,22,0,0,0,26,
|
26,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,269,0,0,0,0,0,0,0,0,22,22,0,0,0,26,
|
||||||
26,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0,269,0,0,0,0,0,181,0,0,0,0,0,0,0,0,
|
26,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0,269,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||||
26,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0,81,289,81,0,0,0,0,0,181,0,0,0,0,0,0,0,
|
26,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0,81,289,81,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||||
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
|
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
|
||||||
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26
|
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -227,11 +227,6 @@ void Game::renderDebugInfo()
|
|||||||
SDL_RenderDrawLine(renderer, i, 0, i, PLAY_AREA_BOTTOM - 1);
|
SDL_RenderDrawLine(renderer, i, 0, i, PLAY_AREA_BOTTOM - 1);
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
// Pinta mascaras de sprite
|
|
||||||
SDL_SetRenderDrawColor(renderer, 0, 255, 0, 192);
|
|
||||||
rect = player->getRect();
|
|
||||||
SDL_RenderFillRect(renderer, &rect);
|
|
||||||
|
|
||||||
// Pinta el texto
|
// Pinta el texto
|
||||||
debug->setPos({1, 18 * 8});
|
debug->setPos({1, 18 * 8});
|
||||||
debug->render();
|
debug->render();
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ Player::Player(player_t ini, std::string tileset, std::string animation, SDL_Ren
|
|||||||
underFeet.insert(underFeet.end(), {p, p});
|
underFeet.insert(underFeet.end(), {p, p});
|
||||||
feet.insert(feet.end(), {p, p});
|
feet.insert(feet.end(), {p, p});
|
||||||
|
|
||||||
line = {0, 0, 0, 0};
|
r = {0, 0, 0, 0};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
@@ -67,11 +67,20 @@ void Player::render()
|
|||||||
sprite->render();
|
sprite->render();
|
||||||
if (debug->getEnabled())
|
if (debug->getEnabled())
|
||||||
{
|
{
|
||||||
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
|
// Pinta los underfeet
|
||||||
|
SDL_SetRenderDrawColor(renderer, 255, 0, 255, 255);
|
||||||
SDL_RenderDrawPoint(renderer, underFeet[0].x, underFeet[0].y);
|
SDL_RenderDrawPoint(renderer, underFeet[0].x, underFeet[0].y);
|
||||||
SDL_RenderDrawPoint(renderer, underFeet[1].x, underFeet[1].y);
|
SDL_RenderDrawPoint(renderer, underFeet[1].x, underFeet[1].y);
|
||||||
|
|
||||||
SDL_RenderDrawLine(renderer, line.x1, line.y1, line.x2, line.y2);
|
// Pinta rectangulo del jugador
|
||||||
|
SDL_SetRenderDrawColor(renderer, 0, 255, 0, 192);
|
||||||
|
SDL_Rect rect = getRect();
|
||||||
|
SDL_RenderFillRect(renderer, &rect);
|
||||||
|
|
||||||
|
// Pinta el rectangulo de movimiento
|
||||||
|
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
|
||||||
|
SDL_RenderFillRect(renderer, &r);
|
||||||
|
debug->add("RECT: " + std::to_string(r.x) +","+ std::to_string(r.y) +","+ std::to_string(r.w) +","+ std::to_string(r.h));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -244,9 +253,11 @@ void Player::move()
|
|||||||
SDL_Rect proj;
|
SDL_Rect proj;
|
||||||
proj.x = (int)(x + vx);
|
proj.x = (int)(x + vx);
|
||||||
proj.y = (int)y;
|
proj.y = (int)y;
|
||||||
proj.h = h - 1;
|
proj.h = h;
|
||||||
proj.w = ceil(abs(vx)); // Para evitar que tenga un ancho de 0 pixels
|
proj.w = ceil(abs(vx)); // Para evitar que tenga un ancho de 0 pixels
|
||||||
|
|
||||||
|
r = proj;
|
||||||
|
|
||||||
// Comprueba la colisión con las superficies
|
// Comprueba la colisión con las superficies
|
||||||
const int pos = room->checkRightSurfaces(&proj);
|
const int pos = room->checkRightSurfaces(&proj);
|
||||||
|
|
||||||
@@ -268,7 +279,7 @@ void Player::move()
|
|||||||
if (ly > -1)
|
if (ly > -1)
|
||||||
{
|
{
|
||||||
y = ly - h;
|
y = ly - h;
|
||||||
setState(s_standing);
|
// setState(s_standing);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,9 +297,11 @@ void Player::move()
|
|||||||
SDL_Rect proj;
|
SDL_Rect proj;
|
||||||
proj.x = (int)x + w;
|
proj.x = (int)x + w;
|
||||||
proj.y = (int)y;
|
proj.y = (int)y;
|
||||||
proj.h = h - 1;
|
proj.h = h;
|
||||||
proj.w = ceil(vx); // Para evitar que tenga un ancho de 0 pixels
|
proj.w = ceil(vx); // Para evitar que tenga un ancho de 0 pixels
|
||||||
|
|
||||||
|
r = proj;
|
||||||
|
|
||||||
// Comprueba la colisión
|
// Comprueba la colisión
|
||||||
const int pos = room->checkLeftSurfaces(&proj);
|
const int pos = room->checkLeftSurfaces(&proj);
|
||||||
|
|
||||||
@@ -310,7 +323,7 @@ void Player::move()
|
|||||||
if (ry > -1)
|
if (ry > -1)
|
||||||
{
|
{
|
||||||
y = ry - h;
|
y = ry - h;
|
||||||
setState(s_standing);
|
// setState(s_standing);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -330,12 +343,14 @@ void Player::move()
|
|||||||
// Se mueve hacia arriba
|
// Se mueve hacia arriba
|
||||||
if (vy < 0.0f)
|
if (vy < 0.0f)
|
||||||
{
|
{
|
||||||
// Crea el rectangulo de proyección en el eje X para ver si colisiona
|
// Crea el rectangulo de proyección en el eje Y para ver si colisiona
|
||||||
SDL_Rect proj;
|
SDL_Rect proj;
|
||||||
proj.x = (int)x;
|
proj.x = (int)x;
|
||||||
proj.y = (int)(y + vy);
|
proj.y = (int)(y + vy);
|
||||||
proj.h = ceil(abs(vy)); // Para evitar que tenga una altura de 0 pixels
|
proj.h = ceil(abs(vy)); // Para evitar que tenga una altura de 0 pixels
|
||||||
proj.w = w - 1;
|
proj.w = w;
|
||||||
|
|
||||||
|
r = proj;
|
||||||
|
|
||||||
// Comprueba la colisión
|
// Comprueba la colisión
|
||||||
const int pos = room->checkBottomSurfaces(&proj);
|
const int pos = room->checkBottomSurfaces(&proj);
|
||||||
@@ -355,12 +370,14 @@ void Player::move()
|
|||||||
// Se mueve hacia abajo
|
// Se mueve hacia abajo
|
||||||
else if (vy > 0.0f)
|
else if (vy > 0.0f)
|
||||||
{
|
{
|
||||||
// Crea el rectangulo de proyección en el eje X para ver si colisiona
|
// Crea el rectangulo de proyección en el eje Y para ver si colisiona
|
||||||
SDL_Rect proj;
|
SDL_Rect proj;
|
||||||
proj.x = (int)x;
|
proj.x = (int)x;
|
||||||
proj.y = (int)y + h;
|
proj.y = (int)y + h;
|
||||||
proj.h = ceil(vy); // Para evitar que tenga una altura de 0 pixels
|
proj.h = ceil(vy); // Para evitar que tenga una altura de 0 pixels
|
||||||
proj.w = w - 1;
|
proj.w = w;
|
||||||
|
|
||||||
|
r = proj;
|
||||||
|
|
||||||
// Comprueba la colisión con los muros
|
// Comprueba la colisión con los muros
|
||||||
const int pos = room->checkTopSurfaces(&proj);
|
const int pos = room->checkTopSurfaces(&proj);
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ public:
|
|||||||
SDL_Rect lastPosition; // Contiene la ultima posición del jugador, por si hay que deshacer algun movimiento
|
SDL_Rect lastPosition; // Contiene la ultima posición del jugador, por si hay que deshacer algun movimiento
|
||||||
int jump_ini; // Valor del eje Y en el que se inicia el salto
|
int jump_ini; // Valor del eje Y en el que se inicia el salto
|
||||||
float maxVY; // Velocidad máxima que puede alcanzar al desplazarse en vertical
|
float maxVY; // Velocidad máxima que puede alcanzar al desplazarse en vertical
|
||||||
line_t line;
|
SDL_Rect r;
|
||||||
|
|
||||||
// Comprueba las entradas y modifica variables
|
// Comprueba las entradas y modifica variables
|
||||||
void checkInput();
|
void checkInput();
|
||||||
|
|||||||
@@ -178,19 +178,27 @@ bool checkCollision(v_line_t &l, SDL_Rect &r)
|
|||||||
{
|
{
|
||||||
// Comprueba si la linea esta por la izquierda del rectangulo
|
// Comprueba si la linea esta por la izquierda del rectangulo
|
||||||
if (l.x < r.x)
|
if (l.x < r.x)
|
||||||
|
{
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Comprueba si la linea esta por la derecha del rectangulo
|
// Comprueba si la linea esta por la derecha del rectangulo
|
||||||
if (l.x >= r.x + r.w)
|
if (l.x >= r.x + r.w)
|
||||||
|
{
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Comprueba si el inicio de la linea esta debajo del rectangulo
|
// Comprueba si el inicio de la linea esta debajo del rectangulo
|
||||||
if (l.y1 >= r.y + r.h)
|
if (l.y1 >= r.y + r.h)
|
||||||
|
{
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Comprueba si el final de la linea esta encima del rectangulo
|
// Comprueba si el final de la linea esta encima del rectangulo
|
||||||
if (l.y2 < r.y)
|
if (l.y2 < r.y)
|
||||||
|
{
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Si ha llegado hasta aquí, hay colisión
|
// Si ha llegado hasta aquí, hay colisión
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
4
todo.txt
4
todo.txt
@@ -12,6 +12,7 @@ x (A) Modificar el salto para que coincida con el del JSW, no ha de colisionar l
|
|||||||
(A) Crear tiles que arrastren, tipo cinta transportadora
|
(A) Crear tiles que arrastren, tipo cinta transportadora
|
||||||
(A) Tiles animados
|
(A) Tiles animados
|
||||||
(A) Crear ascensores
|
(A) Crear ascensores
|
||||||
|
x (A) Crear rampas
|
||||||
x (A) Enemigos de diferente tamaño {cm:2022-08-30}
|
x (A) Enemigos de diferente tamaño {cm:2022-08-30}
|
||||||
(A) Color de los items al estilo jet set willy de amstrad, que brillan con dos colores
|
(A) Color de los items al estilo jet set willy de amstrad, que brillan con dos colores
|
||||||
x (A) Temporizador de inicio de los items, para poder hacer que brillen a distinto ritmo. Esto es incompatible con lo anterior {cm:2022-08-30}
|
x (A) Temporizador de inicio de los items, para poder hacer que brillen a distinto ritmo. Esto es incompatible con lo anterior {cm:2022-08-30}
|
||||||
@@ -23,8 +24,9 @@ x (A) Tecla F para pasar a pantalla completa {cm:2022-08-30}
|
|||||||
x (A) Tecla + y - para cambiar tamaño de ventana. O control F1 a F4 {cm:2022-08-30}
|
x (A) Tecla + y - para cambiar tamaño de ventana. O control F1 a F4 {cm:2022-08-30}
|
||||||
(A) Poner en el marcador el indicador de si esta sonando la música
|
(A) Poner en el marcador el indicador de si esta sonando la música
|
||||||
(A) Poner en el marcador el numero de habitaciones visitadas
|
(A) Poner en el marcador el numero de habitaciones visitadas
|
||||||
|
(A) Los textos del marcador de colores
|
||||||
x (A) Añadir a cada habitación el color del borde
|
x (A) Añadir a cada habitación el color del borde
|
||||||
(A) Añadir a cada habitación el color del nombre de la habitación
|
x (A) Añadir a cada habitación el color del nombre de la habitación
|
||||||
|
|
||||||
x (A) Crear el logo al estilo del logo de ERBE o TOPO, con lineas que lo formen
|
x (A) Crear el logo al estilo del logo de ERBE o TOPO, con lineas que lo formen
|
||||||
x (A) El titulo del juego hacerlo parecido al del Jet Set Willy in Paris
|
x (A) El titulo del juego hacerlo parecido al del Jet Set Willy in Paris
|
||||||
|
|||||||
Reference in New Issue
Block a user