Rehaciendo las clases Sprite y sus hijas

This commit is contained in:
2022-07-12 14:47:25 +02:00
parent 6d7f8035bb
commit 834d3a09a4
14 changed files with 243 additions and 130 deletions

View File

@@ -3,22 +3,22 @@
<tileset firstgid="1" source="../../resources/tilesets/room1.tsx"/> <tileset firstgid="1" source="../../resources/tilesets/room1.tsx"/>
<layer id="1" name="Capa de patrones 1" width="32" height="16"> <layer id="1" name="Capa de patrones 1" width="32" height="16">
<data encoding="csv"> <data encoding="csv">
121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,121, 108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
121,0,0,0,0,161,162,163,121,121,121,121,121,121,121,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 108,0,0,0,0,108,108,108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
121,0,0,121,121,181,182,183,0,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 108,0,0,108,108,108,0,0,0,0,0,0,0,0,0,0,0,211,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,161,163,0,0,0,0,0,0,0,0,0,0,0,0,0, 108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,
121,161,163,0,0,0,0,0,0,0,0,0,0,0,0,0,0,181,183,121,121,121,0,0,0,0,0,121,121,121,121,121, 108,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,108,108,0,0,0,0,0,108,108,108,108,108,
121,181,183,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0,0, 108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,211,0,0,0,0,0,0,0,
121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
121,0,0,0,0,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,0,0,0,0,0,0, 108,0,0,0,0,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,0,0,0,0,0,0,0,
121,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 108,0,0,0,0,0,0,0,0,211,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
161,162,163,161,162,163,161,162,163,161,162,163,161,162,163,161,162,163,161,162,163,161,162,163,161,162,163,161,162,163,161,163, 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,
181,182,183,181,182,183,181,182,183,181,182,183,181,182,183,181,182,183,181,182,183,181,182,183,181,182,183,181,182,183,181,183 27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27
</data> </data>
</layer> </layer>
</map> </map>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -1,13 +1,6 @@
#include "const.h" #include "const.h"
#include "animatedsprite.h" #include "animatedsprite.h"
// Constructor
AnimatedSprite::AnimatedSprite(LTexture *texture, SDL_Renderer *renderer)
{
mRenderer = renderer;
mTexture = texture;
}
// Destructor // Destructor
AnimatedSprite::~AnimatedSprite() AnimatedSprite::~AnimatedSprite()
{ {

View File

@@ -27,7 +27,11 @@ private:
public: public:
// Constructor // Constructor
AnimatedSprite(LTexture *texture, SDL_Renderer *renderer); AnimatedSprite(LTexture *texture, SDL_Renderer *renderer)
: MovingSprite(0, 0, 0, 0, 0, 0, 0, 0, texture, renderer)
{
};
// Destructor // Destructor
~AnimatedSprite(); ~AnimatedSprite();

View File

@@ -77,13 +77,11 @@ void Enemy::checkPath()
{ {
if (sprite->getPosX() > x2 || sprite->getPosX() < x1) if (sprite->getPosX() > x2 || sprite->getPosX() < x1)
{ {
// sprite->setPosX(sprite->getPosX() - sprite->getVelX());
sprite->setVelX(sprite->getVelX() * (-1)); sprite->setVelX(sprite->getVelX() * (-1));
} }
if (sprite->getPosY() > y2 || sprite->getPosY() < y1) if (sprite->getPosY() > y2 || sprite->getPosY() < y1)
{ {
// sprite->setPosY(sprite->getPosY() - sprite->getVelY());
sprite->setVelY(sprite->getVelY() * (-1)); sprite->setVelY(sprite->getVelY() * (-1));
} }
} }

63
source/item.cpp Normal file
View File

@@ -0,0 +1,63 @@
#include "item.h"
#include <fstream>
#include <sstream>
// Constructor
Item::Item(SDL_Rect _rect, std::string _tileset, SDL_Renderer *_renderer, Asset *_asset)
{
// Obten punteros a objetos
asset = _asset;
renderer = _renderer;
// Crea objetos
texture = new LTexture();
sprite = new Sprite(_rect, texture, renderer);
// Carga la textura
loadTextureFromFile(texture, asset->get(_tileset), renderer);
// Inicia variables
sprite->setSpriteClip(0,0,8,8);
// Inicializa los colores
color_t c = stringToColor("blue");
color.push_back(c);
c = stringToColor("red");
color.push_back(c);
c = stringToColor("purple");
color.push_back(c);
c = stringToColor("green");
color.push_back(c);
c = stringToColor("cyan");
color.push_back(c);
c = stringToColor("yellow");
color.push_back(c);
}
// Destructor
Item::~Item()
{
texture->unload();
delete texture;
texture = nullptr;
delete sprite;
sprite = nullptr;
}
// Pinta el enemigo en pantalla
void Item::draw()
{
}
// Actualiza las variables del objeto
void Item::update()
{
}

45
source/item.h Normal file
View File

@@ -0,0 +1,45 @@
#pragma once
#include "ifdefs.h"
#include "utils.h"
#include "asset.h"
#include "sprite.h"
#include <string>
#ifndef ITEM_H
#define ITEM_H
/*
Un item deberia tener la siguiente informacion:
POSICION INICIAL
PNG ASOCIADO
*/
// Clase Item
class Item
{
private:
LTexture *texture; // Textura con los graficos del objeto
Sprite *sprite; // Sprite del objeto
SDL_Renderer *renderer; // El renderizador de la ventana
Asset *asset; // Objeto con la ruta a todos los ficheros de recursos
std::vector<color_t> color; // Vector con los colores del objeto
// Comprueba si ha llegado al limite del recorrido para darse media vuelta
void checkPath();
public:
// Constructor
Item(SDL_Rect _rect, std::string _tileset, SDL_Renderer *_renderer, Asset *_asset);
// Destructor
~Item();
// Pinta el objeto en pantalla
void draw();
// Actualiza las variables del objeto
void update();
};
#endif

View File

@@ -1,16 +1,9 @@
#include "const.h" #include "const.h"
#include "movingsprite.h" #include "movingsprite.h"
// Constructor
MovingSprite::MovingSprite()
{
clear();
}
// Destructor // Destructor
MovingSprite::~MovingSprite() MovingSprite::~MovingSprite()
{ {
clear();
} }
// Reinicia todas las variables // Reinicia todas las variables
@@ -38,50 +31,6 @@ void MovingSprite::clear()
mFlip = SDL_FLIP_NONE; // Establece como se ha de voltear el sprite mFlip = SDL_FLIP_NONE; // Establece como se ha de voltear el sprite
} }
// Iniciador
void MovingSprite::init(float x, float y, int w, int h, float velx, float vely, float accelx, float accely, LTexture *texture, SDL_Renderer *renderer)
{
// Establece el alto y el ancho del sprite
setWidth(w);
setHeight(h);
// Establece la posición X,Y del sprite
setPosX(x);
setPosY(y);
// Establece la velocidad X,Y del sprite
setVelX(velx);
setVelY(vely);
// Establece la aceleración X,Y del sprite
setAccelX(accelx);
setAccelY(accely);
// Establece el zoom W,H del sprite
setZoomW(1);
setZoomH(1);
// Establece el angulo con el que se dibujará
setAngle(0.0);
// Establece los valores de rotacion
setRotate(false);
setRotateSpeed(0);
setRotateAmount(0.0);
// Contador interno
mCounter = 0;
// Establece la textura donde están los gráficos para el sprite
setTexture(texture);
// Establece el renderizador
setRenderer(renderer);
// Establece el rectangulo de donde coger la imagen
setSpriteClip(0, 0, w, h);
}
// Mueve el sprite // Mueve el sprite
void MovingSprite::move() void MovingSprite::move()
{ {

View File

@@ -31,14 +31,47 @@ protected:
public: public:
// Constructor // Constructor
MovingSprite(); MovingSprite(float x, float y, int w, int h, float velx, float vely, float accelx, float accely, LTexture *texture, SDL_Renderer *renderer)
: Sprite((int)x, (int)y, w, h, texture, renderer)
{
// Establece el alto y el ancho del sprite
setWidth(w);
setHeight(h);
// Establece la posición X,Y del sprite
setPosX(x);
setPosY(y);
// Establece la velocidad X,Y del sprite
setVelX(velx);
setVelY(vely);
// Establece la aceleración X,Y del sprite
setAccelX(accelx);
setAccelY(accely);
// Establece el zoom W,H del sprite
setZoomW(1);
setZoomH(1);
// Establece el angulo con el que se dibujará
setAngle(0.0);
// Establece los valores de rotacion
setRotate(false);
setRotateSpeed(0);
setRotateAmount(0.0);
// Contador interno
mCounter = 0;
// Establece el rectangulo de donde coger la imagen
setSpriteClip(0, 0, w, h);
};
// Destructor // Destructor
~MovingSprite(); ~MovingSprite();
// Iniciador
void init(float x, float y, int w, int h, float velx, float vely, float accelx, float accely, LTexture *texture, SDL_Renderer *renderer);
// Mueve el sprite // Mueve el sprite
void move(); void move();

View File

@@ -397,13 +397,13 @@ int Room::getTile(SDL_Point point)
if (pos < 512) if (pos < 512)
{ {
// Los tiles entre el 1 y el 80 son solidos // Los tiles entre el 1 y el 80 son solidos
if ((tilemap[pos] > 0) && (tilemap[pos] < 81)) if ((tilemap[pos] > 0) && (tilemap[pos] < 201))
{ {
return TILE_SOLID; return TILE_SOLID;
} }
// Los tiles mayores de 80 son atravesables // Los tiles mayores de 80 son atravesables
if (tilemap[pos] > 80) if (tilemap[pos] > 200)
{ {
return TILE_TRAVESSABLE; return TILE_TRAVESSABLE;
} }

View File

@@ -1,44 +1,7 @@
#include "sprite.h" #include "sprite.h"
// Constructor // Constructor
Sprite::Sprite() Sprite::Sprite(SDL_Rect rect, LTexture *texture, SDL_Renderer *renderer)
{
init(0, 0, 0, 0, nullptr, nullptr);
}
// Destructor
Sprite::~Sprite()
{
mTexture = nullptr;
mRenderer = nullptr;
}
// Inicializador
void Sprite::init(int x, int y, int w, int h, LTexture *texture, SDL_Renderer *renderer)
{
// Establece la posición X,Y del sprite
setPosX(x);
setPosY(y);
// Establece el alto y el ancho del sprite
setWidth(w);
setHeight(h);
// Establece el puntero al renderizador de la ventana
setRenderer(renderer);
// Establece la textura donde están los gráficos para el sprite
setTexture(texture);
// Establece el rectangulo de donde coger la imagen
setSpriteClip(0, 0, w, h);
// Habilita el objeto
setEnabled(true);
}
// Inicializador
void Sprite::init(SDL_Rect rect, LTexture *texture, SDL_Renderer *renderer)
{ {
// Establece el alto y el ancho del sprite // Establece el alto y el ancho del sprite
mWidth = rect.w; mWidth = rect.w;
@@ -56,6 +19,39 @@ void Sprite::init(SDL_Rect rect, LTexture *texture, SDL_Renderer *renderer)
// Establece el rectangulo de donde coger la imagen // Establece el rectangulo de donde coger la imagen
setSpriteClip(rect); setSpriteClip(rect);
// Inicializa variables
mEnabled = true;
}
Sprite::Sprite(int x, int y, int w, int h, LTexture *texture, SDL_Renderer *renderer)
{
// Establece el alto y el ancho del sprite
mWidth = w;
mHeight = h;
// Establece la posición X,Y del sprite
mPosX = x;
mPosY = y;
// Establece el puntero al renderizador de la ventana
setRenderer(renderer);
// Establece la textura donde están los gráficos para el sprite
setTexture(texture);
// Establece el rectangulo de donde coger la imagen
setSpriteClip(x,y,w,h);
// Inicializa variables
mEnabled = true;
}
// Destructor
Sprite::~Sprite()
{
mTexture = nullptr;
mRenderer = nullptr;
} }
// Muestra el sprite por pantalla // Muestra el sprite por pantalla

View File

@@ -22,15 +22,12 @@ protected:
public: public:
// Constructor // Constructor
Sprite(); Sprite(SDL_Rect rect, LTexture *texture, SDL_Renderer *renderer);
Sprite(int x, int y, int w, int h, LTexture *texture, SDL_Renderer *renderer);
// Destructor // Destructor
~Sprite(); ~Sprite();
// Inicializador
void init(int x, int y, int w, int h, LTexture *texture, SDL_Renderer *renderer);
void init(SDL_Rect rect, LTexture *texture, SDL_Renderer *renderer);
// Muestra el sprite por pantalla // Muestra el sprite por pantalla
void render(); void render();

View File

@@ -6,7 +6,8 @@
// Constructor // Constructor
Text::Text(std::string file, LTexture *texture, SDL_Renderer *renderer) Text::Text(std::string file, LTexture *texture, SDL_Renderer *renderer)
{ {
mSprite = new Sprite(); SDL_Rect rect = {0,0,0,0};
mSprite = new Sprite(rect, texture, renderer);
mSprite->setTexture(texture); mSprite->setTexture(texture);
mSprite->setRenderer(renderer); mSprite->setRenderer(renderer);
mFile = file; mFile = file;

View File

@@ -2,6 +2,40 @@
[x] Arreglar que no atraviese tiles atravaseables al caer muy rapido [x] Arreglar que no atraviese tiles atravaseables al caer muy rapido
[x] Leer los mapas directamente del archivo tmx [x] Leer los mapas directamente del archivo tmx
[ ] Crear la clase item [ ] Crear la clase item
[ ] Colisiones con los enemigos [x] Colisiones con los enemigos
[ ] Decidir un diseño para qué sucede en caso de morir: Recordar el punto por donde se entró al mapa y la velocidad en el eje X/Y que llevaba el personaje, crear puntos de reaparicion en las habitaciones, etc [x] Decidir un diseño para qué sucede en caso de morir: Recordar el punto por donde se entró al mapa y la velocidad en el eje X/Y que llevaba el personaje, crear puntos de reaparicion en las habitaciones, etc
En el Jet Set Willy el juego recuerda la posicion y el momento. En las Tres Luces de Glaurung solo la posición. Se va a optar por seguir el diseño del Jet Set Willy En el Jet Set Willy el juego recuerda la posicion y el momento. En las Tres Luces de Glaurung solo la posición. Se va a optar por seguir el diseño del Jet Set Willy
[ ] Crear tiles que maten
[ ] Crear tiles que deslicen, (no tipo hielo sino cinta)
[ ] Crear ascensores
TEMAS:
arounders
paku simbel
jail battle
arounders race
aee gba
matatunos
sigmasua
calculin doom
leaper reaper
mini ascii
mappy
paco
chirping
abad y batman
jail
counter strike
starcraft
diablo
jailparty
maniac mansion
molotov
tutorials
gavina
puzzle restorer
qvoid
brick roll
dante's fall
repairing computers