Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Dimensiones Del Mapa Dinamicas

Iniciado por Abc7, 25 de Octubre de 2004, 04:17:06 AM

« anterior - próximo »

Abc7

 weno yo tengo el siguiente codigo

// Dynamic Map Size ******
tile **MAP; // Pointer to a 'tile' pointer
cout << sizeof(tile) << endl;
MAP = new (tile*[50]);
//MAP = (tile**)malloc(sizeof(tile*) * 50);
for(x = 0; x < 50; x++)
{
 MAP[x] = new (tile[50]);
 //MAP[x] = (tile*)malloc(sizeof(tile) * 50);

}
// ****** Dynamic Map Size

cout << "Cargando Tiles..." << endl;

for (x=0;x<50;x++) {
 for (y=0;y<50;y++) {
  cout << x << " " << y << endl;
  MAP[x][y].loadgfx("grass.bmp");
  MAP[x][y].setpos(x*32,y*32,x*32-1,y*32-1);
 }
}

cout << "OK" << endl;

pero no funciona.. osea la clase TILE tiene a su vez un puntero a una clase TEXTURE, que la cargo dinamicamente tambien (osea con el operador new) y pero casi seguro q el error esta en ese codigo.. lo puse d las 2 maneras en q hago, con malloc y new, pero lo comente al malloc.. osea con el new me llega hasta x=23 y=1 y con malloc me llega hasta x=23 y=0 :S medio raro.. buen cosas de c++ =P

alguno sabe d esto? o sino como hicieron un mapa asi con dimensiones variables en c++?? graciasss saludosssss

Haddd

 Si tu defines Tile **mapa, el compilador no tiene forma de resolver: mapa[X][y]. Lo que tienes que hace es:


TILE *mapa;

mapa=new tile[ancho*alto];

Y crear un función:

TILE *Posicion(int x,int y)
{
return mapa+x+y*ancho;
}

Pogacha

 Lo mejor seria la clase Mapa


class Mapa {
 Tile *Datos;
 unsigned int int x,y;
public:
 Tile *TomarTile(unsigned int i, unsigned int j) { return &(Datos[( i%n) * x + (j%y)]); }
 Mapa(unsigned int i, unsigned int j) { x=i; y=j; Datos=new Tile[x*y]; }
};


Y despues asegurarte de que no cargas el grafico en cada tile sino que solo dejas un puntero al grafico
Y carga el mapa desde un archivo  :lol:

struct Tile
{
 bool atravesable, pierde_energia, choca, activa_evento1;

 TBitMap *Grafico;
 SetGrafico(TBitMap *g) { Grafico = g; }
};

Mapa *mapa=NULL;

TBitMap *Graficos;

void CargarMapa(void)
{
static unsigned char s[256];
 FILE *f;
 int i,j,x,y;
 int n_Graficos;

  f=fopen("Mapa.txt", "rt");

  s=fgets(s,f); // nunca me acuerdo si esta al reves fgets(f,s);
  sscanf(  s, "%d", &n_Graficos);

  Graficos=new TBitMap[n_Graficos];

  for(i=0; i<n_Graficos; i++)
 {
    s=fgets(s,f);
    Graficos[i].Cargar(s);
 }

  s=fgets(s,f); // nunca me acuerdo si esta al reves fgets(f,s);
  sscanf(  s, "%d %d", &x, &y);

 mapa=new Mapa(x,y);

  for (i=0;i<j; i++)
  {
      s=fgets(s,f); // nunca me acuerdo si esta al reves fgets(f,s);
      for (j=0;j<x;j++)   mapa->TomarTile(i,j)->SetGrafico( &Graficos[unsigned int(s[j])] );
  }
}


Ojo: Escrito al vuelo. ;)
Saludos

Abc7

 ahhhhh la verdad es q no entendi nada lo d pogacha.. buen pero me voi a fijar luego como hacerlo bien.. gracias por la rapida respuesta!!  :D  

Abc7

 el problema era como dijo pogacha q estaba cargando unas 2500 texturas (en realidad llegaba hasta 1150) eso ocasionaba el error... aora funciona bien... gracias!!!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.