Autor Tema: Guardar posicion de objetos!  (Leído 3149 veces)

DCelso

  • Hero Member
  • *****
  • Mensajes: 3708
  • Karma: 180
Re:Guardar posicion de objetos!
« Respuesta #15 en: Diciembre 29, 2016, 10:18:05 pm »
¿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

  • Sr. Member
  • ****
  • Mensajes: 329
  • Karma: 6
Re:Guardar posicion de objetos!
« Respuesta #16 en: Diciembre 29, 2016, 10:33:25 pm »
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

  • Hero Member
  • *****
  • Mensajes: 3708
  • Karma: 180
Re:Guardar posicion de objetos!
« Respuesta #17 en: Diciembre 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.
Monstruos Diabólicos

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

Goku jr

  • Sr. Member
  • ****
  • Mensajes: 329
  • Karma: 6
Re:Guardar posicion de objetos!
« Respuesta #18 en: Diciembre 29, 2016, 10:55:49 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

  • Hero Member
  • *****
  • Mensajes: 3708
  • Karma: 180
Re:Guardar posicion de objetos!
« Respuesta #19 en: Diciembre 29, 2016, 11:00:13 pm »
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

  • Sr. Member
  • ****
  • Mensajes: 329
  • Karma: 6
Re:Guardar posicion de objetos!
« Respuesta #20 en: Febrero 15, 2018, 06:57:58 pm »
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

  • Hero Member
  • *****
  • Mensajes: 2759
  • Karma: 34
  • Superviviente marciano
    • futublock
Re:Guardar posicion de objetos!
« Respuesta #21 en: Febrero 16, 2018, 07:30:26 pm »
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

  • Sr. Member
  • ****
  • Mensajes: 329
  • Karma: 6
Re:Guardar posicion de objetos!
« Respuesta #22 en: Febrero 16, 2018, 10:05:54 pm »
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

Código: [Seleccionar]
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 ..

Código: [Seleccionar]
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
« última modificación: Febrero 16, 2018, 10:08:40 pm por Goku jr »

Futu-block

  • Hero Member
  • *****
  • Mensajes: 2759
  • Karma: 34
  • Superviviente marciano
    • futublock
Re:Guardar posicion de objetos!
« Respuesta #23 en: Febrero 16, 2018, 10:53:37 pm »
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

  • Sr. Member
  • ****
  • Mensajes: 329
  • Karma: 6
Re:Guardar posicion de objetos!
« Respuesta #24 en: Febrero 17, 2018, 08:18:58 am »
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
« última modificación: Febrero 17, 2018, 08:22:37 am por Goku jr »

Goku jr

  • Sr. Member
  • ****
  • Mensajes: 329
  • Karma: 6
Re:Guardar posicion de objetos!
« Respuesta #25 en: Febrero 17, 2018, 08:56:17 am »
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

  • Sr. Member
  • ****
  • Mensajes: 329
  • Karma: 6
Re:Guardar posicion de objetos!
« Respuesta #26 en: Febrero 17, 2018, 06:05:01 pm »
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
Código: [Seleccionar]
[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

  • Hero Member
  • *****
  • Mensajes: 2759
  • Karma: 34
  • Superviviente marciano
    • futublock
Re:Guardar posicion de objetos!
« Respuesta #27 en: Febrero 17, 2018, 06:50:11 pm »
vamos por partes, ¿donde guardas el grafico de cada tile?
mira bien esa variable y mira por que no se guarda



Goku jr

  • Sr. Member
  • ****
  • Mensajes: 329
  • Karma: 6
Re:Guardar posicion de objetos!
« Respuesta #28 en: Febrero 17, 2018, 07:12:39 pm »
Buenas
tengo una variable que se llama num_gfx_tile[GFX_TILE];
y el proceso tile es así


Código: [Seleccionar]
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

  • Hero Member
  • *****
  • Mensajes: 2759
  • Karma: 34
  • Superviviente marciano
    • futublock
Re:Guardar posicion de objetos!
« Respuesta #29 en: Febrero 18, 2018, 12:07:35 am »
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:

Código: [Seleccionar]
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:
Código: [Seleccionar]
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