PDA

Ver la versión completa : ¿Como cargar un array de objetos?



Eskema
12/02/2005, 12:18
Muy buenas, estoy intentando cargar un array de objetos distintos, pero no se muy bien como hacerlo. Intento poner los objetos ordenados cubriendo 20 objetos de ancho y 10 objetos de alto, se como cargar 1 solo objeto, pero no se como hacer q vaya eligiendo cada uno de los restantes hasta llenar el array.

Tengo un codigo tal que asi:

int i,j,x,t,y,indice;

indice=0;



for(i=0;i<10; i++){
for(j=0;j<20;j++){

x=j*31;
y=i*16;
bloquess[1].setx(x);
bloquess[1].sety(y);
bloquess[1].draw(pantalla);
}
}

Evidentemente poniendo el numero me dibuja el array del objeto en cuetion, pero no se como cargar el resto. Bloquess es un array de sprites donde los tengo cargados. ¿Alguna ayudita pa un pakete que empieza?
Gracias a todos, Eskema

mortimor
12/02/2005, 13:07
Un poco confusa tu explicación. ¿Te refieres a objetos como instancias de una clase de c++ o sencillamente como cosas que dibujas y que por lo tanto son de una clase unica?

En el primer caso lo suyo es diseñar bien la relacion entre ellos y hacer que las diferentes clases de objetos hereden de una clase base, la cual contemplara metodos virtuales que se comportaran de forma diferente en las diversas clases hijas. En esta situacion solo tienes que mantener un array de punteros a la clase base y recorrerlo con normalidad, con un indice "matriz[iterador]" o con dos "matriz[iter1][iter2]" en funcion de la estructura del array.

En el segundo caso estaremos ante un caso trivial de recorrer un array o una matriz :) Por ejemplo:

Suponiendo que tienes una matriz de 10x20 objetos decalrada de la siguiente forma #> objeto matriz[10][20]; tambien se podria hacer #> objeto *matriz= new objeto[10][20];


for(i=0;i<10; i++)
{
for(j=0;j<20;j++)
{
x=j*31;
y=i*16;
matriz[i][j].setx(x);
matriz[i][j].sety(y);
matriz[i][j].draw(pantalla);
}
}

mortimor
12/02/2005, 13:10
La verdad, no entiendo muy bien que es lo que pregutnas :), asi que supongo que no te habre solucionado nada.

Eskema
12/02/2005, 14:30
Perdon por la explicacion un tanto simplona, veras quiero poner los 7 graficos distintos que tengo en una clase unica, repartidos por la pantalla en 20 de ancho y 10 de alto. Para no ponerlos uno por uno y repetir codigo lo mejor seria un array.

Uno por uno seria algo asi.
bloquecolorazul.setx(x+10); //coordenadas x
bloquecolorazul.sety(y+10); //coordenadas y
bloquecolorazul.draw(pantalla);
y asi sucesivamente con el resto de sprites que tengo, vamos algo realmente estupido(pienso).

Por eso he pensado lo del array
for(i=0;i<10; i++){
for(j=0;j<20;j++){

x=j*31; //ancho del sprite
y=i*16; //alto del sprite
bloquess[1].setx(x);
bloquess[1].sety(y);
bloquess[1].draw(pantalla);

De esta forma me crea el mosaico en pantalla ordenado como quiero, y separando los bloques 31 pixels que es su tamaño de ancho y 16 de alto. Pero como le paso el numero del sprite, pues dibuja el que le indico. ¿Como haria que fuera dibujando uno a uno cada uno de los 7 sprites que tengo ordenados en esa matriz de 10x20?
Espero haberme explicado un poco mejor, gracias mortimor por tu interes.

kmkzk
12/02/2005, 14:46
Hola,
creo entender que lo que quieres es que en cada paso del bucle el indice de sprite sea de uno al siete, y que se vaya incrementando,no?
Puedes usar el operador MOD (%,creo que se llama asi?).

algo asi como:
bloquess[(i+j)%7].setx(x);

no se si respondo a lo que querias. suerte :)
Un saludo

Eskema
12/02/2005, 16:49
Exactamente kmkzk lo has clavado eso era exactamente lo que queria, gracias por la ayuda, Eskema