Hola , Buenas:

Quisiera saber como poder hacer una bola que flote por una room aleatoriamente tipo como la Bola Smash del Super Smash Bros , para que cuando la rompas al colisionar balas con él , el jugador que la haya destruído tenga un doble disparo por un tiempo limitado de 30 segundos
Atentamente: (y con cariño)
Fabricio Oliva López

twitter: @fabriciOliva
discord: Fabriyin#2173

Como diría nuestro colega Sobako: "te respondiste solo xd "

y bueno basicamente, tenés que gatillar una alarma en el evento destroy del objeto bola. Podrías poner la alarma en el jugador, indicando con una variable , llamemosle "doble_disparo" que al acabar el tiempo se haga false.
Basicamente, en el objeto bola, al momento de destruirse seteas "doble_disparo" del objeto player en true y calculás los 30 segundos dentro del player para setearla a false.
Ya dependiendo del valor hacés que e ljugador pueda hacer 2 tiros, imagino que con una variable de contador o algo del estilo.



Soy bastante malo explicando las cosas :-[, por eso te dejo un mini proyecto con un ejemplo basico de como cambiar el tipo de disparo.
Espero que entiendas.

Cita de: xStarLordx en Enero 21, 2020, 01:39:23 AM
Soy bastante malo explicando las cosas :-[, por eso te dejo un mini proyecto con un ejemplo basico de como cambiar el tipo de disparo.
Espero que entiendas.

Muchas gracias , pero no pude abrir el proyecto :c , yo uso el Game Maker studio 2 la versión de escritorio
Atentamente: (y con cariño)
Fabricio Oliva López

twitter: @fabriciOliva
discord: Fabriyin#2173

Yo no tengo el GMS 2 pero te voy a dejar el codigo del GMS1 y tu le cambias las funciones obsoletas.
Nesecitas al menos 3 objetos objPlayer, objBala y objPowerUp
OBJPLAYER:
Evento create
[gml]///variables
//movimiento
yy = 0;
spd = 0;

//Variable para controlar el tipo de bala que vamos a disparar
bulletState = "normal";[/gml]

Evento step:
[gml]///Movimiento
var kDown, kUp;

kDown = keyboard_check(vk_down);
kUp   = -keyboard_check(vk_up);

spd = kDown + kUp;

//Velocidad
if (spd != 0) yscale = spd;
yy = spd * 3;

y += yy;

///Control de Disparo
if (keyboard_check_pressed(ord("S")))  //Si presionamos la tecla S
{
  switch(bulletState)  //disparamos en funcion de la variable bulletState
    {
      case "normal":   //si bulletState = "normal"
        instance_create(x+16, y, objBala); //disparamos una sola bala
      break;
     
      case "doble":   //si bulletState = "doble"
        instance_create(x+16, y-10, objBala)  //disparamos
        instance_create(x+16, y+10, objBala)  //dos balas
      break;
    }
}
[/gml]

Evento alarma 0:
[gml]///Cambiar el tipo de disparo
bulletState = "normal";[/gml]

OBJPOWERUP:
Evento step:
[gml]///Control

if (place_meeting(x,y,objBala))
{
  instance_destroy(); //destruirse
  with(other)instance_destroy(); //destruir el objeto que coliciono con el
  objPlayer.bulletState = "doble";
  objPlayer.alarm[0]  = 150
  /*
  150 steps son 5 segundos lo puse asi para ver el cambio sin
  tener que esperar 30 segundos. Si quieres saber cuantos steps
  son X segundos solo multiplica 30 por la cantidad de segundos
  que quieras.
  */
}[/gml]

OBJBALA:
evento create:
[gml]hspeed = 8;[/gml]

PD: Espero que ahora si te pueda ayudar. Saludos xStarLordx