From 38f95d97246e569d62bc23f74763a3a386102ffe Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Mon, 11 Jul 2022 10:52:20 +0200 Subject: [PATCH] El salto ya hace el arco y luego cae --- source/game.cpp | 5 +---- source/player.cpp | 23 +++++++++++++++-------- source/player.h | 8 ++++---- todo.txt | 5 +++-- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/source/game.cpp b/source/game.cpp index 3d76978..6f6e2ec 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -187,9 +187,6 @@ bool Game::changeRoom(std::string file) // Crea un objeto habitación nuevo a partir del fichero mRoom = new Room(mAsset->get(file), mRenderer, mAsset); - // Comunica al jugador la nueva referencia para la habitación - mPlayer->setRoom(mRoom); - 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, // con lo que se saltaria la comprobación - + if ((mPlayer->getVelY() >= 0) && ((int)mPlayer->getLeftFoot().y % 8 == 0)) { // Comprueba ambos pies bool test = false; diff --git a/source/player.cpp b/source/player.cpp index 3211b8a..3637faa 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -11,7 +11,6 @@ Player::Player(std::string _tileset, SDL_Renderer *_renderer, Asset *_asset, Inp asset = _asset; renderer = _renderer; input = _input; - room = _room; // Crea objetos texture = new LTexture(); @@ -24,6 +23,8 @@ Player::Player(std::string _tileset, SDL_Renderer *_renderer, Asset *_asset, Inp color = stringToColor("white"); onBorder = false; border = BORDER_TOP; + + jump_ini = 0; status = STATUS_STANDING; sprite->setPosX(2 * 8); @@ -76,6 +77,7 @@ void Player::update() 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 applyGravity(); // Aplica gravedad al jugador + checkJump(); // Comprueba si ha finalizado el salto } // Comprueba las entradas y modifica variables @@ -167,12 +169,6 @@ void Player::switchBorders() onBorder = false; } -// Establece el valor de la variable -void Player::setRoom(Room *_room) -{ - room = _room; -} - // Obtiene el valor del pixel inferior izquierdo del jugador SDL_Point Player::getLeftFoot() { @@ -195,6 +191,7 @@ void Player::setStatus(int value) { status = STATUS_JUMPING; sprite->setVelY(-MAX_VY); + jump_ini = sprite->getPosY(); } // Modifica el estado a 'cayendo' @@ -234,7 +231,6 @@ void Player::applyGravity() if (sprite->getVelY() > MAX_VY) { sprite->setVelY(MAX_VY); - // status = STATUS_FALLING; } } } @@ -268,3 +264,14 @@ void Player::move() 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; + } +} \ No newline at end of file diff --git a/source/player.h b/source/player.h index 0714d74..1061a6e 100644 --- a/source/player.h +++ b/source/player.h @@ -26,7 +26,6 @@ private: LTexture *texture; // Textura con los graficos del enemigo AnimatedSprite *sprite; // Sprite del enemigo Input *input; // Objeto para gestionar la entrada - Room *room; // Objeto con el mapa del juego SDL_Renderer *renderer; // El renderizador de la ventana 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 void move(); + // Comprueba si ha finalizado el salto + void checkJump(); + 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 // Constructor @@ -78,9 +81,6 @@ public: // Cambia al jugador de un borde al opuesto. Util para el cambio de pantalla void switchBorders(); - // Establece el valor de la variable - void setRoom(Room *_room); - // Obtiene el valor del pixel inferior izquierdo del jugador SDL_Point getLeftFoot(); diff --git a/todo.txt b/todo.txt index 5f1194e..eb33f37 100644 --- a/todo.txt +++ b/todo.txt @@ -1,3 +1,4 @@ -[ ] 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 +[x] Hacer que deje de poder moverse tras el salto al alcanzar la misma posicion en altura que tenia cuando saltó +[ ] Arreglar que no atraviese tiles atravaseables al caer muy rapido +[x] Leer los mapas directamente del archivo tmx [ ] Crear la clase item \ No newline at end of file