Noticias

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

* 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 - Jeffrey Faper

Páginas: 1 2
1
General / Re: Scripts indomables
« en: Junio 04, 2022, 09:23:51 pm »
Interesante. Este tio tiene tutoriales sobre generacion procedural muy buenos  y justamente tiene uno sobre el algoritmo flood_fill
tal vez le ayude a concretar su script de bote de pintura...

algoritmo floodfill:
https://refreshertowelgames-wordpress-com.translate.goog/2021/01/25/procedural-generation-in-gms-5-a-flood-of-fills/?_x_tr_sl=auto&_x_tr_tl=es&_x_tr_hl=es#slow

wiki algoritmo floodfill:
https://es.wikipedia.org/wiki/Algoritmo_de_relleno_por_difusi%C3%B3n

2
Preguntas y respuestas / Re: como hacer que el objeto te siga?
« en: Mayo 17, 2022, 10:30:05 pm »
Seria algo como esto se puede hacer con arrays o ds_list no se cual sea la mejor opcion algunos dicen que ds_list es mas rapido no lo se, me gustaria saberlo...
EVENTOS GRAN LIDER OSEA SU NAVE U OBJ_JUGADOR:
//CREATE EVENT
//ARRAY POSICIONES DE NUESTRO OBJETO LIDER
trailIndex=39; //RANGO MAXIMO DE NUESTRO ARRAY
for(var i=trailIndex-1; i>=0;  i--){
    trailx[i]=x;
    traily[i]=y;
}
//EVENTO STEP GRAN LIDER
//almacenar las posiciones de nuestro objeto al array
if(x!=xprevious || y!=yprevious){
    for(var i=trailIndex-1; i>0; i--){
        trailx[i]=trailx[i-1];
        traily[i]=traily[i-1];
        }
    trailx[0]=x;
    traily[0]=y;
    }

EVENTO END STEP DE NUESTRO NPC OPTIONS O COMPAÑERO :
//CREO QUE VA EN UN END STEP EVENT
//ACTUALIZAMOS LA POSICION DE NUESTRA OPTION NPC O COMPAÑERO
x=objGRAN_LIDER.trailx[10];
y=objGRAN_LIDER.traily[10];

Este metodo funciona bien para velocidades estaticas como es el caso del juego Gradius donde solo puedes cambiar de velocidad al coger un poder y upgraderarla para juegos donde el jugador puede cambiar entre diferentes velocidades a su antojo, el npc option o compañero termina alejandose demasiado de el,  jamas pude solucionarlo asi que si alguien tiene alguna solucion favor de compartir le agradeceria mucho

3
Preguntas y respuestas / Re: Problema al Resucir Vida
« en: Mayo 04, 2022, 11:09:37 pm »
por lo que veo no me entiendes lo que quiero intentar hacer, no es un juego de collisiones, solo quiero que cuando el personaje elija un ataque, le redusca vida al enemigo pero no tan rapiamente, y que no me convierta los numeros a decimal, ya que al colocar esto global.vida_enemigo -= 0.17;, la reduce lentamente pero me coloca la vida del enemigo en decimales y no quiero eso...
Bro, lo siento,  pero la culpa es tuya por no poner codigo, sin codigo es dificil entender que esta haciendo y que es lo que realmente quiere hacer.
Simular daño o hacer daño con colisiones, en si es lo mismo, la unica diferencia es que  simulando daño tiene que obtener
el id de la instancia a la que se le aplicara el daño, pero en si las bases son las mismas, si usted no lo entiende creo que esto es lo mas que puedo ayudarle.

DAÑO POR TICKS :

//SIMULAR DAÑO POR TICKS
if(keyboard_check_pressed(vk_enter)){
    //CUANTOS TICKS DE DAÑO RECIBIRA NUESTRO TARGET
    global.ticksCount=30;
    }
//EJECUTAR  DAÑO POR TICKS
if(global.ticksCount>0){
    //TICK TIMER
    global.tickTimer++;
    //APLICAR DAÑO POR TICKS A NUESTRO TARGET CADA 1/2 SEGUNDO..CREO
    if(global.tickTimer%30==0){
        global.vida--;
        global.ticksCount--;
        }
    }else{
        global.tickTimer=0;
    }


4
Preguntas y respuestas / Re: Problema al Resucir Vida
« en: Mayo 02, 2022, 06:12:07 am »
Eso pasa por que no esta condicionando cada cuando su personaje puede recibir daño
si su personaje esta colisionando contra un enemigo y solamente pone esto global.vida_personaje--; 
en su evento de colision, la vida de su personaje disminuira infinitamente hasta que deje de colisionar  contra el enemigo
por eso es que su vida disminuye rapidamente.
lo que usted necesita es una boleana para controlar cada cuando su jugador puede recibir daño la puede llamar invencible
//Si invencible=true salimos del evento de colision
if(invencible){exit}
//En cambio si invencible=false le restamos vida al jugador y activamos la invecibilidad para evitar que su vida descienda rapidamente
else{
global.vida_personaje--;
invencible=true;
alarm[0]=30; //tiempo que durara la invencibilidad
}
//EVENTO ALARMA[0]
invencible=false;
/*
Supongo que usted solo ponia esto global.vida_personaje--;  
esa es la causa de su problema, ya que la vida de su personaje
solo dejara de disminuir cuando deje de colisionar contra el enemigo
*/

5
Preguntas y respuestas / Re: Problema con la resolucion
« en: Abril 09, 2022, 08:09:07 pm »
¿De que manera se hace eso que dices?

Bueno es muy simple
1.Necesita un sprite de sus caracteres PAC-MAN FONT : https://www.spriters-resource.com/game_boy_advance/pacmancollect/sheet/10949/
puede usar la herramienta create from strip para no estar cortando y pegando caracter por caracter
Asi es como se ve el spr-Font-strip41.png de mi sprFont que mide 8x8 con todos los caracteres que voy usar:

2.Una vez tenga su spriteFont listo con todos los  caracteres que necesita creamos nuestro mapa de caracteres en el objeto controlador de su juego seria algo asi
//EVENTO CREATE
//primero creamos el mapa de caracteres,
//tiene que ser el mismo orden que tienen sus caracteres en su spriteFont
fontChar = " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!.-©"; //FONT MAP 1
global.font= font_add_sprite_ext(sprFont,fontChar,0,0);   //GLOBAL FONT SPRITE
draw_set_font(global.font);

//EVENTO DRAW
//Y AHORA YA PODEMOS DIBUJAR LO QUE QUERAMOS. AL SER UN SPRITE PUEDE SEGUIR LA POSICION DE OBJETOS
//Y EN TEORIA DEBRIA ESCALAR JUNTO CON NUESTRA VIEW O SURFACE
draw_text_transformed_colour(F92.x,F92.y-64,"FUCK YOU #SASEL",2,2,0,c_red,c_red,c_orange,c_yellow,1);

Resolucion minima de mi juego en modo ventana :


creo que seria todo, ya lo probe y al inicio me dio errores,  no se por que pero solo  dibujaba el ultimo caracter  © que me habra
querido decir Game Maker Studio skynet a cobrado vida

6
puede usar un objeto como camara aqui le dejo este ejemplo esta sacado de un tutorial de pixelatedPope

tutorial:
Spoiler


codigo:
//objCamera
//Evento Create
viewWidth=320; //ancho de su view
viewHeight=256; //largo de su view
windowScale=3; //escalado de su ventana
window_set_size(viewWidth*windowScale,viewHeight*windowScale); //re-escalar ventana
surface_resize(application_surface,viewWidth*windowScale,viewHeight*windowScale); //re-escalar  surface de la aplicacion a tamaño de su ventana

//Evento End Step
view_wport[0]=viewWidth*windowScale;
view_hport[0]=viewHeight*windowScale;

if(instance_exists(objPlayer)){
    //clampear view al jugador y limites de la room
    var xvf=clamp(objPlayer.x-viewWidth/2,0,room_width-viewWidth);
    var yvf=clamp(objPlayer.y-viewHeight/2,0,room_height-viewHeight);
    //velocidad de la view
    var sv=0.1;
    //actualizar posicion de nuestra camara
    view_xview[0]=lerp(view_xview[0],xvf,sv);
    view_yview[0]=lerp(view_yview[0],yvf,sv);
}



7
Gracias por la aclaracion eso explica por que al dibujar un background estatico en un objeto que sigue  a la view,
este se dibuja con un ligero desplazamiento, pero al poner x = view_xview[0];  en un evento EndStep se elimina dicho desplazamiento

8
Preguntas y respuestas / Re: Problema con mi sistema de stamina
« en: Febrero 11, 2022, 09:48:24 pm »
tal vez esto le podria servir esta testeado en Game Maker 1.4

//creo que me excedi con los comentarios asi que aqui  esta solo el codigo 
//CREATE EVENT:
state = "IDLE";
runspd = 5;
walkspd = 2;
mainspd = walkspd;
hasStamina = 1;
staminaMax = 30;
staminaCount = staminaMax;

//STEP EVENT:
var keyRight = keyboard_check(vk_right);
var keyLeft  = keyboard_check(vk_left);
var keyUp    = keyboard_check(vk_up);
var keyDown  = keyboard_check(vk_down);
var keyRun   = keyboard_check(ord("E"));

    staminaCount = clamp(staminaCount,0,staminaMax);
    var moveX  = keyRight-keyLeft;
    var moveY  = keyDown-keyUp;
    var moving = point_direction(0,0,moveX,moveY);
   
    //ESTADO QUIETO
    if(state=="IDLE"){
       mainspd = 0;
       if(moveX!=0 && moveY!=0)
       ||(moveX!=0)||(moveY!=0){
          state = "MOVING";
          }
       }
    //ESTADO MOVIENDOSE
    if(state=="MOVING"){
       if(moveX!=0 && moveY!=0)
       ||(moveX!=0)||(moveY!=0){
          //CAMINAR
          mainspd = walkspd;
          //CORRER
          if(hasStamina && staminaCount>0 && keyRun){
             staminaCount -= 0.5;
             mainspd = runspd;
             }  
          }else{
                 state = "IDLE";
               }
       }
    //SI TIENE STAMINA
    if(hasStamina){
       //REGENERAR STAMINA SI EL JUGADOR PERMANECE QUIETO
       if(state=="IDLE" && staminaCount<staminaMax){
          staminaCount += 0.1;
          }
       //NO TENENMOS STAMINA
       if(staminaCount<=0){
          hasStamina = 0;
          }
    }
    //SI NO TIENE STAMINA
    if(!hasStamina){
       //REGENERAMOS NUESTRA STAMINA
       if(staminaCount<staminaMax){
          staminaCount += 0.1;
          }else{
                staminaCount = staminaMax;
                hasStamina = 1;
               }
       }
       
    direction = moving;
    speed = mainspd;

//DRAW EVENT o DRAW_GUI EVENT-----------------------------------------------------------------------------------------------------------------------------------------
//DIBUJAR MEDIDOR DE STAMINA
   draw_circular_bar(96,96,staminaCount,staminaMax,c_red,32,0.8,12);
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
//CREAMOS UN SCRIPT PARA DIBUJAR NUESTRO MEDIDOR DE STAMINA CIRCULAR..COPIAR Y PEGAR EN UN SCRIPT
///draw_circular_bar(x ,y ,valor_actual, valor_maximo, color, radio, transparencia, ancho)
if (argument2 > 0) { // no point even running if there is nothing to display (also stops /0
    var i, len, tx, ty, val;
   
    var numberofsections = 60 // there is no draw_get_circle_precision() else I would use that here
    var sizeofsection = 360/numberofsections
   
    val = (argument2/argument3) * numberofsections
   
    if (val > 1) { // HTML5 version doesnt like triangle with only 2 sides
   
        piesurface = surface_create(argument5*2,argument5*2)
           
        draw_set_colour(argument4);
        draw_set_alpha(argument6);
       
        surface_set_target(piesurface)
       
        draw_clear_alpha(c_blue,0.7)
        draw_clear_alpha(c_black,0)
       
        draw_primitive_begin(pr_trianglefan);
        draw_vertex(argument5, argument5);
       
        for(i=0; i<=val; i++) {
            len = (i*sizeofsection)+90; // the 90 here is the starting angle
            tx = lengthdir_x(argument5, len);
            ty = lengthdir_y(argument5, len);
            draw_vertex(argument5+tx, argument5+ty);
        }
       
        draw_primitive_end();
       
        draw_set_alpha(1);
       
        draw_set_blend_mode(bm_subtract)
        draw_set_colour(c_black)
        draw_circle(argument5-1, argument5-1,argument5-argument7,false)
        draw_set_blend_mode(bm_normal)

        surface_reset_target()
     
        draw_surface(piesurface,argument0-argument5, argument1-argument5)
       
        surface_free(piesurface)
       
    }
   
}




9
Preguntas y respuestas / Re: for (var i = 0; i < 1; ++i) se repite !
« en: Diciembre 14, 2021, 06:35:16 am »
es muy simple tiene que usar break para romper el bucle , pero si la velocidad sigue siendo mayor que 1 seguira reproduciendose asi que es mejor que use una alarma o cree  una condicion para evitar que el bucle continue ejecutandose
 
 if(speed>1 &&  instance_number(obj_robot_stela)<1) //condicion se volvera a reproducir el sonido
                                                      //hasta que la instancia obj_robot_stela sea destruida
{
   for(var i = 0; i<1;  i++;)
  {
    audio_play_sound(sound_rapido,0,0);
  }
    instance_create_layer(x + 0, y + 0, "Instances", obj_robot_stela);
}


10
Preguntas y respuestas / Re: point_direction?
« en: Diciembre 10, 2021, 09:15:22 pm »
ya intento poner la velocidad a cero  ademas tiene que cambiar de estado cuando el objeto llega a su posicion por ejemplo
  speed = mainspd; //VELOCIDAD DE MOVIMIENTO

switch(posicion_robot)
{
case "DESTINY1":
 
  //CAMBIAR DE ESTADO SI LA POSICION DEL OBJETO ES >= mayor o igual  o <= menor o igual QUE SU DESTINO
  if(x>=1400 && y>=600)  // >= o <= DEPENDIENDO SI SU OBJETO RECORRE LA PANTALLA DE ARRIBA HACIA ABAJO O VICEVERSA
                                             // DE IZQUIERDA A DERECHA Y VICEVERSA
  {
   posicion_robot = "STANDBY";//cambio de estado
   mainspd =  0;//velocidad de su objeto
  }
  break;

case "STANDBY": //aciones mirar sus  ojos bonitos , disparar , tomar un descanso etc etc

var timer = 0+current_time/6000;  //TEMPORIZADOR
var target = point_direction(x,y,objeto.x,objeto.y) //MIRAR HACIA OBJETIVO
   
    image_angle = target;
  //DISPARAR
  if(timer%3==0)
  {  
   var bull = instance_create(x,y,bullet);
       bull.mainspd = 20*dtime;
       bull.direction = target;
  }
  //CAMBIAR DE ESTADO OTRA VEZ
  if(timer>=5)
  {
   posicion_robot = "OTHER STATE"    
  }
  break;

case "OTHER STATE": break;
}

11
Preguntas y respuestas / pausar la aplicacion [SOLUCIONADO]
« en: Diciembre 07, 2021, 06:48:08 pm »
He creado una intro para mi juego, el problema es que al minimizar la aplicacion este sigue ejecutandose
existe alguna funcion para controlar la pausa del juego cuando esta queda en segundo plano o se minimiza

LEYENDO EL MANUAL encontre estas funciones os_is_paused()  y  window_has_focus() 
ejemplo  simple de como usarlas :
///EVENTO STEP OBJETO MAIN CONTROL
if(os_is_paused())
{    
    io_clear();  
    instance_deactivate_object(all);
    audio_pause_sound(global.currentSong);
for(var i=0; i<8; i++;){
    background_visible[i] = false;
    }
 if(!instance_exists(mainPause))
   {
    instance_create(0,0,mainPause);
   }
}
///EVENTO STEP OBJETO  MAIN PAUSE
if(window_has_focus())
{
   instance_activate_object(all);
   audio_resume_sound(global.currentSong);
   instance_destroy();
}


12
olvide lo que dije ya corregi el codigo, el problema es que estaba usando current_time por eso es que el patron salia rotado

13
es muy facil solo que en el video se ve algo complicado seria algo como esto recuerda debes cambiar los objetos y sprites por los tuyos... lo siento una pequeña correcion al codigo ahora esta exactamente como lo hace guinxu,  si quiere 10 puntas de estrella pues multiplicar sin( i*100) si quiere 5 puntas multiplicar  sin(i*50) creo que ahora funciona correctamente

      //SPREAD SHOT STAR MONA CHINA FO%&A OTAKUS DE LA MUERTE PATTERN
     if(keyboard_check_pressed(vk_enter))
{
         var bullAngle = 5;
         var targetPos = point_direction(x,y,mouse_x,mouse_y);
     for(var i=0; i<360/bullAngle; i++)
  {  
         var bull360 = instance_create(x+sin(current_time/200)*70,y,mainP1Bullets);
             bull360.direction = i*bullAngle;
             /*bull360.direction = i*bullAngle+targetPos; //PATRON TELEDIRIGIDO */
             bull360.speed= 8-sin(i*60*pi/360)*1;  //PATRON ESTATICO
             /*bull360.speed= 8-sin(i*60*pi/360+current_time/200)*1; //PATRON DINAMICO*/
             bull360.sprite_index = sprClusterBullet;
  }
}


14
Preguntas y respuestas / Re: problema con dibujar la cantidad de balas
« en: Noviembre 11, 2021, 07:41:24 pm »
esto parece un problema de instancias y objetos
un objeto es como una plantilla que sera usada por las instancias que coloquemos en la room,
si usted dibuja la municion de un objeto Game Maker dibujara la primera instancia pero si existen mas tambien las dibujara
su problema se arregla creando unas cuantas variables que almacenen el id de la instancia del arma,
no se como controla sus armas pero yo lo suelo hacer todo con el jugador y con una sola variable que almacenara el id del arma que cogi de hecho se puede controlar armas sin necesidad de crear objetos de arma todo controlado por el objeto jugador, bueno por  eso le recomende el uso de un objeto powerUp cuando el jugador lo coge almacenara el id del arma
en la variable weapon1 o weapon2 del jugador  con eso ya tiene el id del arma sin necesidad de estar checando si el arma esta activa, esa misma variable la puede usar en el objeto del jugador para dibujar la municion y el tipo de arma  que cogio,  un  consejo no necesita crear un objeto para cada cosa con un solo objeto puede crear infinidad de armas, balas, dibujar y controlar niveles enteros
tal vez le sirva este tutorial:




15
Preguntas y respuestas / Re: necesito ayuda!!
« en: Octubre 25, 2021, 07:40:10 pm »
probe lo que dijiste(cambiando la escala de prioridades) pero el resultado es el mismo, aun asi gracias, me sirve para ir descartando distintas alternativas.

sabia que no funcionaria es que yo uso Game Maker Studio, parece que el problema esta en su codigo ya que anclar la posición de un objeto a otro es muy sencillo
a intentado poner su código de esta manera
if object_exists(obj_player){
if activar = true
{
    x=obj_alma.x;
    y=obj_alma.y
   //Y DESPUES LO QUE SIGUE
otra solucion es que use items de powerUp estos contendrán el tipo de arma y munición  que el jugador obtendrá
al colisionar y presionar E  creara el arma en la posición deseada  el item de  powerUp se destruirá
de esa manera no tendrá que verificar si el arma esta activa, yo creo que esa parte del código es la causa de su problema


Páginas: 1 2