Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: FreeYourMind on October 03, 2009, 12:53:47 AM

Title: problemas/dudas usando resolution en funcion define_region()
Post by: FreeYourMind on October 03, 2009, 12:53:47 AM
Buenas.

Tengo el siguiente problema:

Tengo una barra de energia definida con:

define_region(1,260,10,fuel,20);

fuel es la energia que le resto al enemigo, o sea cada tiro que choca contra el enemigo hace fuel -= 1; y va recortando la barra
hasta terminar la region.


He tenido que rescalar el juego manualmente y ahora la barra tiene la mitad de tamaño:

define_region(1, 130, 5, fuel, 10);


El problema es que el valor de fuel ahora tendria que ser fuel -= 0,5. lo que no se permite por redondeos.


O sea, la solución pasa por utilizar el resolution, lo que ocurre es que no consigo hacerlo.


Si pongo:

resolution = 10;
fuel *= resolution;
define_region(1, 130, 5, fuel/resolution, 10); no me funciona,

lo curioso es que no se el comportamiento de resolution internamente en las funciones de bennu, me explico:


1 - Si pongo de ejemplo:

resolution = 10;
fuel *= resolution;

define_region(1, 130, 5, 50, 10);

la region no se pinta, y la estoy pintando con valores independientes de resolution, si quito el resolution ya funciona,
lo que deduzco que internamente la funcion hace calculos con el resolution,

2 - Splinter Que funciones utilizan resolution internamente, aparte de avance(), son todas ????


Que solucion me dais ??

Estaba pensando que una alternativa al resolution si no consigo ponerlo a funcionar, esto seria crear una variable global la cual incrementaba con 1 en lugar de fuel en cada colision del disparo, cuando esta variable fuese = 2, la reseteaba y incrementaba fuel += 1.

Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: DjSonyk on October 03, 2009, 01:33:09 AM
Buenas ,yo por lo que entiendo quieres reducir un la region en fase del fuel,el problema esta en que no puedes difinir una region con decimales, solo se puede hacer con enteros ,al menos que Splynter diga lo contrario ,aunque me pareceria raro...
Una solucion seria tener otra variable que almacenara un entero y seria la que deverias poner en Define_region...
La idea es que independientemente el fuel que tengas ,me refiero en decimales, que solo se actualizara en base a la variable entera...
No se si me explico ^^...
Humm que se recortara la region solo con la variable entera ...
Otra opcion seria quitar 1 a la region por cada 2 puntos de fuel...osea te dan dos veces y disminulles la region 1 punto.
Espero que te aclares ,porque la verdad me estoy liando yo xD.. Suerte  ;)
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: FreeYourMind on October 03, 2009, 01:42:17 AM
Si claro, tienes razón en lo que dices, pero para eso existe el resolution, que hace calculos en decimales internamente, lo que pasa es que no se como ponerlo en este caso... Y la solución que dices es como la que comente de alternativa, que si esto no se resuleve con resolution lo tendre que hacer de esa forma.
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: DCelso on October 03, 2009, 02:05:59 AM
A ver, todos los valores de pixeles que pongas a partir de resolution deberían de ir multiplicados por este valor. por tanto el 130 debería ser 1300 o 130*resolution, y así en todos, para restar 0.5 ahora sería restar 5, 0.5*resolution.

Es lo que te dije con anterioridad, al usar resolution, tu pantalla se multiplica en cantidad de pixeles(de 320x200 pasa a 3200x2000) así que si quieres usar las coordenadas que usabas antes de resolution , estas deberán llebar el *resolution, para ajustarlas intermamente.
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: FreeYourMind on October 03, 2009, 02:11:20 AM
Porfa cambiame el ejemplo para que lo vea, que soy un torpe.
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: DCelso on October 03, 2009, 02:22:38 AM
pues quizas haya que tocar mas cosas, por eso no lo hice, como no pusiste el proceso entero..
Básicamente en lo poco que has puesto es multipilcar por esa variable todos los valores.

define_region(1,260*resolution,10*resolution,fuel*resolution,20*resolution);

Aunque no lo he probado y no se si el width y el heigh están referenciado tambien las coordenadas agrandadas, que supongo que sí.
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: FreeYourMind on October 03, 2009, 02:44:58 AM
Te pongo el ejemplo completo y lo arreglas :), son dos funciones en una la del disparo igual a la de tu ejemplo que hemos construido anteriormente para el tema del advance, solo que hacemos el fuel += 1; al colisionar el tiro con el enemigo. Y la otra es la funcion barra() donde se hace el region:

1 -

//fuel es una variable global y la podemos poner definir a
fuel = 220;


2 -

processo de disparo que ya lo conoces de antes, sólo que descontamos el fuel al colisionar para pintar la barra de energia

Process disparo(x,y,angle)

Begin

  resolution = 10;
  x *= resolution;
  y *= resolution;

  File=1;
  z=-597;
  graph=graf_disp;
  Repeat
                                                                                                                                                                                       
IF((id_colision = collision(Type enemigo1))

        Switch(graf_disp);
          Case 1:

              fuel -= 1;

              id_colision.vida -= 5; // Ignora esto (se podia usar sólo esta para la barra y enemigo)
              If(id_colision.vida > 0) explosion_tiro(x/resolution, y/resolution, 96, 100); End           

              Break;
            End
          End

      advance(8 * resolution);
      Frame;
  Until(y < 0);
End


3 - Por ultimo la barra de energia:

Process barra();
                
Begin
File=1;
graph=1;

x = 200;
y = 20;


Loop

   While (fuel>0)

define_region(1, 130, 5, fuel, 10);

Frame;End       

   Frame;End     
End           
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: SplinterGU on October 03, 2009, 02:49:10 AM
resolution solo afecta a coordenadas x e y de un proceso que use resolution.

segun creo (no tengo tu codigo) tu fuel debe seguir siendo -1
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: SplinterGU on October 03, 2009, 02:52:36 AM
ahhh, ya veo lo que haces... debes seguir haciendo fuel -=1 y poner fuel / 2 en el define region... vamos que es muy facil... :D

fuel -= 1;

...

define_region( 1, 130, 5, fuel / 2, 10 );

suponiendo que la pantalla se redujo a la mitad... si se redujo a mas, el valor de la division debe ser otro...
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: FreeYourMind on October 03, 2009, 03:06:04 AM
el valor fuel = 220 ya es la mitad, porque el original era fuel = 440; eso creo que no funciona.
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: FreeYourMind on October 03, 2009, 03:10:05 AM
lo que quiero es que al quitar fuel -= 1 al fuel = 220 (que ya es reducido a la mitad como todos los valores de define_region) no le quite 1 pero si 0.5, si hay que alargar la escala con rescale ok, pero el tamaño de las regiones ya es el exacto solo quiero que quite la mitad de lo que hace actualmente.
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: DCelso on October 03, 2009, 03:28:18 AM
Ya está. Eso que comentabas de dividir por dos no es correcto ya que divides todo el fuel yo he tenido que usar float al final para no tener que complicar el código demasiado.
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: SplinterGU on October 03, 2009, 03:33:05 AM
a ver... fuel no es tu energia? si tienes 440 en el juego original, por que lo has reducido a 220? es como decir, tengo 100 de vida y porque hago un rescalado del juego lo pongo a 50... ERROR!!!

fuel tiene que seguir siendo 440, debes descontar a -1, y region debe ser dividido como corresponda.

si lo dividis por 2, es como sumar 0.5... vamos, che, no es nada complicado... basado en este concepto trabaja todo el tema de resolucion, resize, etc... no pueden decir que no es correcto... es INCORRECTO reducir la energia o fuel, porque reducis la resolucion del juego...

dividiendo x 2, la region se reducira cada 2 veces que descuentas 1.

puf...
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: SplinterGU on October 03, 2009, 03:36:57 AM
por favor, no cometer esos errores... una cosa es la logica del juego y otra es la representacion visual del mismo... deben tratar de que las cosas sean independientes una de otra.
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: FreeYourMind on October 03, 2009, 03:41:14 AM
Antes de mirar tu código (y gracias) ya lo he resuelto :) Fue de la forma que dijo Splinter, estoy tonto (es que son las 5:30 de la mañana y sigo con esto), no entiendo porque poner mitad del fuel antes de poner define_region no es lo mismo que hacer la division en la llamada de la funcion !!!


Me explico:


El original:
----------

se hace fuel -= 1;

se asigna el fuel = 440

y la funcion tiene estos valores:

define_region(1, 260, 10, fuel, 20);


La conversion a mitad de resolución, corregida y funcionando:
-----------------------------------------------------------

Se  mantiene fuel -= 1;

se mantiene el fuel = 440

y sólo hay que dividir el fuel en la llamada, en la cual todos los otros valores si se ponen a la mitad:

define_region(1, 130, 5, fuel/2, 10);


---------

No entiendo porque tener estos valores:

fuel -= 1;
fuel = 220
define_region(1, 130, 5, fuel, 10);

no es igual a esto:

fuel -= 1;
fuel = 440
define_region(1, 130, 5, fuel/2, 10);


???



Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: FreeYourMind on October 03, 2009, 03:51:35 AM
A ver splinter ya se que la vida es la misma (por cierto no uso esa variable para la vida, el fuel es una representación a escala de 1:5 en relacion a la vida de los enemigos).

Pero mirando la funcion:

define_region(<número de región>, <x>, <y>,<ancho> ,<alto> )

yo entiendo que el ancho, son coordenadas X, así que si el juego se reducio a la mitad, este ancho tambien lo hizo...
Por eso lo dividia a la mitad, pero explicame porque no es lo mismo hacer la division antes o en la llamada de la función porque hacerlo antes no funciona y hacer fuel/2 en la llamada si funciona... esto realmente es lo que no entiendo  ???

Perdona lo tonto que soy a veces  :'(
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: FreeYourMind on October 03, 2009, 04:04:27 AM
Antes que alguien me responda, dejame apostar:

Apuesto que es por el Frame, ya que en cada frame recoje el valor actual del fuel y lo va dividiendo por 2, seguro que es eso, una cosa es dividirlo antes una sola vez, y otra es hacerlos en las continuas llamadas de la funcion :)


Apuesto que acerte  ::)
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: SplinterGU on October 03, 2009, 04:08:55 AM
a ver... un poco rebuscado tu ejemplo dcelso... aca pongo uno mas simple...


import "mod_key"
import "mod_text"
import "mod_map"
import "mod_video"
import "mod_screen"

global
 int fuel2=440;
 float fuel=220;

Begin
   set_mode(320,240,16);

   barra();
   barra2();

   write_var(0,10,10,0,fuel);
   write_var(0,10,30,0,fuel2);

   Repeat
       If( key(_a))
            if ( fuel > 0 ) fuel -=0.5; end
            if ( fuel2 > 0 ) fuel2 -= 1; end
       End
       frame;
   Until(key(_ESC))

End


Process barra()
Begin
 region =1;
 x = 10;
 y = 10;
 graph=map_new(320,16,16);
 map_clear(0,graph,rgb(255,0,0));
 set_center(0,graph,0,0);
  While (fuel>0)
    define_region(1, 10, 10, fuel, 10);
   Frame;
  End
End

Process barra2()
Begin
 region =2;
 x = 10;
 y = 30;
 graph=map_new(320,16,16);
 map_clear(0,graph,rgb(0,0,255));
 set_center(0,graph,0,0);
  While (fuel2>0)
    define_region(2, 10, 30, fuel2/2, 10);
   Frame;
  End
End


barra2, es lo mismo que hiciste vos, pero como yo dije, y como se ve, no se modifica la logica general del juego... es lo correcto, no hay que por temas de representacion visual modificar la logica del juego.
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: SplinterGU on October 03, 2009, 04:10:02 AM
no, el frame no tiene nada que ver... es cuestion matematica...
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: SplinterGU on October 03, 2009, 04:12:20 AM
Quote from: FreeYourMind on October 03, 2009, 03:41:14 AM
Antes de mirar tu código (y gracias) ya lo he resuelto :) Fue de la forma que dijo Splinter, estoy tonto (es que son las 5:30 de la mañana y sigo con esto), no entiendo porque poner mitad del fuel antes de poner define_region no es lo mismo que hacer la division en la llamada de la funcion !!!


Me explico:


El original:
----------

se hace fuel -= 1;

se asigna el fuel = 440

y la funcion tiene estos valores:

define_region(1, 260, 10, fuel, 20);


La conversion a mitad de resolución, corregida y funcionando:
-----------------------------------------------------------

Se  mantiene fuel -= 1;

se mantiene el fuel = 440

y sólo hay que dividir el fuel en la llamada, en la cual todos los otros valores si se ponen a la mitad:

define_region(1, 130, 5, fuel/2, 10);


---------

No entiendo porque tener estos valores:

fuel -= 1;
fuel = 220
define_region(1, 130, 5, fuel, 10);

no es igual a esto:

fuel -= 1;
fuel = 440
define_region(1, 130, 5, fuel/2, 10);


???





creo que eso lo respondes con una regla de 3 simples...

no es lo mismo porque en un caso descontas 1 de 220, y en otro descontas 1 de 440... al dividir en la region, solo estas modificando la representacion visual.
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: DCelso on October 03, 2009, 04:17:09 AM
Rebuscado :D, yo solo hice lo que me dijeron, querían descontar de medio en medio y eso hace. :D
No me puse a pensar si era lo correcto o no solo hice lo que se me pidió :D.
Pero, vamos, yo me quedo con tu opción antes que la mia eh.
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: FreeYourMind on October 03, 2009, 04:25:10 AM
Muchas gracias a los dos, uno por enseñar que las cosas a veces son mas sencillas de lo que parece, y al otro por enseñarme a incrementar decimales hheeh.
Karma up twice!

Me voy acostar que son ya las 6:30 de la mañana  :P
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: DjSonyk on October 03, 2009, 10:45:49 PM
Ahora el que tiene la duda soy yo....
Se supone que un punto de region es un pixel,¿ok? ¿como se pude divir un pixel sin que de error?

Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: SplinterGU on October 03, 2009, 11:06:09 PM
jejejeje... quien divide un pixel?
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: DjSonyk on October 03, 2009, 11:14:23 PM
if ( fuel > 0 ) fuel -=0.5; end
.....
define_region(1, 10, 10, fuel, 10);

Segun eso Splinter es como decir define_region(1, 10, 10, 1.5, 10); eso seria poner un pixel y medio,no?
O es lo que entiendo...Igual se me estoy cegando con esas 2 intrucciones y no lo veo la logica aun asi lo repasao el codigo que dejastes y es lo que entiendo ^^
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: SplinterGU on October 03, 2009, 11:16:14 PM
no... pones 1.5, pero poner 1.5 cuando se espera un entero es como poner 1... :)
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: DjSonyk on October 03, 2009, 11:40:09 PM
Si gracias Splinter...
Es como hacer lo que le comente quitar 1 barrita en la energia,1 menos de region,cada 2 ,al fin y al cabo es lo mismo pero mucho mas simplificado como dices.... lo que no sabia esque no dava error mejor menos variables,menos calculos=mas memoria,meter mas cosas para hacer la vida imposible al jugador xD.
Ya para darlo concliudo yo pensaba que al pasar una variable con decimales en Region te dava error y me complicaba con un calculo ^^ o bien dibujando la region con la misma anchura de la energia,por poner un ejemplo.Gracias de nuevo.
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: SplinterGU on October 03, 2009, 11:46:32 PM
entiendo, no, no te preocupes (mucho) por las conversiones de tipo de datos... los datos se convierten automaticamente de un tipo a otro, si bien esto es util, en ocaciones pueden dar resultados no esperados... por ejemplo, cuando esperamos un numero con decimal, y como paso por una variable entera, perdio los decimales...
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: DCelso on October 04, 2009, 05:51:58 AM
Entonces al final has dejado 220, fuel a float y restas 0.5 sin usar resolution ¿No?
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: FreeYourMind on October 04, 2009, 10:34:19 AM
Si estas usando float me imagino que no necesitas el resolution para nada.

Yo en mi caso ni resolutions ni floats :) Solo poner fuel/2 al definir la region fue suficiente.
Title: Re: problemas/dudas usando resolution en funcion define_region()
Post by: SplinterGU on October 04, 2009, 03:13:11 PM
resolution para el fuel tampoco era necesario, esa era una de las cosas por las que dije que tu ejemplo estaba un poco rebuscado.