Guardar posicion de objetos!

Started by Goku jr, December 25, 2016, 11:21:55 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DCelso

¿cual el fix2?
¿que viste que no hacías bien? XD
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Goku jr

si, el fix 2
pues por ejemplo el recorrer con el for y el pintar los procesos enemigos con:  enemigo[num_enemigos].id = enemigo1(mouse.x,mouse.y);
y cosas asi,vamos casi todo XD


yo habia usado estructuras para guardar puntuaciones basicas y ya esta.


gracias de nuevo :D

DCelso

Bueno, poco a poco se va aprendiendo ;) .

Eso no es exactamente lo que tu dices, hace eso pero es porque tenemos un array de estructuras en el que en cada posicion del array guardamos las variables x, y e id del proceso enemigo (que solo pinta una imagen en pantalla). Bueno y ahora que lo pienso, jarl, "x", e "y" sobran ahora (son redundantes) , ya podemos acceder a ellas desde su identificador de proceso :D .

Bueno y aún hay muchas más cosas que pulir en el código, no hay control de si pones mas de 100 enemigos, pusiste el array a 99
por lo cuando llegues al elemigo 101 y se ponga en la posción 100  de éste, cascará de lo lindo el programa. :)

Si tocas l varias veces perderás los ids de los procesos cargados anteriormente, por lo que el borrado no borrará todo.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Goku jr

Quote from: DCelso on December 29, 2016, 10:44:42 PM
Bueno, poco a poco se va aprendiendo ;) .

Eso no es exactamente lo que tu dices, hace eso pero es porque tenemos un array de estructuras en el que en cada posicion del array guardamos las variables x, y e id del proceso enemigo (que solo pinta una imagen en pantalla). Bueno y ahora que lo pienso, jarl, "x", e "y" sobran ahora (son redundantes) , ya podemos acceder a ellas desde su identificador de proceso :D .

Bueno y aún hay muchas más cosas que pulir en el código, no hay control de si pones mas de 100 enemigos, pusiste el array a 99
por lo cuando llegues al elemigo 101 y se ponga en la posción 100  de éste, cascará de lo lindo el programa. :)

Si tocas l varias veces perderás los ids de los procesos cargados anteriormente, por lo que el borrado no borrará todo.


Cierto,antes puse 108,y se fue todo al carajo XD, lo de 99 fue lo primero que se me ocurrio,siempre se pueden poner mas,o menos o incluso hacer que cuando llegue a 100 ,no deje poner mas.

DCelso

bueno me puse y quité la estructura, Como "x" e "y" son variables comunes a todos los procesos no es necesario hacer una estructura de datos para guardarlas, siempre podemos acceder a ellas desde el proceso, así que convertí el vector de estructuras a vector de identificadores de processos, (vamos a int) y desde ellos acceder a x e y para guardarlos o leerlos,
El código parece que queda mas simple.
Miratelo.

Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Goku jr

Buenas!
Refloto este post,por que ahora que tengo unos dias libres he decidido picar un poco de codigo.
Pues resulta que a parte de los enemigos quiero agregar unos tiles(por procesos) los niveles que en principio quiero crear son estaticos,pues bien,utilizando el mismo metodo que antes con los enemigos,cargo y guardo los tiles, y aparecen en la posicion que corresponde,el problema me aparece si utilizo tiles con graficos distintos,que al cargar el archivo se carga siempre con el grafico 1,creo que estoy guardando mal el fichero o no estoy actualizando la variable correspondiente.

Subo el proyeto completo como adjunto,por si alguien se anima a sacarme las castañas del fuego,para variar.

Ponco unas pequeñas instruciones por que las teclas no son las finales que quiero utilizar
Al ejecutar el juego se abrira una ventana y solo aparecera el cursor del raton
Si pulsais la tecla 5 entrais al modo de colocacion de enemigos
* una vez en este modo pulsando el boton izquiero colocais enemigos
Si pulsais la tecla 6 entrais al modo de colocacion de tile
* en este modo si pulsais la tecla 1 podeis cambiar entre dos tiles (Muy mejorable)
* si pulsais el boton izquierdo en este modo,colocareis el tile que tengais seleccionado
Con la tecla S guardais
Con la tecla L cargais
Saludos y gracias!

Futu-block

vale, no tengo ni la mas minima idea de como lo haces porque no me gusta para nada leer codigo ajeno pero te diré como lo hago yo por si te interesa
en mi juego ¡¡jarl!! resulta que cuadriculo la pantalla y la registro en un array de tantas casillas, como uso esprites de 16x16 son 20x15 casillas y el array[20][15]
para pintar en pantalla lo que hace es leer un archivo externo .csv que lee cada numero de una cuadricula y lo interpreta, si es un enemigo crea un proceso y si es fondo de tiles lo que hace es pintar el tile sobre un grafico del tamaño de la pantalla

Pinchando en mi firma (futublock.blogspot.com) encuentras el juego o en su hilo en el foro: http://forum.bennugd.org/index.php/topic,4674.msg73172.html
Al descargarlo veras que viene todos los procesos y demas archivos, si no lo entiendes o lo que sea me dices por aqui y te voy orientando, si quieres hacer algo como lo mio

Goku jr

#22
Gracias Futu-block
pero tu codigo para mi nivel es muy muy complejo xD
ya se que no te gusta leer codigos ajenos,pero te pondre un solo trozito xD

if(mouse.left)
      while (mouse.left)
        frame;
      end
      if (num_tiles < MAX_TILES)
     
        tile[num_tiles] = tile(num_gfx_tile,mouse.x,mouse.y);
        num_tiles=num_tiles+1;
       
        end
      end
     end
  end


y en el guardado ..

if(key(_s))
      while (key(_s))
        frame;
      end
      log=fopen("log.txt",o_write);
      archivo=fopen("nivel.txt",o_write); // Creamos el fichero donde vamos a guardar los datos del nivel
      fwrite(archivo,num_enemigos);      //  Escribimos datos sobre la cantidad de enemigos
      fwrite(archivo,num_tiles);        //   Escribimos datos sobre cantidad de tiles
      say("Numero:  "+num_enemigos);
      for (i = 0; i< num_enemigos; i++)
        fwrite(archivo,enemigo[i].x);     // Escribimos la posicion x del objeto enemigo
        fwrite(archivo,enemigo[i].y);     // Escribimos la posicion y del objeto enemigo
        say("enemigo[" + i + "]:  "+ enemigo[i].x +"," + enemigo[i].y );
        fputs(log,"[ENEMIGO]");
        fputs(log,enemigo[i].x);
        fputs(log,enemigo[i].y);
        end
           
       
           

         for (i = 0; i< num_tiles; i++)
        fwrite(archivo,tile[i].x);        // Escribimos la posicion x del tile
        fwrite(archivo,tile[i].y);        // Escribimos la posicion y del tile
        fwrite(archivo,num_gfx_tile);
        say("Tile[" + i + "]:  "+ tile[i].x +"," + tile[i].y );
        fputs(log,"[TILES]");
        fputs(log,tile[i].x);
        fputs(log,tile[i].y);
        fputs(log,"Grafico tile : " +num_gfx_tile);
       
      end
        fclose(log);
     fclose(archivo);
    end


y sucede esto :
Creo un mapa digamos como este .


y al cargarlo me sale esto :



Seguro que es una tonteria,por que cargar carga las posiciones bien y demas,pero no se :S
Saludos y gracias

Futu-block

je je je, halagado me hallo, pero si el mio es inteligible para ti, el tuyo funciona de la misma manera conmigo...

Una cosa que todavia no he tocado es el fwrite o el fput pero lo que puedo deducir es que ahí hay una cosa que estas haciendo mal, o bien no guardas los tiles con un grafico u otro, o bien a la hora de cargar no preguntas por el grafico...

aunque tambien veo otra cosa que deberias intentar antes, tienes dos bloques for con la misma variable, i, yo lo suelo cambiar si uso dos for

Goku jr

#24
Buenas
Los fputs los pongo para que me creen un archivo log y por lo que veo, siempre guardo el mismo gráfico,lo que no se es como guardar gráficos diferentes XD


Saludos

Goku jr

Ahora cuando enchufe el pc,probare a retocar los for, aunque juraría que ya lo hice,llevo con este problema varios días,y ya no sé ni qué partes del código he nodificado


Saludos y gracias

Goku jr

Buenas!
Nada ,cambie lo de los for y nada
tiene que ver con lo de los graficos que no guarda la numeracion que toca, esto me sale en el log que me crea
[TILES]
x: 229
y: 190
Grafico tile : 1
[TILES]
x: 373
y: 280
Grafico tile : 1
[TILES]
x: 370
y: 209
Grafico tile : 1
[code]

de las 3 tiles que pongo  en el mapa,las dos ultimas son diferentes a la primera,con lo cual el seria 1,2,2 y aqui siempre me da resultado 1,1,1
ARRRGGG!!

Futu-block

vamos por partes, ¿donde guardas el grafico de cada tile?
mira bien esa variable y mira por que no se guarda

Goku jr

Buenas
tengo una variable que se llama num_gfx_tile[GFX_TILE];
y el proceso tile es así


process tile(graph, x,y)
begin
graph=num_gfx_tile[GFX_TILE];
loop
frame;
end
end[code]
[font=Verdana][size=78%]
[/font][/size]
[font=Verdana][size=78%]Saludos y gracias[/font][/size]

Futu-block

vale, ya creo que se lo que pasa, cuando yo invoco un proceso con determinados valores no le doy sus variables locales sino les doy otras que declaro despues como privadas y a continuación las paso al proceso...
me explico con el codigo:


proces nave(equis,ygriega,grafico)
private
int equis, ygriega, grafico;
begin
    x = equis;
    y = ygriega;
    graph = grafico;
    loop
         frame;
    end
end


asi, cuando llamo a ese proceso hago por ejemplo:
nave(125,356,100)

Las variables locales son las que despues puedes cambiar sobre la marcha de un proceso a otro, por ejemplo haciendo desde la nave enemiga id_prota.x = 100; yo por eso le cambio las variables, porque despues se vuelve loco con las locales