Muerte y reaparición del jugador
This commit is contained in:
@@ -8,4 +8,17 @@ room_right=0
|
||||
|
||||
[tilemap]
|
||||
room2.tmx
|
||||
[tilemap-end]
|
||||
[tilemap-end]
|
||||
|
||||
[enemy]
|
||||
tileset=enemy01.png
|
||||
x=120
|
||||
y=8
|
||||
vx=0
|
||||
vy=1
|
||||
x1=120
|
||||
x2=120
|
||||
y1=8
|
||||
y2=104
|
||||
color=purple
|
||||
[enemy-end]
|
||||
@@ -4,17 +4,17 @@
|
||||
<layer id="1" name="Capa de patrones 1" width="32" height="16">
|
||||
<data encoding="csv">
|
||||
41,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,41,
|
||||
41,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,41,
|
||||
41,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,41,
|
||||
41,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,41,
|
||||
41,0,0,0,0,41,41,41,41,41,41,41,41,41,41,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41,
|
||||
41,0,0,41,41,41,41,41,0,0,0,0,0,0,0,0,0,81,0,0,0,0,0,0,0,0,0,0,0,0,0,41,
|
||||
41,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,41,
|
||||
41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41,41,0,0,0,0,0,0,0,0,0,0,0,0,41,
|
||||
41,41,41,0,0,0,0,0,0,0,0,0,0,0,41,41,41,41,41,41,41,41,0,0,0,0,0,0,0,0,0,41,
|
||||
41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,81,0,0,0,0,0,0,41,
|
||||
41,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,41,
|
||||
41,0,0,0,0,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,0,0,0,0,0,41,
|
||||
41,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,
|
||||
41,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,
|
||||
41,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,
|
||||
41,0,0,0,0,41,41,41,41,41,41,41,41,41,41,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
41,0,0,41,41,41,41,41,0,0,0,0,0,0,0,0,0,81,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
41,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,
|
||||
41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41,41,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
41,41,41,0,0,0,0,0,0,0,0,0,0,0,41,41,41,41,41,41,41,41,0,0,0,0,0,41,41,41,41,41,
|
||||
41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,81,0,0,0,0,0,0,0,
|
||||
41,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,
|
||||
41,0,0,0,0,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,0,0,0,0,0,0,
|
||||
41,0,0,0,0,0,0,0,0,81,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
41,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,
|
||||
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
|
||||
|
||||
@@ -4,17 +4,17 @@
|
||||
<layer id="1" name="Capa de patrones 1" width="32" height="16">
|
||||
<data encoding="csv">
|
||||
43,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,43,
|
||||
43,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,43,
|
||||
43,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,43,
|
||||
43,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,43,
|
||||
43,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,43,
|
||||
43,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,43,
|
||||
43,0,0,0,0,0,0,0,0,0,0,83,83,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,
|
||||
43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,43,43,43,43,0,0,0,0,0,0,0,0,0,43,
|
||||
43,0,0,0,0,0,0,0,0,83,0,0,0,0,0,0,0,0,0,3,0,0,0,0,83,83,0,0,0,0,0,43,
|
||||
43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,43,
|
||||
43,0,0,0,0,0,0,0,0,83,0,0,0,0,0,0,0,0,0,3,0,0,0,0,83,83,0,0,0,0,0,43,
|
||||
43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,43,
|
||||
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,43,
|
||||
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,43,
|
||||
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,43,
|
||||
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,43,
|
||||
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,43,
|
||||
0,0,0,0,0,0,0,0,0,0,0,83,83,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,43,43,43,43,0,0,0,0,0,0,0,0,0,43,
|
||||
43,43,43,43,43,43,0,0,0,83,0,0,0,0,0,0,0,0,0,3,0,0,0,0,83,83,0,0,0,0,0,43,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,43,
|
||||
0,0,0,0,0,0,0,0,0,83,0,0,0,0,0,0,0,0,0,3,0,0,0,0,83,83,0,0,0,0,0,43,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,43,
|
||||
0,0,0,0,0,0,0,83,83,83,83,83,83,0,0,0,0,0,0,3,0,0,0,0,83,83,0,0,0,0,0,43,
|
||||
0,0,0,0,0,83,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,43,
|
||||
63,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,43,43,43,43,43,43,43,43,43,43,43,63,
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
// Constructor
|
||||
Game::Game(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, Lang *lang, Input *input)
|
||||
{
|
||||
// Inicia variables
|
||||
mCurrentRoom = "01.room";
|
||||
mSpawnPoint = {2 * 8, 12 * 8, 0, 0, 0, STATUS_STANDING, SDL_FLIP_NONE};
|
||||
|
||||
// Copia los punteros
|
||||
mRenderer = renderer;
|
||||
mAsset = asset;
|
||||
@@ -11,8 +15,8 @@ Game::Game(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, Lang *lang,
|
||||
|
||||
// Crea los objetos
|
||||
mScreen = new Screen(window, renderer);
|
||||
mRoom = new Room(mAsset->get("01.room"), mRenderer, mAsset);
|
||||
mPlayer = new Player(mAsset->get("player01.png"), mRenderer, mAsset, mInput, mRoom);
|
||||
mRoom = new Room(mAsset->get(mCurrentRoom), mRenderer, mAsset);
|
||||
mPlayer = new Player(mSpawnPoint, mAsset->get("player01.png"), mRenderer, mAsset, mInput, mRoom);
|
||||
mEventHandler = new SDL_Event();
|
||||
mTextureText = new LTexture();
|
||||
mText = new Text(mAsset->get("smb2.txt"), mTextureText, renderer);
|
||||
@@ -118,6 +122,16 @@ void Game::update()
|
||||
checkPlayerAndWalls(); // Debe ir detras del player update, por si se ha metido en algun muro
|
||||
checkPlayerOnBorder();
|
||||
checkPlayerOnFloor();
|
||||
if (checkPlayerAndEnemies())
|
||||
{
|
||||
// Destruye la habitacion y el jugador
|
||||
delete mRoom;
|
||||
delete mPlayer;
|
||||
|
||||
// Crea la nueva habitación y el nuevo jugador
|
||||
mRoom = new Room(mAsset->get(mCurrentRoom), mRenderer, mAsset);
|
||||
mPlayer = new Player(mSpawnPoint, mAsset->get("player01.png"), mRenderer, mAsset, mInput, mRoom);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -207,9 +221,12 @@ void Game::checkPlayerOnBorder()
|
||||
{
|
||||
if (mPlayer->getOnBorder())
|
||||
{
|
||||
if (changeRoom(mRoom->getRoom(mPlayer->getBorder())))
|
||||
const std::string room_name = mRoom->getRoom(mPlayer->getBorder());
|
||||
if (changeRoom(room_name))
|
||||
{
|
||||
mPlayer->switchBorders();
|
||||
mCurrentRoom = room_name;
|
||||
mSpawnPoint = mPlayer->getSpawnParams();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,7 +37,9 @@ private:
|
||||
Uint32 mTicks; // Contador de ticks para ajustar la velocidad del programa
|
||||
Uint8 mTicksSpeed; // Velocidad a la que se repiten los bucles del programa
|
||||
section_t mSection; // Seccion actual dentro del juego
|
||||
|
||||
std::string mCurrentRoom; // Fichero de la habitación actual
|
||||
player_t mSpawnPoint; // Lugar de la habitación donde aparece el jugador
|
||||
|
||||
// Inicializa las variables
|
||||
void init();
|
||||
|
||||
@@ -51,7 +53,7 @@ private:
|
||||
void draw();
|
||||
|
||||
// Comprueba la entrada y actua
|
||||
//void checkInput();
|
||||
// void checkInput();
|
||||
|
||||
// Cambia de habitación
|
||||
bool changeRoom(std::string file);
|
||||
|
||||
@@ -294,6 +294,12 @@ void MovingSprite::setFlip(SDL_RendererFlip flip)
|
||||
mFlip = flip;
|
||||
}
|
||||
|
||||
// Obtiene el valor de la variable
|
||||
SDL_RendererFlip MovingSprite::getFlip()
|
||||
{
|
||||
return mFlip;
|
||||
}
|
||||
|
||||
// Devuelve el rectangulo donde está el sprite
|
||||
SDL_Rect MovingSprite::getRect()
|
||||
{
|
||||
|
||||
@@ -138,6 +138,9 @@ public:
|
||||
// Establece el valor de la variable
|
||||
void setFlip(SDL_RendererFlip flip);
|
||||
|
||||
// Obtiene el valor de la variable
|
||||
SDL_RendererFlip getFlip();
|
||||
|
||||
// Devuelve el rectangulo donde está el sprite
|
||||
SDL_Rect getRect();
|
||||
};
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
// CAUTION!!!!! si no se gasta al final, quitar la referencia a la habitación
|
||||
|
||||
// Constructor
|
||||
Player::Player(std::string _tileset, SDL_Renderer *_renderer, Asset *_asset, Input *_input, Room *_room)
|
||||
Player::Player(player_t ini, std::string _tileset, SDL_Renderer *_renderer, Asset *_asset, Input *_input, Room *_room)
|
||||
{
|
||||
// Obten punteros a objetos
|
||||
asset = _asset;
|
||||
@@ -24,15 +24,14 @@ Player::Player(std::string _tileset, SDL_Renderer *_renderer, Asset *_asset, Inp
|
||||
onBorder = false;
|
||||
border = BORDER_TOP;
|
||||
|
||||
jump_ini = 0;
|
||||
status = STATUS_STANDING;
|
||||
jump_ini = ini.jump_ini;
|
||||
status = ini.status;
|
||||
|
||||
sprite->setPosX(ini.x);
|
||||
sprite->setPosY(ini.y);
|
||||
sprite->setVelX(ini.vx);
|
||||
sprite->setVelY(ini.vy);
|
||||
|
||||
sprite->setPosX(2 * 8);
|
||||
sprite->setPosX(10 * 8);
|
||||
sprite->setPosY(12 * 8);
|
||||
sprite->setPosY(6 * 8);
|
||||
sprite->setVelX(0);
|
||||
sprite->setVelY(0);
|
||||
sprite->setWidth(8);
|
||||
sprite->setHeight(16);
|
||||
sprite->setCurrentFrame(0);
|
||||
@@ -46,6 +45,8 @@ Player::Player(std::string _tileset, SDL_Renderer *_renderer, Asset *_asset, Inp
|
||||
sprite->setAnimationFrames(0, 3, 8 * 3, 0, 8, 16);
|
||||
sprite->setSpriteClip(sprite->getAnimationClip(0, 0));
|
||||
|
||||
sprite->setFlip(ini.flip);
|
||||
|
||||
lastPosition = getRect();
|
||||
collider = getRect();
|
||||
}
|
||||
@@ -281,4 +282,20 @@ void Player::checkJump()
|
||||
{
|
||||
status = STATUS_FALLING;
|
||||
}
|
||||
}
|
||||
|
||||
// Obtiene algunos parametros del jugador
|
||||
player_t Player::getSpawnParams()
|
||||
{
|
||||
player_t params;
|
||||
|
||||
params.x = sprite->getPosX();
|
||||
params.y = sprite->getPosY();
|
||||
params.vx = sprite->getVelX();
|
||||
params.vy = sprite->getVelY();
|
||||
params.jump_ini = jump_ini;
|
||||
params.status = status;
|
||||
params.flip = sprite->getFlip();
|
||||
|
||||
return params;
|
||||
}
|
||||
@@ -19,6 +19,17 @@
|
||||
#define GRAVITY 0.035f
|
||||
#define MAX_VY 1.2f
|
||||
|
||||
struct player_t
|
||||
{
|
||||
float x;
|
||||
float y;
|
||||
float vx;
|
||||
float vy;
|
||||
int jump_ini;
|
||||
int status;
|
||||
SDL_RendererFlip flip;
|
||||
};
|
||||
|
||||
// Clase Player
|
||||
class Player
|
||||
{
|
||||
@@ -62,7 +73,7 @@ public:
|
||||
int status; // Estado en el que se encuentra el jugador. Util apara saber si está saltando o cayendo
|
||||
|
||||
// Constructor
|
||||
Player(std::string _tileset, SDL_Renderer *_renderer, Asset *_asset, Input *_input, Room *_room);
|
||||
Player(player_t ini, std::string _tileset, SDL_Renderer *_renderer, Asset *_asset, Input *_input, Room *_room);
|
||||
|
||||
// Destructor
|
||||
~Player();
|
||||
@@ -105,6 +116,9 @@ public:
|
||||
|
||||
// Deshace el ultimo movimiento
|
||||
void undoLastMove();
|
||||
|
||||
// Obtiene algunos parametros del jugador
|
||||
player_t getSpawnParams();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user