problemas/dudas usando resolution en funcion define_region()

Started by FreeYourMind, October 03, 2009, 12:53:47 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

FreeYourMind

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  :'(

FreeYourMind

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  ::)

SplinterGU

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.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

no, el frame no tiene nada que ver... es cuestion matematica...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

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.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

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.
Monstruos Diabólicos

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

FreeYourMind

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

DjSonyk

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?


SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DjSonyk

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 ^^

SplinterGU

no... pones 1.5, pero poner 1.5 cuando se espera un entero es como poner 1... :)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DjSonyk

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.

SplinterGU

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...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

Entonces al final has dejado 220, fuel a float y restas 0.5 sin usar resolution ¿No?
Monstruos Diabólicos

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

FreeYourMind

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.