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"/>
<layer id="1" name="Capa de patrones 1" width="32" height="16">
<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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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>
</layer>
</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 "animatedsprite.h"
// Constructor
AnimatedSprite::AnimatedSprite(LTexture *texture, SDL_Renderer *renderer)
{
mRenderer = renderer;
mTexture = texture;
}
// Destructor
AnimatedSprite::~AnimatedSprite()
{

View File

@@ -27,7 +27,11 @@ private:
public:
// 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
~AnimatedSprite();

View File

@@ -77,13 +77,11 @@ void Enemy::checkPath()
{
if (sprite->getPosX() > x2 || sprite->getPosX() < x1)
{
// sprite->setPosX(sprite->getPosX() - sprite->getVelX());
sprite->setVelX(sprite->getVelX() * (-1));
}
if (sprite->getPosY() > y2 || sprite->getPosY() < y1)
{
// sprite->setPosY(sprite->getPosY() - sprite->getVelY());
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 "movingsprite.h"
// Constructor
MovingSprite::MovingSprite()
{
clear();
}
// Destructor
MovingSprite::~MovingSprite()
{
clear();
}
// Reinicia todas las variables
@@ -38,50 +31,6 @@ void MovingSprite::clear()
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
void MovingSprite::move()
{

View File

@@ -31,14 +31,47 @@ protected:
public:
// 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
~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
void move();

View File

@@ -397,13 +397,13 @@ int Room::getTile(SDL_Point point)
if (pos < 512)
{
// 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;
}
// Los tiles mayores de 80 son atravesables
if (tilemap[pos] > 80)
if (tilemap[pos] > 200)
{
return TILE_TRAVESSABLE;
}

View File

@@ -1,44 +1,7 @@
#include "sprite.h"
// Constructor
Sprite::Sprite()
{
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)
Sprite::Sprite(SDL_Rect rect, LTexture *texture, SDL_Renderer *renderer)
{
// Establece el alto y el ancho del sprite
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
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

View File

@@ -22,15 +22,12 @@ protected:
public:
// 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
~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
void render();

View File

@@ -6,7 +6,8 @@
// Constructor
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->setRenderer(renderer);
mFile = file;

View File

@@ -2,6 +2,40 @@
[x] Arreglar que no atraviese tiles atravaseables al caer muy rapido
[x] Leer los mapas directamente del archivo tmx
[ ] Crear la clase item
[ ] 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
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
[x] Colisiones con los enemigos
[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
[ ] 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