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

61
CitarHola a toda la Comunidad de Game Maker, ¿Como estan?  :D
Bien, gracias por preguntar, y usted? (?




Vamos, el problema está en cómo se está implementando el Load y el Save.

Lo que hace el código del Save, así como está, es guardar el indice del room "SeleccionarNivel". Entonces no importa cuántas veces cargues tu juego,  Load siempre irá hacia "SeleccionarNivel". Lo cual no nos aporta nada.
Es decir, estás guardando el indice del room, y no los datos que podría contener dicho room.

Entonces si quisieras que se guarden datos más significativos, por ejemplo, la cantidad de niveles desbloqueados, podrías usar un contador que vaya desde 1 a 20 (siendo 20 la cantidad de niveles máxima en tu juego). Luego podrías guardar dicho valor en el archivo de texto para luego leerlo con el Load.

[GML]
if (file_exists("Save.sav"))
    file_delete("Save.sav");

var SaveFile = file_text_open_write("Save.sav");
file_text_write_real(SaveFile,cantidad_de_niveles_desbloqueados);
file_text_close(SaveFile);
[/GML]

Pero claro, el problema radicaría en que cualquiera podría editar el archivo y cambiar el número para adelantarse algunos niveles. Bueno, eso ya puede solucionarse codificando dicho numero con cualquier forma que se te ocurra.

Saludos!
62
Citar
Y cual seria el codigo para la animacion de quedarse parado en un solo lugar sin moverse?

Basicamente lo que deberías hacer es verificar si no se ha presionado las teclas de dirección y, por ejemplo esta en el suelo debería cambiar al sprite de estar en el lugar, algo como esto, obviamente adaptandolo a tu juego:

[GML]

if (keyboard_check_released(ord('A') && keyboard_check_released(ord('D'))
   if (place_free(x,y+1) == false)
      if (sprite_index != spr_personaje_parado_en_el_suelo)
         sprite_index = spr_personaje_parado_en_el_suelo;

[/GML]

Por lo segundo intenta cambiar las expresiones:
key_right = keyboard_check(ord("D"));

por

key_right = keyboard_check(ord('D'));

Notese que cambie las doble comillas " " por comillas simples ' '.
63
La variable que se utiliza para controlar el sprite del objeto actual al cual se desea cambiar la animacion es:
[GML]
sprite_index
[/GML]

Entonces si quisieras cambiar el sprite, en un evento Step, por ejemplo:
[GML]
key_right = keyboard_check(ord("D"));

if (key_right)
   if (sprite_index != spr_personaje_corriendo_hacia_la_derecha) // Esta linea es necesaria, de lo contrario el sprite se iniciaria infinitamente y daría la sensacion de que es una imagen estática
      sprite_index = spr_personaje_corriendo_hacia_la_derecha;
[/GML]

La variable "image_index" que mencionas es para cambiar la subimagen dentro de un sprite determinado.
Entonces suponiendo que el sprite de "spr_personaje_corriendo_hacia_la_derecha" tiene 10 subimagenes, para colocar la animacion al final bastaría con:

[GML]
image_index = 9; // Nueve porque las subimagenes de los sprites van de 0 a 9, haciendo un total de 10
[/GML]

Luego la misma lógica aplicaría para cualquier animacion, por ejemplo la de salto y cualquier otra que desées hacer.
Un ejemplo para cambiar el sprite de salto podría ser:
[GML]
key_up = keyboard_check(ord("W")); // se presiona la tecla de salto

if (key_up )
{
   if (sprite_index != spr_personaje_saltando_hacia_la_derecha)
      sprite_index = spr_personaje_saltando_hacia_la_derecha;

   vspeed = -10;
}
[/GML]

Finalmente, como digo, la misma lógica puede aplicarse para otras animaciones, como colisiones o al presionar la tecla izquierda o bien "A", siguiendo el código.
64
A lo mejor puedes colocar una condición para que no se sume si presionas las teclas de direccion:

[GML]

plataforma_id=instance_place(x,y+1,plataforma_movil)

if plataforma_id != noone
{
   if ( keyboard_check_released(vk_left) || keyboard_check_released(vk_right) )
      x+=plataforma_id.x-plataforma_id.xprevious
}

[/GML]

No se si funcione a ciencia cierta, la verdad. Pero supongo que la X no debería sumarse o restarse si estás presionando las direcciones, para evitar el efecto de aceleracion o de freno.
65
Preguntas y respuestas / Re:Diferencia entre "=" y "=="
Febrero 28, 2015, 04:21:28 PM
En algunos lenguajes de programación como son C y C++ esto tiene un significado bastante importante:
"=" se usa para asignaciones exclusivamente, mientras que "==" se usa para comparaciones, por ejemplo:

[GML]
a = 3; // asignación

if (a == 3) // comparación
{
}
[/GML]

-Sin embargo en GML de Game Maker es indistinto el uso de "=", se usa tanto para comparaciones como para asignaciones:

[GML]
a = 3; // asignación valida

if (a=3) // comparación valida
{
}
[/GML]

No así con el doble igual "==", que solo es aceptado para las comparaciones:
[GML]
a == 3; // asignacion NO valida

if (a==3) // comparacion válida.
{
}
[/GML]

-En mi opinión personal es altamente recomendable utilizar "=" para tener que evitar el hecho de recordar cuándo usarlo o no, y quizá por ahí provoque algunos errores de sintaxis si no se tiene cuidado.

Saludos!
66
Esencialmente lo que hacen min y max son devolver el menor y mayor de los argumentos o parámtros pasados a dicha función.

por ejemplo:
[GML]
min (1,2,3,4,5); // devolverá 1 puesto que es el menor

o
max (1,2,3,4,5); // devolverá 5 puesto que es el mayor
[/GML]

cada una de las funciones soporta hasta 16 parametros.
67
Una buena forma para obtener una colision "limpia", es decir, que no quede un espacio en blanco entre la pared y el personaje, se puede hacer con un ciclo:

[GML]

if (keyboard_check(vk_right))
   repeat(3) // velocidad de movimiento
   {
      if (place_free(x+1,y))
         x++;
   }

[/GML]

Eso hace que el ciclo se repita 3 veces, moviendo al personaje instantaneamente 3 pixeles por step, verificando si en cada uno de ellos hubo o no colision, y mover en el caso de que exista espacio libre.
68
Preguntas y respuestas / Re:IA PONG?
Febrero 25, 2015, 05:01:31 PM
Podrías verificar si la bola está más arriba que el centro de la plataforma, suponiendo que está en el centro y moverla a una velocidad reducida para que el movimiento no sea tan de golpe:

Objeto plataforma, evento step:

[GML]
var yyy;

yyy =

if (yyy < y)
   y -= 2;
else
   if (yyy > y)
       y += 2;

[/GML]

Así más o menos.... claro, sin verificar los bordes de la pantalla.
69
Grafismo & Composición / Re:Heptágono 32x32
Febrero 25, 2015, 04:02:40 PM
Te dejo un sprite que hice, espero te sirva :D
70
Quizá es porque las DLL solo funcionan en Windows ???
71
A lo mejor puedes regular ka cantidad de instancias chequeando con instance_number(...) Y una alarma para que no salgan muy seguidas una tras otra.
Luego para colocarlas fuera solo bastaría colocarlas en una posicion fuera de la vista, cómo x+700, suponiendo una view de 640*480. Más.bien algo cómo: instamce_create(x+700, y+iramdom_range(0,480), objeto).
72
Juegos completos / Re:Megaspriter [Herramienta]
Noviembre 02, 2014, 06:23:10 PM
Buena aplicación , pienso que podrías agregarle una herramienta para escoger color o pickearlo. Pienso además que deberías agregarle un formato más adecuado para exportar teniendo en cuenta las limitaciones del programa, por ejemplo, un formato "ico".

Saludos! :)
73
podrías usar la funcion draw_sprite(sprite_index, image_index,x,y) o usar algo más específico como draw_sprite_ext(...) entonces equivaldría para cualquier sprite que pudiese tomar.
74
Preguntas y respuestas / Re:Efecto de transicion
Agosto 05, 2013, 02:49:23 AM
Creo que la transición exacta que necesitas es la 21:
[GML]
transition_kind = 21;
room_goto_next();
[/GML]

Luego, si no, para arreglar tu código puedes crear una variable que aumente/disminuya en el evento step, o (bien en el draw) que se aplicaría para desvanecer/reaparecer el rectángulo:
[GML]
if (alfa > 0.01) // si el recuadro es totalmente opaco
   alfa -= 0.01;  // comenzará a desaparecerlo
[/GML]

Luego para dibujar:
[GML]
draw_set_alpha(alfa)
draw_set_color(c_black);
draw_rectangle(view_xview[0],view_yview[0],view_xview[0] + view_wview[0],view_yview[0] + view_hview[0],0);
[/GML]
75
Preguntas y respuestas / Re:script diálogos
Julio 28, 2013, 07:59:54 PM
El único comando que utilizarías sería: font_add_sprite(...)
Ya con eso tienes una font hecha con las subimagenes del sprite.

Te adjunto un ejemplo de como usarlo.
Saludos!  :)