Intentando crear un juego basado en tiles he concluido lo siguiente:
-Modulo de conjunto de casillas (tileSets). Un tileSet contiene un Bitmap.
. Un bitmap puede contener:
-un tile o varios tiles.
-Modulo de Animaciones que usan los tiles de los Bitmaps.
· Una animacion puede ser:
-de un solo frame.
-de una sequencia de frames.
-de muchas sequencias de frames.
-Mapas que usan las animaciones.
· Modulo de tileSets:
class CTileSet
{
CImage *Img; // Bitmap
int tile_width, tile_height; // altura y anchura de los tiles del bitmap
}
class CImage
{
static CGraphicEngine *ptGE;
TPixel *image;
void Draw(){ GE->Draw(); };
}
· Modulo de Animaciones:
class CAnimation
{
int IdTileSet;
CSequence Sequence[][];
void SetSequence(int idSeq){ Sequence.SetCurrent(idSeq); }
void Next(){ Sequence->Next(); }
void Draw()
{
g_TileSet[idTileSet]->Draw(Sequence->GetCurrentFrame());
}
}
· Mapas de Animaciones
class CTileMap
{
int IdAnimations[][]; // contiene las referencias a las animaciones.
void Render()
{
for h=0;
for w=0;
g_Animation->Draw(IdAnimations[h][w]);
}
}
// variables globales
CTileSet *g_TileSet;
CAnimation *g_Animation;
CMap **g_Maps;
Espero que entendais el código...... Si hay sugerencias exponerlas. OK?
Sugerencia: elimina esas variables globales :enfadado: usa singletons
http://www.codeproject.com/tips/singleton.aspCitar
for h=0;
for w=0;
Mande? Esto compila? 8O Parece que hayas escrito el codigo a ojo de buen cubero.
CTileSet lo veo bien, falta un public: pero bueno dejemoslo pasar.
En CImage no se que es TPixel a parte de que faltan las coordenadas de pantalla donde dibujar la imagen.
Si ya tienes CAnimation ¿para que quieres CSequence? O CAnimation es para tiles animados y CSequences es para sprites animados :?:
En CTileMap falta pasarle las coordenadas de la pantalla y del mapa.
Por lo demas lo veo bien... ostia, si es que ya no queda mas, me lo he cargao todo :loco:
Si quieres una explicacion general de como van los mapas de tiles pidela y te la dare con mucho gusto (plus parallax).
Como dice Samsaga, ,tienes algo raro, o te faltan public: en las clases, o te faltam métodos Get() Set() para los atributos. Además tienes alguna clase con métodos y atributos privados :?:
Las clases son a modo de esquema, ya se que faltan cosas pero no era cuestion de meter todo el código.
class CSequence
{
private:
int **sequence; //almacena numeros de frames
int currentSequence; //selecciona filas
int currentFrame; //selecciona columnas
public:
....
};
Si sabeis de páginas de estos temas, las acepto mientras no sean de gametutorials o gamedev, que ya me las conozco. Y si hay algo de motores gráficos 2D mejor.
A ver si de una vez consigo que esto 'furule'.