El salto ya hace el arco y luego cae

This commit is contained in:
2022-07-11 10:52:20 +02:00
parent 783689c368
commit 38f95d9724
4 changed files with 23 additions and 18 deletions

View File

@@ -187,9 +187,6 @@ bool Game::changeRoom(std::string file)
// Crea un objeto habitación nuevo a partir del fichero // Crea un objeto habitación nuevo a partir del fichero
mRoom = new Room(mAsset->get(file), mRenderer, mAsset); mRoom = new Room(mAsset->get(file), mRenderer, mAsset);
// Comunica al jugador la nueva referencia para la habitación
mPlayer->setRoom(mRoom);
success = true; success = true;
} }
@@ -216,7 +213,7 @@ void Game::checkPlayerOnFloor()
// *** HAY UN POSIBLE PROBLEMA y es que caiga muy rapido y viaje a mas de un pixel de velocidad, // *** HAY UN POSIBLE PROBLEMA y es que caiga muy rapido y viaje a mas de un pixel de velocidad,
// con lo que se saltaria la comprobación // con lo que se saltaria la comprobación
if ((mPlayer->getVelY() >= 0) && ((int)mPlayer->getLeftFoot().y % 8 == 0)) if ((mPlayer->getVelY() >= 0) && ((int)mPlayer->getLeftFoot().y % 8 == 0))
{ // Comprueba ambos pies { // Comprueba ambos pies
bool test = false; bool test = false;

View File

@@ -11,7 +11,6 @@ Player::Player(std::string _tileset, SDL_Renderer *_renderer, Asset *_asset, Inp
asset = _asset; asset = _asset;
renderer = _renderer; renderer = _renderer;
input = _input; input = _input;
room = _room;
// Crea objetos // Crea objetos
texture = new LTexture(); texture = new LTexture();
@@ -24,6 +23,8 @@ Player::Player(std::string _tileset, SDL_Renderer *_renderer, Asset *_asset, Inp
color = stringToColor("white"); color = stringToColor("white");
onBorder = false; onBorder = false;
border = BORDER_TOP; border = BORDER_TOP;
jump_ini = 0;
status = STATUS_STANDING; status = STATUS_STANDING;
sprite->setPosX(2 * 8); sprite->setPosX(2 * 8);
@@ -76,6 +77,7 @@ void Player::update()
move(); // Recalcula la posición del jugador y su animación move(); // Recalcula la posición del jugador y su animación
checkBorders(); // Comprueba si está situado en alguno de los cuatro bordes de la habitación checkBorders(); // Comprueba si está situado en alguno de los cuatro bordes de la habitación
applyGravity(); // Aplica gravedad al jugador applyGravity(); // Aplica gravedad al jugador
checkJump(); // Comprueba si ha finalizado el salto
} }
// Comprueba las entradas y modifica variables // Comprueba las entradas y modifica variables
@@ -167,12 +169,6 @@ void Player::switchBorders()
onBorder = false; onBorder = false;
} }
// Establece el valor de la variable
void Player::setRoom(Room *_room)
{
room = _room;
}
// Obtiene el valor del pixel inferior izquierdo del jugador // Obtiene el valor del pixel inferior izquierdo del jugador
SDL_Point Player::getLeftFoot() SDL_Point Player::getLeftFoot()
{ {
@@ -195,6 +191,7 @@ void Player::setStatus(int value)
{ {
status = STATUS_JUMPING; status = STATUS_JUMPING;
sprite->setVelY(-MAX_VY); sprite->setVelY(-MAX_VY);
jump_ini = sprite->getPosY();
} }
// Modifica el estado a 'cayendo' // Modifica el estado a 'cayendo'
@@ -234,7 +231,6 @@ void Player::applyGravity()
if (sprite->getVelY() > MAX_VY) if (sprite->getVelY() > MAX_VY)
{ {
sprite->setVelY(MAX_VY); sprite->setVelY(MAX_VY);
// status = STATUS_FALLING;
} }
} }
} }
@@ -268,3 +264,14 @@ void Player::move()
sprite->animate(0); sprite->animate(0);
} }
} }
// Comprueba si ha finalizado el salto
void Player::checkJump()
{
if (status == STATUS_JUMPING)
if (sprite->getVelY() > 0)
if (sprite->getPosY() > jump_ini)
{
status = STATUS_FALLING;
}
}

View File

@@ -26,7 +26,6 @@ private:
LTexture *texture; // Textura con los graficos del enemigo LTexture *texture; // Textura con los graficos del enemigo
AnimatedSprite *sprite; // Sprite del enemigo AnimatedSprite *sprite; // Sprite del enemigo
Input *input; // Objeto para gestionar la entrada Input *input; // Objeto para gestionar la entrada
Room *room; // Objeto con el mapa del juego
SDL_Renderer *renderer; // El renderizador de la ventana SDL_Renderer *renderer; // El renderizador de la ventana
Asset *asset; // Objeto con la ruta a todos los ficheros de recursos Asset *asset; // Objeto con la ruta a todos los ficheros de recursos
@@ -54,7 +53,11 @@ private:
// Recalcula la posición del jugador y su animación // Recalcula la posición del jugador y su animación
void move(); void move();
// Comprueba si ha finalizado el salto
void checkJump();
public: public:
int jump_ini; // Valor del eje Y en el que se inicia el salto
int status; // Estado en el que se encuentra el jugador. Util apara saber si está saltando o cayendo int status; // Estado en el que se encuentra el jugador. Util apara saber si está saltando o cayendo
// Constructor // Constructor
@@ -78,9 +81,6 @@ public:
// Cambia al jugador de un borde al opuesto. Util para el cambio de pantalla // Cambia al jugador de un borde al opuesto. Util para el cambio de pantalla
void switchBorders(); void switchBorders();
// Establece el valor de la variable
void setRoom(Room *_room);
// Obtiene el valor del pixel inferior izquierdo del jugador // Obtiene el valor del pixel inferior izquierdo del jugador
SDL_Point getLeftFoot(); SDL_Point getLeftFoot();

View File

@@ -1,3 +1,4 @@
[ ] Hacer que deje de poder moverse tras el salto al alcanzar la misma posicion en altura que tenia cuando saltó [x] Hacer que deje de poder moverse tras el salto al alcanzar la misma posicion en altura que tenia cuando saltó
[ ] Leer los mapas directamente del archivo tmx [ ] Arreglar que no atraviese tiles atravaseables al caer muy rapido
[x] Leer los mapas directamente del archivo tmx
[ ] Crear la clase item [ ] Crear la clase item