Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

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

Páginas: 1
1
Desarrollo de Scripts / Console Log
« en: Abril 28, 2019, 06:56:29 pm »
  • Nombre del creador: Markus
  • Breve descripción de su función: Permite enviar mensajes a la consola (show_debug_message()) permitiendo agregar argumentos al string del mensaje.
  • Versión GM utilizada:   Game Maker: Studio 2
  • Código del Script:

    Argumentos
    • mensaje: es un string con el mensaje a imprimir, cada '%s' que contenga se reemplazará con los argumentos entregados.
    • argumentos: puede ser un número o un string. También puede ser un arreglo con números y/o strings.

    Código
    //console_log(mensaje, argumentos);
    ///@param mensaje
    ///@argumentos
    var mensaje    = argument[0];
    var argumentos = argument[1];

    if (is_array(argumentos))
    {
        for (var i = 0; i < array_length_1d(argumentos); i++)
        {
            var value = is_real(argumentos[i]) ? string(argumentos[i]) : argumentos[i];
            mensaje = string_replace(mensaje, "%s", value);
        }
    }
    else
    {
        var value = is_real(argumentos) ? string(argumentos) : argumentos;
        mensaje = string_replace(mensaje, "%s", value);
    }
    show_debug_message(mensaje);

    Ejemplo con 1 argumento
    var nombre = "Pedrito";
    cosole_log("Hola, mi nombre es %s y soy feliz.", nombre);
    Resultado: Hola, mi nombre es Pedrito y soy feliz.

    Ejemplo con un arreglo como argumento
    var nombre = "Pedrito";
    var edad = 12;
    cosole_log("Hola, mi nombre es %s y tengo %s años.", [nombre, edad] );
    O también
    var datos = ["Pedrito" , 12];
    cosole_log("Hola, mi nombre es %s y tengo %s años.", datos);
    Resultado de los dos anteriores: Hola, mi nombre es Pedrito y tengo 12 años.

Los siguientes usuarios dieron las gracias a este tema: somnus

2
Preguntas y respuestas / Re:Iluminar un objeto usando surface e ID
« en: Diciembre 03, 2017, 05:45:33 pm »
Sííííííííí !!!!, por fin funciona !!!!!.

Dios santo, no sabes como te lo agradezco, te debo una cerveza !!!!.

Te la cobraré  ;D

...
Lo que no entiendo es por que todo el mundo usa END STEP para el tema de las surfaces, yo uso el evento STEP y funciona, a que se debe ?, a decir verdad ni si quiera se muy bien como funciona el END STEP.
...

END STEP se usa generalmente para asegurarse de que todas las instancias ya se hayan movido en STEP actual, antes de trabajar con la surface. Así evitas tener que crear la instancia controladora del surface en el orden correcto para ejecutar su código después de que todo el resto lo haga.
Los siguientes usuarios dieron las gracias a este tema: Yuzo

3
Preguntas y respuestas / Re:Iluminar un objeto usando surface e ID
« en: Noviembre 29, 2017, 05:10:12 pm »
Por fin entendí lo que faltaba en la recomendación que te di. Así que vamos de nuevo:

Esto que tienes aquí:

EVENTO STEP
...
// CREA LUZ SOBRE LAS BALAS
if instance_exists(ob_player_bullet){
draw_set_blend_mode(bm_subtract)                // modo de dibujar "EXTRAER"
draw_sprite(spr_luz_1,0,ob_player_bullet.x,ob_player_bullet.y)// Lo coloca sobre las balas
}
...

Por esto:
// CREA LUZ SOBRE LAS BALAS
draw_set_blend_mode(bm_subtract)                // modo de dibujar "EXTRAER"
with(ob_player_bullet){
draw_sprite(spr_luz_1,0,x,y)// Lo coloca sobre las balas
}

with(ob_player_bullet)
hace que todo el código que viene después, dentro de los {} lo ejecute cada instancia del objeto ob_player_bullet, entonces, lo que faltaba era reemplazar las coordenadas que tenías
(ob_player_bullet.x,ob_player_bullet.y)
por las coordenadas de la instancia que ejecuta el código
(x, y)

¿Por qué? Porque cuando escribes objeto.x, usa la coordenada de la primera instancia existente en ese momento del objeto.

Lo probé y funciona.

Saludos.
Los siguientes usuarios dieron las gracias a este tema: Yuzo

4
Preguntas y respuestas / Re:Iluminar un objeto usando surface e ID
« en: Noviembre 18, 2017, 11:41:24 pm »
3DGeminis, sigue sin funcionar.

Markus, así funciona, pero sólo funciona en un objeto por room, es decir, si hay dos balas o más, sólo la primera que se creó tiene el efecto de luz.

No hay algo que se le pueda poner al objeto bala para que el efecto se haga desde el propio objeto ?, creo que sería mejor, y que usaría menos recursos, no ?.

En un fallido intento de hacerlo de dicha manera puse esto en el evento STEP del objeto bala:

/// LUZ EN SURFACE

// CREA LA LUZ SOBRE EL ATAQUE
if room == lvl_4 {
surface_set_target(global.oscuridad)            // llama a la surface
draw_set_blend_mode(bm_subtract)                // modo de dibujar "EXTRAER"
draw_sprite_ext(spr_luz_1,0,x,y,1,1,0,1,1)      // dibuja el sprite de luz
draw_set_blend_mode(bm_normal)                  // deja el modo de dibujo en normal
surface_reset_target()                          // cierra la surface
}

Pero nada, así tampoco funciona, ya no se que hacer .....

¿Pero hiciste el cambio que te indiqué? Porque con WITH haces que todas las balas ejecuten su código, justamente lo que están diciendo que necesitas hacer.
Los siguientes usuarios dieron las gracias a este tema: Yuzo

5
Preguntas y respuestas / Re:Iluminar un objeto usando surface e ID
« en: Noviembre 17, 2017, 12:03:47 pm »
...
EVENTO STEP

///PROPIEDADES

// DIBUJA LA OSCURIDAD
surface_set_target(oscuridad)                   // llama a la surface
draw_set_color(c_black)                         // establece el color negro
draw_set_alpha(0.8)                             // nivel de transparencia en la oscuridad
draw_rectangle(0,0,room_width,room_height,0)    // dibuja el rectangulo negro que ocupa toda la room
draw_set_alpha(1)                               // establece el nivel de transparencia al normal

// CREA LA LUZ SOBRE EL JUGADOR
draw_set_blend_mode(bm_subtract)                // modo de dibujar "EXTRAER"
if instance_exists(ob_player_in_room){          // Lo coloca sobre el jugador entrando en la room
draw_sprite(spr_luz_1,0,ob_player_in_room.x,ob_player_in_room.y)
}else{                                          // lo coloca sobre el jugador
draw_sprite(spr_luz_1,0,ob_player.x,ob_player.y)
}
draw_set_blend_mode(bm_normal)                  // deja el modo de dibujo en normal
surface_reset_target()                          // cierra la surface

// CREA LUZ SOBRE LAS BALAS
if instance_exists(ob_player_bullet){
draw_set_blend_mode(bm_subtract)                // modo de dibujar "EXTRAER"
draw_sprite(spr_luz_1,0,ob_player_bullet.x,ob_player_bullet.y)// Lo coloca sobre las balas
}
draw_set_blend_mode(bm_normal)                  // deja el modo de dibujo en normal
surface_reset_target()                          // cierra la surface
...

Sólo tienes que reemplazar esto:
// CREA LUZ SOBRE LAS BALAS
if instance_exists(ob_player_bullet){

Por esto:
// CREA LUZ SOBRE LAS BALAS
with(ob_player_bullet){
Los siguientes usuarios dieron las gracias a este tema: Yuzo

Páginas: 1