Noticias

¡Ayuda a la Comunidad GM, haz una donación!

* 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 - somnus

Páginas: 1
1
El principal problema es que estas usando una variable global para controlar la vida de las rocas global.vida_piedra, y esta afecta a todas las instancias de ese objeto.
Lo que debes hacer es crear la variable local vida=4
Si vas a poner el codigo en el evento de colision, hay codigo que esta sobrando:
if mouse_check_button_pressed(mb_left) ///si cuando se colisiona con la roca se presiona el raton
  {
   with(other) ///hace referencia a la roca con la que esta colisionando
     {
      vida-=1 ///resta 1 a la variable vida de la roca
      global.cantidad_piedra+=1 ///agrega 1 a la variable global piedra
      if vida<=0 {instance_destroy()} ///si la vida de la roca llega a 0 se destruye
     
     }
  }

2
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
    ///@param 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";
    console_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;
    console_log("Hola, mi nombre es %s y tengo %s años.", [nombre, edad] );
    O también
    var datos = ["Pedrito" , 12];
    console_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.


3
Preguntas y respuestas / Re:Duda sobre UDP y TCP
« en: Abril 04, 2019, 02:32:53 pm »
Complicado no es realmente, solo que hay que tener en cuenta muchas cosas. Primeo y principal, seria saber sobre como manejar buffers. Puesto que es la manera en que se mandan los datos a trevez del networking en GMS.
Para una explicacion detallada tenés el tutorial de Juca:
https://www.comunidadgm.org/articulos/tutorial-buffers-(parte-1-3)/msg125452/#msg125452

Si querés saber como funciona UDP podés mirar este tutorial de Ashe:
https://www.comunidadgm.org/articulos/tutorial-online-udp-39dll/msg128337/#msg128337
Que si bien usa una vieja DLL, el concepto de como funciona es el mismo. La diferencia con GMS es que tiene un propio evento asincrono para procesar los datos en vez de hacerlo en el evento step.

Si querés una explicacion detallada de como manjar TCP tenés mi tutorial extenso:
https://www.comunidadgm.org/articulos/(programacion)hacer-un-juego-multijugador-online-con-game-maker-studio-ver2/

Ahora, podés leer el tutorial de TCP y tratar de hacer algo con eso.
Una vez que dominés ese protocolo, solo extrapolalo a UDP. Que es en escencia mas sencillo que TCP.

////////////////////////////////////////////////
Revisando la Doc de otro motor(Godot) encontre esto:
https://gafferongames.com/post/what_every_programmer_needs_to_know_about_game_networking/

Está en español de donal trump, pero plantea el asunto el networking bastante especificado para juegos

saludos

4
Al código le falta un pequeño detalle: se debe usar la palabra other dentro del loop with.
else with (object_name) { //hace un loop en todos los objetos
  //Si al menos uno de tus objetos no cumple la condición,
  //la variable "check" se vuelve falsa
  if (variable == false) {
    other.check = false;
    break;
  }
}

5
Primero, perdonen las faltas de ortografia  :-[

Te muestro como lo hice :
Cree un objeto laser, con un sprite de un circulo (en mi codigo es sprite11) y se crea a partir del player, de ahi toma la direccion inicial segun el sprite si mira para un lado u otro.

Create:
Código: [Seleccionar]
largo = 10//largo del laser (cantidad de sprites)
vsp = 0 //velocidad vertical
hps = 0 //velocidad horizontal
laser[largo,1] = 0// array para almacenar las posiciones de cada sprite

for (i=0;i<largo;i++){//setea el array en 0's
    laser[i,0] = 0
    laser[i,1] = 0
}


if obj_player.image_xscale > 0{//la direccion depende de hacia donde mira el pj en mi caso

    hsp = 8

}else{

    hsp = -8

}

Step:
Código: [Seleccionar]
x += hsp
y += vsp

//la primer posicion del array siempre son las cordenadas actuales
laser[0,0]= x
laser[0,1]= y

//aca muevo todo los valores hacia la drecha y el ultimo es descartado
for (i=0;i<largo;i++){

    laser[largo-i,0] = laser[largo-i-1,0]
    laser[largo-i,1] = laser[largo-i-1,1]
}

//si detecta una colicion arriba o abajo y la velocidad vertical es no es 0 invierte la velocidad y si vps es 0 sale hacia arriba (esto porque al inicio el laser sale derecho y al primer rebote toma una direccion)
 if collision_line(x,y-sprite_yoffset-5,x,y+sprite_yoffset+5,obj_piso,1,1) && vsp != 0{
   
        vsp*= -1
   }else if vsp = 0{
   
       vsp = -8
   
   }
   //Si coliciona con un lateral se invierte la velocidad horizontal
   if collision_line(x-sprite_xoffset-5,y,x+sprite_xoffset+5,y,obj_piso,1,1){
   
        hsp *= -1
   
   }

Draw:
Código: [Seleccionar]
draw_sprite(sprite11,0,x,y)//dibujo el primer sprite

for (i=1;i<largo;i++){//Dibujo los demas sprites

    draw_sprite(sprite11,0,laser[i,0],laser[i,1])

}

Espero te sirva de algo.

6
Hola tristy3

Lo que buscas es la función "asset_get_index". Lo que hace es utilizar una String para devolver un recurso del juego, como sprites, objetos, etc.

Acá tienes un ejemplo de su uso
Código: [Seleccionar]
var a_buscar = "ob" + string(comprobarNum[0])
var tu_objeto = asset_get_index(a_buscar)
if tu_objeto != -1 { instance_create(0,0,tu_objeto) }

Saludos

7
Preguntas y respuestas / Re:arrojar granadas
« en: Julio 08, 2018, 08:56:24 pm »
Cuando la arrojes le das una velocidad vspeed y hspeed dependiendo de la direccion. luego en steep:

vspeed+=1 //Le sumas la gravedad

if place_meeting(x,y+vspeed,o_solid){vspeed*=-0.6}  // Rebote vertical
if place_meeting(x+hspeed,y,o_solid){hspeed*=-0.6} // Rebote horizontal

El 0.6 ajusta el rebote(tiene que ser negativo)

0-No rebota nada
1-No pierde energía cuando rebota

saludos.

8
Preguntas y respuestas / Re:Crear Linea para láser
« en: Febrero 11, 2018, 03:53:13 am »
E ese caso tenes que calcular la distancia del origen al punto de colision
///CREATE
distancia=0
ang=0

///STEP
ang=point_direction(x,y,mouse_x,mouse_y)
for(i=0; i<1000; i+=1)
  {
   xx=lengthdir_x(distancia,ang)
   yy=lengthdir_y(distancia,ang)
   if instance_position(x+xx, y+yy, pared) break
   distancia=i
  }

///DRAW
draw_sprite_ext(sprite_laser, 0, x, y, distancia, 1, ang, c_white, 1)

El sprite debe tener un ancho de 1 pixel

Páginas: 1