Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mensajes - Killer

196
Preguntas y respuestas / Re: por que no funciona
Marzo 07, 2011, 07:35:36 AM
Usando la funci?n current_time, que regresa el n?mero de milisegundos transcurridos desde que inicio el sistema.

Simplemente guarda dicho tiempo en una variable antes de probar lo que quieras, y luego restalo al tiempo luego de la prueba para conseguir un aproximado de que tanto tardo en ejecutarse. Debido a que distintos factores afectan el resultado es mejor realizar las pruebas varias veces para contar con un promedio.

Tambi?n a tener en cuenta es que normalmente lo que quieras probar se ejecutar? en menos de los 10 milisegundos a los que redondea current_time, por eso se deben realizar varias repeticiones antes de probar el tiempo para conseguir resultados que realmente puedas usar.
197
Preguntas y respuestas / Re: por que no funciona
Marzo 07, 2011, 06:14:06 AM
Si te soy sincero no he hecho pruebas de velocidad con esto, pero no es dif?cil de probar, dame un segundo y lo pruebo...

Resultado: los ifs son mas r?pidos, pero la diferencia es ?nfima, se necesitaron diez mil repeticiones para conseguir una diferencia de tiempo de 30 milisegundos

En todo caso yo tambi?n prefiero usar valores booleanos.
198
Preguntas y respuestas / Re: por que no funciona
Marzo 07, 2011, 05:26:41 AM
Jaja, si perdona, no me fije que quer?as que volviera a 0 al llegar a 8, necesito leer con m?s cuidado :-[
199
Preguntas y respuestas / Re: por que no funciona
Marzo 07, 2011, 05:11:45 AM
Prueba con esto:

[gml]sub_imagen=sub_imagen+1*(sub_imagen<8)[/gml]

Con el anterior estabas checando si (sub_imagen+1)*sub_imagen era menor a 8.
200
De hecho no arruina el ejecutable, no lo habr?a mencionado si no supiera si sirve o no, puedes probarlo con cualquier juego de Game Maker. En tanto no hagas ninguna tonter?a no arruinar?s el ejecutable, por eso especifique que debe ser al final de ?l.

Y si, como tambi?n mencione, me parece mucho problema solo por unos scores, pero si WillyDeLeon quiere hacerlo al menos ahora sabe que hay una forma de lograrlo, decidir si vale la pena o no ya es cosa suya.
201
[gml]/*
argument0 = vida
argument1 = sprite
argument2 = x
argument3 = y
*/
var An.Al,c,i;

An=sprite_get_width(argument1)/2;
Al=sprite_get_height(argument1)/2;
c=0;

for (i=0;i<argument0;i+=1){
switch (c){
  case(0):draw_sprite_part(argument1,-1,0,0,An,Al,argument2+(An*2)*floor(i/4),argument3);break;
  case(1):draw_sprite_part(argument1,-1,0,Al,An,Al,argument2+(An*2)*floor(i/4),argument3+An);break;
  case(2):draw_sprite_part(argument1,-1,An,0,An,Al,argument2+An+(An*2)*floor(i/4),argument3);break;
  case(3):draw_sprite_part(argument1,-1,An,Al,An,Al,argument2+An+(An*2)*floor(i/4),argument3+An);break;
}
c+=1;
if c=4 c=0;
}[/gml]

Con este script dibujas horizontalmente cuartos del sprite del argument1 seg?n la vida que pases como argument0.

En cuanto al sistema en si no cambia en nada, cuando el pj colisione con algo que le da?e le restas puntos a la salud, cuando colisione con algo que le sana le sumas puntos, obviamente para recuperar corazones completos sumas 4.
202
En ese caso, es posible guardar datos editando el final del ejecutable, pero ya que no se puede hacer mientras que este corriendo tendr?as que depender de un m?todo que hiciera los cambios cuando se cierra el juego.

Por ejemplo, puedes crear un nuevo programa con game maker cuyo ?nico prop?sito sea modificar los datos del juego original, agregarlo a dicho juego como un data file, extraerlo en la carpeta temporal del juego y correrlo cuando se cierra el juego.

T?cnicamente estar?s usando varios archivos, pero como el otro programa esta dentro del original solo se necesita el ejecutable del juego para que todo funcione.

Sinceramente es un poco rebuscado para mi gusto, pero es una de las opciones que tienes.
203
Ha pasado un tiempo desde que revise como funcionaban los scores del gm, y sinceramente no tengo ganas de volverlo a revisar en este momento, pero estoy bastante seguro de que los scores se guardan en el registro de windows.

De igual manera puedes guardar tus propios valores en el registro para hacer tu propia tabla de scores.

Inicia declarando las entradas en el registro:

[gml]for (i=0;i<10;i+=1) if !registry_exists('slot'+string(i)){
registry_write_string('slot'+string(i),'-vacio-');
registry_write_real('slot'+string(i)+'P',0);
registry_write_real('slot'+string(i)+'T',0);
}[/gml]

Luego necesitaras declarar una lista donde guardar los scores mientras se ejecuta el juego:

[gml]LPuntajes=ds_list_create();
for (i=0;i<10;i+=1) ds_list_add(LPuntajes,registry_read_real('slot'+string(i)+'P'));
ds_list_sort(LPuntajes,0);[/gml]

Ahora la parte importante, para agregar nuevos scores primero los agregas a la lista y la ordenas, si el score quedo en los primeros 10 lugares entonces puede ser agregado al registro:

[gml]/*
argument0 = Puntaje
argument1 = Tiempo
*/

ds_list_add(LPuntajes,argument0-.05);
ds_list_sort(LPuntajes,0);
Posicion=ds_list_find_index(LPuntajes,argument0-.05);

if Posicion<10{
ds_list_replace(LPuntajes,Posicion,argument0);
//Nombre = Metodo para agregar el nombre del jugador;


for (i=9;i>=Posicion;i-=1){
  TempN=registry_read_string('slot'+string(i-1));
  TempP=registry_read_real('slot'+string(i-1)+'P');
  TempT=registry_read_real('slot'+string(i-1)+'T');
  registry_write_string('slot'+string(i),TempN);
  registry_write_real('slot'+string(i)+'P',TempP);
  registry_write_real('slot'+string(i)+'T',TempT);
}

registry_write_string('slot'+string(Posicion),Nombre);
registry_write_real('slot'+string(Posicion)+'P',argument0);
registry_write_real('slot'+string(Posicion)+'T',argument1);
}[/gml]

En este c?digo se le resta .05 al score real para que en caso de scores iguales siempre quede primero el primero en adquirirlo.

No estar?a de m?s agregar una forma de borrar los scores de la tabla:

[gml]for (i=0;i<10;i+=1) {
registry_write_string('slot'+string(i),'-vacio-');
registry_write_real('slot'+string(i)+'P',0);
registry_write_real('slot'+string(i)+'T',0);
}
ds_list_clear(LPuntajes);[/gml]

Te dejo un ejemplo usando los c?digos que he puesto, al presionar control se agrega un score al azar a la tabla, al presionar espacio se borran todos los scores.
204
Preguntas y respuestas / Re: keyboard_wait
Diciembre 10, 2010, 07:28:57 PM
Usa:

[gml]do keyboard_wait();
until (keyboard_lastkey=ord('A'))[/gml]

Cambia 'A' por la tecla que quieras usar.
205
Preguntas y respuestas / Re: view_angle(view_yview+0)
Octubre 30, 2010, 09:40:46 AM
Si, en mi script original creo que usaba un argumento para seleccionar con cual view funcionaba el script, pero se perdio junto con mi viejo disco duro, este fue algo que arme rapido tratando de recordar como lo habia hecho, y como me es costumbre me salte un par de detalles.

En todo caso, Munguia, si tienes algun problema adaptandolo a texto no dudes en preguntar.
206
Preguntas y respuestas / Re: view_angle(view_yview+0)
Octubre 30, 2010, 09:04:58 AM
Tambien puedes dibujar lo que quieras dandole una posicion relativa y cambiando su angulo para contrarrestar el angulo de la view, por ejemplo:

[gml]/*
argument0= sprite
argument1= subimagen
argument2= x relativa a la view
argument3= y relativa a la view
*/
var Dis,Dir,Xx,Yy;

Dis = point_distance(argument2,argument3,view_wview/2,view_hview/2);
Dir = point_direction(argument2,argument3,view_wview/2,view_hview/2);
Xx = view_wview/2 - lengthdir_x(Dis,Dir-view_angle);
Yy = view_hview/2 - lengthdir_y(Dis,Dir-view_angle);
draw_sprite_ext(argument0,argument1,Xx,Yy,1,1,-view_angle,c_white,1);[/gml]

Con este codigo puedes dibujar sprites que no rotan con la view. Puede usarse uno similar con textos.
207
De hecho, el game maker 5 es solo parcialmente compatible con vista:

http://wiki.yoyogames.com/index.php/Game_Maker_Windows_Vista_compatibility

Aunque no especifica nada sobre cuales son las incompatibilidades.
208
Puedes hacer que el evento para saltar room este solo en A y no en Parent. Si no es una soluci?n viable entonces en el evento Outside Room del objeto B pon cualquier cosa, con un comentario bastar?a, para sobrescribir el evento del Parent.
209
No es necesario agregar la Fuente como Archivo Incluido, en tanto este listada en los recursos del juego el GM la incluir? en el ejecutable. Solo cuando pasas el editable es necesario pasar las Fuentes que no vienen por defecto en todos los equipos.
210
No habr?a diferencia alguna, simplemente se me olvido modificar esa parte cuando estaba limpiando el script  :-[

Y respecto a los cr?ditos, no es necesario que me menciones, pero si igual quieres hacerlo con solo Killer esta bien.