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
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;
}
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
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
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!!!