Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

* Sponsor

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Mostrar Mensajes

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


Mensajes - Marcusmaniacus

Páginas: 1
1
Preguntas y respuestas / Re:Bug con un array
« en: Noviembre 20, 2020, 10:29:57 am »
¿Estás seguro de que la variable global "global.inventario_num" es un array? ¿Dónde lo declaras?

2
¿Por qué razón quieres hacer eso?

Puedes poner el juego a una tasa de fps muy alta, pero en realidad la frecuencia  de dibujo será igual a la frecuencia de actualización de la pantalla.
Si quieres que se dibuje a 60 fps, pero el procesamiento en el evento Step sea 30 veces por segundo, asigna la variable room_speed y usa una variable para saltar el evento Step
// Create
room_speed = 60;
procesar_step = false;
En el evento Step invierte el valor de procesar_step. Si el valor es false, salta el evento. Debes usar "Drag and Drop" como en la imagen adjunta.

3
Preguntas y respuestas / Re:Limitacion en modo de movimiento diagonal
« en: Mayo 25, 2019, 08:10:00 pm »
Eso sucede porque cuando el movimiento es diagonal, las componentes de movimiento vertical y horizontal valen (ambas) 4, que al sumarse dan como resultado un número mayor (4√2).

Para corregir esto, deberías hacer lo siguiente:
///EVENTO STEP

//Primero, consigues las componentes del movimiento como lo haces normalmente:
var hmove = keyboard_check(vk_right) - keyboard_check(vk_left);
var vmove = keyboard_check(vk_down)  - keyboard_check(vk_up);

//Segundo, calculas el ángulo que forman ambas componentes entre sí
var angle = point_direction(0, 0, hmove, vmove);

//Tercero, multiplicas el valor de la velocidad por las componentes del ángulo.
var hvel = abs(hmove) * vel * dcos(angle);
var vvel = abs(vmove) * vel * dsin(angle);
//(se multiplica también por "abs(hmove)" para evitar que haya movimiento cuando no se está presionando la tecla)

//Cuarto, mueves el objeto
x += hvel;
y -= vvel;

4
Preguntas y respuestas / Re:Tengo un pequeño bug en el fullscrean Help
« en: Agosto 17, 2018, 04:38:39 am »
Hola Marcusmaniacus

Eso pasa porque al hacer Full Screen, cambia el tamaño de la GUI, permitiendo que haya más espacio para dibujar.

Puedes aplicar 2 soluciones.

1- Ajustar la escala con la que dibujas tu sprite reemplazando el view_wview[0] por display_get_gui_width() y ajustar la coordenada Y en la que dibujas el sprite a:
display_get_gui_height()-35

2- Fijar el tamaño de la GUI al tamaño de la VIEW (en el Create Event)
Código: [Seleccionar]
display_set_gui_size(view_wview[0],view_hview[0]) //Código para GMS1.4De esta forma, no importa que tamaño le des al juego, la GUI va a medir siempre lo mismo (esto es malo porque pierdes pixeles para dibujar en la GUI cuando estás en full screen o en resoluciones de pantalla más grandes, pero a veces uno busca conseguir este efecto).

Coméntanos si alguna de las dos te ha funcionado

Saludos

5
Preguntas y respuestas / Re:Preguntas Personalisadas y Fullscrean
« en: Agosto 08, 2018, 06:11:00 am »
Hola Marcusmaniacus

Te he escrito un código sencillo que puede reemplazar el sistema de preguntas de los popup messages, aunque pienso que mi método es un poco arcaico.
Tu puedes modificar lo que quieras para adaptarlo a tus necesidades.

Para ello necesitamos un objeto visible y sin sprite, yo lo he llamado "obj_msg_box", es el encargado de pausar el juego y mostrar las preguntas.

CREATE EVENT
Código: [Seleccionar]
surface = surface_create(view_wview[0],view_hview[0]) //Crea una surface momentanea del tamaño de la view
surface_copy(surface,0,0,application_surface) //Copia el frame anterior a la nueva surface
instance_deactivate_all(true) //Desactiva todos los objetos (menos el cuadro de texto) como falso efecto de pausa
question = "" //Es la pregunta (la recibe desde el script)
choises = ds_list_create() //Son las respuestas (las recibe desde el script)
answer = 0 //Es la línea que estás eligiendo como respuesta, 0 es la primera
width = 0 //Es el ancho que tomará el cuadro (lo calcula en el script)
height = 0 //Es el alto que tomará el cuadro (lo calcula en el script)

DESTROY EVENT
Código: [Seleccionar]
if ds_exists(choises,ds_type_list) ds_list_destroy(choises) //Elimina la lista del cache
if surface_exists(surface) surface_free(surface) //Elimina la surface del cache
instance_activate_all() //Re-activa todas las instancias (un falto efecto de despausa)

/*La respuesta seleccionada está en la variable "answer", la puedes usar para tomar decisiones aquí
ej: ejecutar un script o pasarle la variable a otro objeto, etc.*/

STEP EVENT
Código: [Seleccionar]
if keyboard_check_pressed(vk_down) {
answer += 1 //elige la opción de abajo
if answer > ds_list_size(choises)-1 answer -= ds_list_size(choises) //si ya no había más opciones, vuelve al inicio
}
if keyboard_check_pressed(vk_up) {
answer -= 1 //eliga la opción de arriba
if answer < 0 answer += ds_list_size(choises) //si no había más opciones, salta al final
}

if keyboard_check_pressed(vk_enter) { instance_destroy() } //Seleccionas la respuesta

GAME END EVENT
Código: [Seleccionar]
if ds_exists(choises,ds_type_list) ds_list_destroy(choises) //elimina la lista del cache
if surface_exists(surface) surface_free(surface) //elimina la surface del cache

DRAW EVENT
Código: [Seleccionar]
draw_surface(surface,view_xview[0],view_yview[0]) //Dibuja el "frame anterior" (para dar el efecto de pausa)
var xx = view_xview[0]+(view_wview[0]/2)-width //Arregla este código, no supe calcular el centro de la pantalla jajajaj
var yy = view_yview[0]+(view_hview[0]/2)-height //lo mismo aca
var offset = string_height(question) //es la cantidad de pixeles que se salta para dibujar la siguiente línea
draw_set_colour(c_dkgray)
draw_rectangle(xx,yy,xx+width,yy+offset,false) //dibuja un rectangulo gris oscuro donde va la pregunta
draw_set_colour(c_white)
draw_rectangle(xx,yy+offset,xx+width,yy+height,false) //dibuja un rectangulo blanco donde van las respuestas
draw_set_colour(c_black)
draw_rectangle(xx,yy,xx+width,yy+height,true) //dibuja un borde negro en el recuadro
draw_text(xx,yy,question) //Escribe el texto de la pregunta
for (var i=0; i<ds_list_size(choises); i+=1) { //for loop con la cantidad de respuestas
var resp = ds_list_find_value(choises,i) //recibe la respuesta como string
draw_line(xx,yy+offset,xx+width,yy+offset) //dibuja una línea separadora arriba
draw_text(xx,yy+offset,resp) //Escribe el texto de la respuesta
if answer = i { //checkea si estoy seleccionando esta respuesta
    draw_set_alpha(0.4)
    draw_set_colour(c_aqua)
    draw_rectangle(xx,yy+offset,xx+width,yy+offset+string_height(resp),false) //dibuja un rectángulo azul para indicar que estoy seleccionando esta respuesta
    draw_set_alpha(1)
    draw_set_colour(c_black)
}
offset += string_height(resp) //varía la posición de dibujo para dibujar la siguiente respuesta justo debajo de la respuesta anterior
}

Este objeto lo crearemos desde un script, yo lo he llamado "scr_question()", pero tu le puedes poner como quieras

SCRIPT "SCR_QUESTION()"
Código: [Seleccionar]
///scr_question(pregunta,respuesta1,[respuesta2],...)
var args = argument_count //cuenta la cantidad de argumentos del script
var pregunta = argument[0] //recibe la pregunta como string
var inst = instance_create(0,0,obj_msg_box) //Crea y ejecuta el create event del objeto msg box
with inst { //aplica el siguiente código al objeto recién creado
question = pregunta //le pasa la pregunta al objeto de texto
width = string_width(pregunta) //calcula el ancho del cuadro de texto
height = string_height(pregunta) //calcula el alto del cuadro de texto
for (var i=1; i<args; i+=1) { //crea un for loop para cada respuesta
ds_list_add(choises,argument[i]) //le pasa las respuestas al objeto de texto
width = max(width,string_width(argument[i])) //re-calcula el ancho del cuadro de texto
height += string_height(argument[i]) //re-calcula el alto del cuadro de texto
}
if ds_list_size(choises) = 0 instance_destroy() //Se auto_destruye si el script se llamó sin argumentos de respuesta.
}

Su uso: desde cualquier objeto del juego, usa scr_question(pregunta,respuesta1,respuesta2,respuesta3,etc)
Se creará el objeto "obj_msg_box" que creará un falso efecto de pausa y mostrará un cuadro en la pantalla con la pregunta y todas las respuestas hacia abajo. Usas las flechas para moverte entre las respuestas y pulsas Enter para elegir una respuesta, eso despausará el juego.

La variable que guarda la respuesta es "answer" y la tiene el objeto "obj_msg_box", una vez que se destruye, pierdes la respuesta. Por favor notar que no le puse ningún código para que realice acciones según la respuesta elegida, ese código lo debes crear tu, tu eres el que sabe que debe hacer cada respuesta.

PD: Cada línea del código tiene su comentario al lado que explica su función

Saludos

6
Preguntas y respuestas / Re:Intance_Destroy No me funciona
« en: Agosto 07, 2018, 02:44:29 am »
Hola Marcusmaniacus

Intenta con:
Código: [Seleccionar]
With Obj_Personaje_De_Marco instance_destroy()
Saludos

Páginas: 1