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
Preguntas y respuestas / como importar mapas .json? [Solucionado]
« en: Enero 14, 2022, 08:52:37 pm »
estoy diseñando los niveles de mi juego con un programa externo llamado Ogmo editor pero solo maneja el formato json
como podria importarlo a Game Maker o existe algun editor que exporte mapas en formato .gmx........
lo unico que encontre fue este script que lee y almacena la data en ds_grids pero mejor usare Tiled otro editor  que  exporta tus mapas directamente a room.gmx
///loadLevel 
if(objMain.extFiles==true){
        dir = program_directory + "maps\";
        background_replace(tileset0, program_directory + "/maps/tileset_test.png",0,0);
        }
        else{
             dir = working_directory + "maps\";
        }

     var str  = "";
     var file = "";
     var hey  = "";
     var lineCount = 0;
     var tilemapWidthCountFlag = false;
     global.mapWidth = 0;

     if(ds_exists(objMain.levelData,ds_type_grid)){
        ds_grid_destroy(objMain.levelData);
     }
     
     if(ds_exists(objMain.levelDataLayer2,ds_type_grid)){
        ds_grid_destroy(objMain.levelDataLayer2);
     }
     
     file = file_text_open_read(dir+argument[0]);
     var mapHeader = file_text_readln(file);
     
     for(k=1; k<=string_length(mapHeader); k++)
     {
         if(string_char_at(string(mapHeader),k)=='"')
         {  
            var j = "";
                k++;
            while(string_char_at(string(mapHeader),k)!='"'){
                  j += string_char_at(string(mapHeader),k);
                  k++;
            }
            if(global.mapWidth<=0){
               global.mapWidth=real(j)/16;
            }
            else{
                 global.mapHeight=real(j)/16;
            }
          j = "";
         }    
    }

    global.tileWidth  = 16;
    global.tileHeight = 16;
    objMain.levelData = ds_grid_create(global.mapWidth, global.mapHeight);
    objMain.levelDataLayer2 = ds_grid_create(global.mapWidth, global.mapHeight);
    global.tilesetIndex = 0;

    for(var i=1; i<=global.mapHeight ;i++;)
    {
        for(var j=1; j<=global.mapWidth ;j++;)
        {
            var hey =  file_text_readln(file);
            var commaCount = 0;
            var tileBuffer = "";
            var tileID = "";
            for(var k=1; k <= string_length(hey); k++)
            {
                if(global.tilesetIndex==0)
                {  
                   var q="";
                   if(string_char_at(string(hey),k)==' ')
                   {
                      k+=23;
                      while(string_char_at(string(hey),k)!='"' && k<57){
                            q += (string_char_at(string(hey),k));
                            k++;
                      }
                      global.tilesetIndex = background_get_name(asset_get_index(q));//argument[1];
                      k+=19;
                   }
                   if(k==string_length(hey)){
                      i++; j--;
                   }        
                }
                tileBuffer = tileBuffer+string_char_at(string(hey),k);
                if(string_char_at(string(hey),k)==',')
                {  
                   tileID = string_delete(tileBuffer,string_length(tileBuffer),1);
                if(tileID="-1"){
                   tileID=0;
                   }
                   ds_grid_set(objMain.levelData, j-1, i-1, tileID);
                   tileBuffer = "";        
                   j++;
                }
                else if(j>=global.mapWidth){
                        tileID="";
                  while(string_char_at(string(hey),k)!='<') && (k<string_length(hey)){
                        tileID += string_char_at(string(hey),k);
                        k++;
                  }
                  if(tileID="-1"){
                     tileID=0;
                  }
                  ds_grid_set(objMain.levelData, j-1, i-1, tileID);
                  break;
                }
            }  
        }
    }

/*
//overlay tileset
global.overlayTilesetIndex=0;

for(var i=1; i<=global.mapHeight ;i++;)
{
for (var j=1; j<=global.mapWidth ;j++;)
{
var hey =  file_text_readln(file);
var commaCount = 0;
var tileBuffer = "";
var tileID = "";
for (var k=1; k <= string_length(hey); k++)
  {
 
     if global.overlayTilesetIndex==0
     {
       var q="";
         if (string_char_at(string(hey),k)==' ')
         {
         k+=20;
         
         while (string_char_at(string(hey),k)!='"' && k<57)
         {
         q += (string_char_at(string(hey),k));
         k++;
         }
         
         global.overlayTilesetIndex=background_get_name(asset_get_index(q));//argument[1];
         
         k+=19;
         }
     if k==string_length(hey)-1 {i++;j--;}    
         
     }
     
     if j>=string_length(hey)-1 {i++;break;}    
     
      tileBuffer = tileBuffer + string_char_at(string(hey),k);

      if (string_char_at(string(hey),k)==',')
      {

      tileID = string_delete(tileBuffer,string_length(tileBuffer),1);
     
      if (tileID="-1"){tileID=0;}
      //tileID is the tile we want to store here. Let's store it into the ds_grid.
      ds_grid_set(objMain.levelDataLayer2, j-1, i-1, tileID);
     
      tileBuffer = "";
      j++;
      }
      else if(j>=global.mapWidth)
      {
      tileID="";
      while (string_char_at(string(hey),k)!='<') && (k<string_length(hey))
      {
      tileID += string_char_at(string(hey),k);
      k++;
      }
     
     
      if (tileID="-1"){tileID=0;}
      ds_grid_set(objMain.levelDataLayer2, j-1, i-1, tileID);
     
      break;
      }
     
  }  
   
}
}
*/
/*

hey =  file_text_readln(file); //<entities>
hey =  file_text_readln(file); //first sprite

//entities layer
if(ds_exists(objMain.levelDataSprites,ds_type_grid)){
  ds_map_destroy(objMain.levelDataSprites);
  }
  objMain.levelDataSprites = ds_map_create();
  var q = 0;
while(string_char_at(string(hey),5)=="<")
{
  //loop through every sprite and draw them properly
  var dataPart = 0;
  var spriteIndex = "";
  for(var k=6; k<=string_length(hey); k++)
 {
   valueBuffer="";
   while(string_char_at(string(hey),k)!=' ') && (spriteIndex=="")
   {
      valueBuffer+=string_char_at(string(hey),k);
      k++;
   }
   if(spriteIndex==""){
      spriteIndex = valueBuffer;
      }
      valueBuffer = "";
   if(string_char_at(string(hey),k)=='"'){
      k++
      while(string_char_at(string(hey),k)!='"')
      {
        valueBuffer+=string_char_at(string(hey),k);
        k++;
      }
      switch(dataPart)
      {
       case 0: spriteID   = real(valueBuffer); break;
       case 1: spriteXPos = real(valueBuffer); break;
       case 2: spriteYPos = real(valueBuffer); break;
       default: break;
      }
      dataPart++;
   }
 }
 var b = string(q);
 ds_map_add(objMain.levelDataSprites, "spriteIndex" + b, spriteIndex);
 ds_map_add(objMain.levelDataSprites, "spriteID"    + b, spriteID);
 ds_map_add(objMain.levelDataSprites, "spriteXPos"  + b, spriteXPos);
 ds_map_add(objMain.levelDataSprites, "spriteYPos"  + b, spriteYPos);
 q++;
 hey =  file_text_readln(file);
}
spawnSprites();
*/
//Close the text document to avoid memory leaks
file_text_close(file);
global.tilesetWidth   = 16;
global.tilesetHeight  = 16;
global.currentMap     = argument[0]; //Let the game know which map is currently loaded
objMain.switchingMaps = false;

2
Preguntas y respuestas / Re: Lasers Animados [Solucionado]
« en: Enero 11, 2022, 05:03:17 am »
al parecer el evento draw  dibuja por capas lo que se dibuja primero queda al fondo, asi que la solucion fue cambiar el orden de dibujado
estos pequeños detalles son los que se olvidan facilmente y despues resultan  en un dolor de cabeza
//DRAW EVENT
for(i=0; i<laserLength/32; i++){
    draw_sprite(sprite5,frame,x,y-i*32);  //cuerpo del laser
}   draw_sprite(sprite4,frame,x,y-laserLength);  //cabeza del lasaer
    draw_sprite_ext(sprite4,frame,x,y,1,-1,0,c_white,1);  //colita del laser



3
Preguntas y respuestas / Lasers Animados [Solucionado]
« en: Enero 11, 2022, 03:44:02 am »
Estaba replicando algunos lasers de mis shoot em up favoritos , todo marchaba bien , hasta que intente replicar el laser  beam tipo consolador del juego Dogyuun,  el laser funciona adecuadamente, el unico problema fue que al colisionar el laser contra enemigos la punta del laser terminaba desapareciendo asi que decidi dibujar todo manual mente paso por paso osea con un monton de if,  aqui les dejo el codigo del laser y el projecto por si quieren echarle un vistazo  tal vez usted  encuentre la solucion
laser animado projecto:
https://drive.google.com/file/d/1rB6IaLmGn__ApLcYIS_IzXErFB4AcQF5/view?usp=sharing

//LASER STEP EVENT
///STANDARD LASER TEST
var laserTrim = keyboard_check_pressed(ord("W"));

      frame += 0.3;
     
   if(laserTrim){
      laserEnd = 1;
      laserLength = maxLength/choose(1,2,3);
      }
   //INIT LASER BEAM
   if(image_xscale>0.1) && (!laserEnd)
   {  x = pShip.x;
      y = pShip.y;
      depth += 0.05;
      image_xscale -= 0.0125;  
     if(maxLength<512){maxLength +=32;}
     for(i=0; i<maxLength; i++)
     {   xEnd = x+lengthdir_x(i,90);
         yEnd = y+lengthdir_y(i,90);
         laserLength = i;
      if(collision_point(xEnd,yEnd,parEn,0,0)) && (parEn.canStopLaser){
         break;
         }
     }
   }
   //LASER END
   if(image_xscale<=0.1) || (laserEnd){
      speed = laserSpeed;
      image_xscale -= 0.0025;
   }
   //ENEMIES TAKE DAMAGE
   if(instance_exists(parEn))
   {var hitting = ds_list_create();
        hitting = collisionLineList(x,y,xEnd,yEnd,parEn,1,0);      
     if(hitting>0)
     {for(var i=0; i<ds_list_size(hitting); i++;)
       {var inst = ds_list_find_value(hitting,i);
         if(inst.hitPoints!=0){
            with(inst){
                 hitPoints--;
                 crashFX++;
                 }
            }
       }
       ds_list_destroy(hitting);
     }
   }
   //DESTROY LASER INSTANCE
   if(image_xscale<=0){
      instance_destroy();
      }
   if(y<=view_yview-sprite_height){
      instance_destroy();
      }
//DRAW EVENT
for(i=0; i<laserLength/32; i++){
    draw_sprite(sprite5,frame,x,y-i*32);  //cuerpo del laser
}   draw_sprite(sprite4,frame,x,y-laserLength);  //cabeza del lasaer
    draw_sprite_ext(sprite4,frame,x,y,1,-1,0,c_white,1);  //colita del laser


4
Preguntas y respuestas / one way slope Do you know the way?
« en: Enero 03, 2022, 11:12:28 pm »
como dice el titulo cual es la manera correcta de executar one way slopes y ceiling slopes,   yo uso una mezcla de codigo sacados del tutorial de plataformas de monthy Drake y algunas cosas de una engine de un chico italiano  big mama era su nombre creo , bueno lo que me tiene intrigado,  es si lo estoy haciendo de la forma correcta o existe alguna manera mejor de hacerlo aqui les dejo el codigo y el projecto por si quieren echarle un viztaso y ayudarme a aclarar mis dudas, por lo poco que e probado el juego tiene poco bugs como quedarse atascado dentro de una plataforma solida y una plataforma oneway
projecto descarga :
https://drive.google.com/file/d/1fKNyJ3iKRho6NtjU3DdwUbySQkOdQ5zZ/view?usp=sharing
//EVENTO CREATE:
vspd     = 0;
hspd     = 0;
grvspd   = 0.5;
movspd   = 2.5;
jumpspd  = 8;
buffCounter = 0;
buffMax     = 0;
coyCounter = 0;
coyMax     = 6;
jumped     = 1;
minJump    = 1;
onGround   = 0;

//EVENTO STEP PLAYER:
/*******************************************************    
/* HORIZONTAL COLLISION CHECK                         **
/******************************************************/
repeat(abs(hspd)){
     //SOLID SLOPES-UPWARD
     if(place_meeting(x+sign(hspd),y  ,parSolid)
     && place_meeting(x+sign(hspd),y-1,parSolid)
     && place_meeting(x+sign(hspd),y-2,parSolid)
     && place_meeting(x+sign(hspd),y-3,parSolid)
     &&!place_meeting(x+sign(hspd),y-3,parSolid)) y-=4;
else if(place_meeting(x+sign(hspd),y  ,parSolid)
     && place_meeting(x+sign(hspd),y-1,parSolid)
     && place_meeting(x+sign(hspd),y-2,parSolid)
     &&!place_meeting(x+sign(hspd),y-3,parSolid)) y-=3;
else if(place_meeting(x+sign(hspd),y  ,parSolid)  
     && place_meeting(x+sign(hspd),y-1,parSolid)
     &&!place_meeting(x+sign(hspd),y-2,parSolid)) y-=2;
else if(place_meeting(x+sign(hspd),y  ,parSolid)
     &&!place_meeting(x+sign(hspd),y-1,parSolid)) y--;
     
     //SOLID SLOPES-DOWNWARD
     if(!place_meeting(x+sign(hspd),y  ,parSolid)
     && !place_meeting(x+sign(hspd),y+1,parSolid)
     && !place_meeting(x+sign(hspd),y+2,parSolid)
     && !place_meeting(x+sign(hspd),y+3,parSolid)
     && !place_meeting(x+sign(hspd),y+4,parSolid)
     &&  place_meeting(x+sign(hspd),y+5,parSolid)) y+=4;
else if(!place_meeting(x+sign(hspd),y  ,parSolid)
     && !place_meeting(x+sign(hspd),y+1,parSolid)
     && !place_meeting(x+sign(hspd),y+2,parSolid)
     && !place_meeting(x+sign(hspd),y+3,parSolid)
     &&  place_meeting(x+sign(hspd),y+4,parSolid)) y+=3;
else if(!place_meeting(x+sign(hspd),y  ,parSolid)
     && !place_meeting(x+sign(hspd),y+1,parSolid)
     && !place_meeting(x+sign(hspd),y+2,parSolid)
     &&  place_meeting(x+sign(hspd),y+3,parSolid)) y+=2;
else if(!place_meeting(x+sign(hspd),y  ,parSolid)  
     && !place_meeting(x+sign(hspd),y+1,parSolid)
     &&  place_meeting(x+sign(hspd),y+2,parSolid)) y++;
     
      //ONEWAY SLOPES-UPWARD
     if(!place_meeting(x,y+1,parSolid) && onGround){
     if(place_meeting(x+sign(hspd),y  ,parOneWay)  
     && place_meeting(x+sign(hspd),y-1,parOneWay)
     && place_meeting(x+sign(hspd),y-2,parOneWay)  
     && place_meeting(x+sign(hspd),y-3,parOneWay)
     &&!place_meeting(x+sign(hspd),y-4,parOneWay)) y-=4;    
else if(place_meeting(x+sign(hspd),y  ,parOneWay)  
     && place_meeting(x+sign(hspd),y-1,parOneWay)
     && place_meeting(x+sign(hspd),y-2,parOneWay)  
     &&!place_meeting(x+sign(hspd),y-3,parOneWay)) y-=3;    
else if(place_meeting(x+sign(hspd),y  ,parOneWay)  
     && place_meeting(x+sign(hspd),y-1,parOneWay)  
     &&!place_meeting(x+sign(hspd),y-2,parOneWay)) y-=2;    
else if(place_meeting(x+sign(hspd),y  ,parOneWay)  
     &&!place_meeting(x+sign(hspd),y-1,parOneWay)) y--;
     
     //ONEWAY SLOPES-DOWNWARD
     if(!place_meeting(x+sign(hspd),y  ,parOneWay)
     &&!place_meeting(x+sign(hspd),y+1,parOneWay)
     &&!place_meeting(x+sign(hspd),y+2,parOneWay)
     &&!place_meeting(x+sign(hspd),y+3,parOneWay)
     &&!place_meeting(x+sign(hspd),y+4,parOneWay)
     && place_meeting(x+sign(hspd),y+5,parOneWay)) y+=4;
else if(!place_meeting(x+sign(hspd),y  ,parOneWay)
     &&!place_meeting(x+sign(hspd),y+1,parOneWay)
     &&!place_meeting(x+sign(hspd),y+2,parOneWay)
     &&!place_meeting(x+sign(hspd),y+3,parOneWay)
     && place_meeting(x+sign(hspd),y+4,parOneWay)) y+=3;
else if(!place_meeting(x+sign(hspd),y  ,parOneWay)
     &&!place_meeting(x+sign(hspd),y+1,parOneWay)
     &&!place_meeting(x+sign(hspd),y+2,parOneWay)
     && place_meeting(x+sign(hspd),y+3,parOneWay)) y+=2;
else if(!place_meeting(x+sign(hspd),y  ,parOneWay)  
     &&!place_meeting(x+sign(hspd),y+1,parOneWay)
     && place_meeting(x+sign(hspd),y+2,parOneWay)) y++;}
     
     
     //LEFT-RIGHT SOLID COLISION CHECK
     if(!place_meeting(x+sign(hspd),y,parSolid)){
        x += sign(hspd);
      }
      else{
           hspd = 0;
           break;
      }
}

/*******************************************************    
/* VERTICAL COLLISION CHECK                           **
/******************************************************/
repeat(abs(vspd)){
     if(place_meeting(x,y+sign(vspd),parSolid))
        vspd = 0;
     if(vspd>0 && place_meeting(x,y+sign(vspd),parOneWay) && !place_meeting(x,y,parOneWay))
        vspd = 0;
else{if(vspd!=0){
        y += sign(vspd);}}
}    

/*******************************************************    
/* PLAYER STATES                                      **
/*******************************************************/  
var Left   = keyboard_check(vk_left);
var Right  = keyboard_check(vk_right);
var Down   = keyboard_check(vk_down);
var Up     = keyboard_check(vk_up);
var Jump   = keyboard_check_pressed(ord("W"));
var JumpC  = keyboard_check(ord("W"));
var Shot   = keyboard_check_pressed(ord("E"));
var move   = Right-Left;
         
        hspd  = move*movspd;
       
        onGround = place_meeting(x,y+1,parSolid);
     
     if(vspd>0 && !place_meeting(x,y,parOneWay) && place_meeting(x,y+1,parOneWay)){
        onGround = true
        }
     if(!place_meeting(x,y,parOneWay) && place_meeting(x,y+1,parOneWay)){
        onGround = true
        }
     if(onGround==false){vspd += grvspd;}
     if(onGround==true){minJump  = 1;}
     
     //CHANGE SPRITE SIGHT
     if(move== 1) && (onGround){image_xscale = 1;}
     if(move==-1) && (onGround){image_xscale =-1;}
   
    //COYOTE TIME
    if(!onGround)
    {
      if(coyCounter>0)
      {
         coyCounter -= 1;
         
         if(!jumped)
         {
           if(Jump){
              vspd =-jumpspd;
              jumped = 1;
           }
         }
      }
     }else{
            jumped = 0;
            coyCounter = coyMax;
          }
     //JUMP BUFFER
     if(Jump){
        buffCounter = buffMax;
        }
     if(buffCounter>0)
     {
        buffCounter -= 1;
           
        if(onGround){
           vspd =-jumpspd
           buffCounter = 0;
           jumped = 1;
        }
     }
     //JUMPING
     if(onGround && Jump){
        vspd =-jumpspd
        buffCounter = 0;
        jumped  = 1;
        }
     //MINI.JUMP
     if((!onGround) && (vspd<0) && (minJump==1) && (!JumpC)){
        vspd = 0;
        minJump = 0;
        }
/******************************************************************************    
/* CAMERA 1                                                                  **
/*****************************************************************************/
       
        view_xview[0] =((x-view_wview[0]/2)+view_xview[0]*4)/5
        view_yview[0] =((y-view_hview[0]/2)+view_yview[0]*5)/6

     if(view_xview[0]>room_width-view_wview[0]){view_xview[0] = room_width-view_wview[0];}
     if(view_yview[0]>room_height-view_hview[0]){view_yview[0] = room_height-view_hview[0];}
       
         


5
Preguntas y respuestas / Re: utilizar función clamp en camara
« en: Enero 03, 2022, 04:02:51 am »
si no le funciona  aqui le dejo un ejemplo de como usar clamp, lo siento Game Maker elimino view_xview y view_wview que eran variables muy eficientes la verdad,  creo que las sustituyo por  camera_get_view_x(camera) y camera_get_view_width(camera) entonces para clampear el jugador a la view seria algo asi, no lo se
   //EVENTO STEP JUGADOR:
   //clamp x,y del jugador a la camara
    x = clamp(x ,camera_get_view_x(camera)+32 ,camera_get_view_x(camera)+camera_get_view_width(camera)-32);
    y = clamp(y ,camera_get_view_y(camera)+32 ,camera_get_view_y(camera)+camera_get_view_height(camera)-32);
   
   //SUMAR VELOCIDAD DE LA CAMARA A POSICION DEL JUGADOR  
   x += "camaraVelocidadHorizontal"; //SI EL JUGADOR DEJA DE MOVERSE ESTE MANTENDRA SU POSICION  HORIZONTAL RESPECTO A LA VIEW
   y += "camaraVelocidadVertical";  //SI EL JUGADOR DEJA DE MOVERSE ESTE MANTENDRA SU POSICION  VERTICAL RESPECTO A LA VIEW
                                                             


6
Preguntas y respuestas / Re: utilizar función clamp en camara
« en: Enero 03, 2022, 02:55:13 am »
Bueno yo lo hago de esta manera, no se si sea la forma mas eficiente de hacerlo, pero , hasta la fecha me sigue funcionado incluso si se usan velocidades de movimiento muy altas,  el jugador permanece dentro de la view y ademas el jugador no se ralentiza  cuando esta en los limites y se ejecuta un movimiento en diagonal
ACLARACION!!
No se si le funcionara ,  ya que yo jamas necesite mover la camara , pues  este codigo  lo usaba para shoters verticales y tanto el mapa como enemigos los generaba por tiempo aun asi yo creo que si deberia de funcionar eso espero
//EVENTO CREATE JUGADOR:
movVer  = 0;
movHor  = 0;
hspd    = 0;
vspd    = 0;
halveMov  = 0;
spd  = 25;  //opcional

//EVENTO STEP JUGADOR:
     //SET PLAYER CONTROL
    var Up      = keyboard_check(global.keyU)             || gamepad_button_check(global.gpd,global.padUp)    || gamepad_axis_value(global.gpd,global.axisY)<-0.4;              
    var Left    = keyboard_check(global.keyL)             || gamepad_button_check(global.gpd,global.padLeft)  || gamepad_axis_value(global.gpd,global.axisX)<-0.4;                
    var Down    = keyboard_check(global.keyD)             || gamepad_button_check(global.gpd,global.padDown)  || gamepad_axis_value(global.gpd,global.axisY)> 0.4;                
    var Right   = keyboard_check(global.keyR)             || gamepad_button_check(global.gpd,global.padRight) || gamepad_axis_value(global.gpd,global.axisX)> 0.4;                
    var shoting = keyboard_check(global.keyShot)          || gamepad_button_check(global.gpd,global.padShot);  
    var bombing = keyboard_check_pressed(global.keyBomb)  || gamepad_button_check_pressed(global.gpd,global.padBomb);
    var speedup = keyboard_check_pressed(global.keySpeed) || gamepad_button_check_pressed(global.gpd,global.padSpeed);
   

     //MOVIMIENTO VERTICAL
     if(Up && !Down){
        movVer =-1;
        }
else if(Down && !Up){
        movVer = 1;  
        }
   else{movVer = 0;}        
     
     //MOVIMIENTO HORIZONTAL
     if(Left && !Right){
        movHor =-1;
        }
else if(Right && !Left){
        movHor = 1;
        }
   else{movHor = 0;}
     //LIMITAR VELOCIDAD DIAGONAL OPCIONAL  
     if(movHor!=0 && movVer!=0) && (hspd!=0 && vspd!=0){
        halveMov = sqrt(2);  //SI NO SE LIMITA , SU NAVE SE MOVERA EL DOBLE DE RAPIDO, POR LO TANTO TENDRA MENOS CONTROL SOBRE ELLA
        }
   else{halveMov = 1;}  
   
        hspd = (spd*movHor/halveMov);  // velocidad*direccion(0,180)/limitador de velocidad diagonal
        vspd = (spd*movVer/halveMov);   // velocidad*direccion(90,270)/limitador de velocidad diagonal    
     
     //VIEW LIMITE HORIZONTAL
     repeat(abs(hspd)){
     if(x+sign(hspd)<=view_xview[0]+"ANCHO DE SU SPRITE" && (movHor=-1))
     ||(x+sign(hspd)>=view_wview[0]-"ANCHO DE SU SPRITE" && (movHor= 1)){
        hspd = 0;
        }
   else{x += sign(hspd)*dTime;}
   }
      //VIEW LIMITE VERTICAL
     repeat(abs(vspd)){
     if(y+sign(vspd)<=view_yview[0]+"ALTURA DE SU SPRITE" && (movVer=-1))
     ||(y+sign(vspd)>=view_hview[0] -"ALTURA DE SU SPRITE"  && (movVer= 1)){
        vspd = 0;
        }  
   else{y += sign(vspd)*dTime;}
   }
   //AÑADIR VELOCIDAD DE LA VIEW A JUGADOR, ESTO ES OPCIONAL DEPENDERA DEL TIPO DE NIVEL
   x += "viewHorizontalSpeed";
   y += "viewVerticalSpeed";

7
Preguntas y respuestas / Re: dirección bala (solucionado)
« en: Diciembre 22, 2021, 09:39:03 pm »
veo que ya lo resolvio,  aun asi voy a explicar como hacer este tipo de patrones para  los mas nuevos
es muy sencillo la logica seria  direcion de nuestra bala = a rotacion;

///METODO 1 CON VARIABLES
//Evento create
rotacion = 0;

//Evento Step:
 switch(pattern)
{
 case  1:
        rotacion = (rotacion+5) mod 360; //velocidad de rotacion. + girara de derecha a izquierda , - girara de izquierda a derecha
                         //si su objeto rota sobre su propio eje puede usar image_angle
     if(rotacion%25==0)  //cada cuando debera crear una bala esto solo funciona con numeros enteros creo no lo se
     {
     var bullet = instance_create(x , y , objBullet);
         bullet.direction    = rotacion ;
     }
     break;
}
///METODO 2  CON BUCLES FOR
     //PATRON SENCILLO DE DISPARO EN ESPIRAL
     if(keyboard_check(vk_enter))
     {    
          image_angle++;  //rotacion del patron usare image_angle pues el arma es una torreta
         
      for(var i=0; i<360/15; i+=30;){
          var bullet = instance_create(x,y,mainP1Bullets);
              bullet.direction    = i+image_angle;
              bullet.sprite_index = sprWaveBullet;
              bullet.mainSpeed = 70*mainC.deltaTime;
       
      }
      //MAS EJEMPLOS PATRON- CRUZ DEL SAGRADO CORAZON DE IWATA  TORRETA DE CUATRO CAÑONES
      if(keyboard_check(vk_up))
     {    
          image_angle++;
         
      for(var i=0; i<360; i+=90;){
          var bullet = instance_create(x,y,mainP1Bullets);
              bullet.direction    = i+image_angle;
              bullet.sprite_index = sprWaveBullet;
              bullet.mainSpeed = 70*mainC.deltaTime;
       
      }
     

8
Juegos en desarrollo / Soldier BladeDX FAN GAME
« en: Diciembre 17, 2021, 01:02:55 am »


soldier blade dx


Shooter


GM: Studio

Fan game  del juego Soldier Blade de la PC-Engine
fase del juego prototipo
menus intro estados principales del juego70%
collisiones 100%
enemigos comportamientos  40%
niveles  0%
historia ,dialogos, escenas 0%
jugador 90%
sonido 20%
sprites 30%
rank, puntuacion 0%
jefes 30%



9
Juegos en desarrollo / Soldier BladeDX FAN GAME
« en: Diciembre 14, 2021, 10:54:20 pm »


soldier blade dx


Shooter


GM: Studio

Fan game  del juego Soldier Blade de la PC-Engine
fase del juego prototipo
menus intro estados principales del juego70%
collisiones 100%
enemigos comportamientos  40%
niveles  0%
historia ,dialogos, escenas 0%
jugador 90%
sonido 20%
sprites 30%
rank, puntuacion 0%
jefes 30%




https://drive.google.com/file/d/1MheHrnFu95Goq2qA_IGRq_MMneilur4r/view?usp=sharing


10
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);
}


11
Preguntas y respuestas / Re: point_direction?
« en: Diciembre 12, 2021, 06:41:15 pm »
Muchas gracias ,muy bien resuelto , me avía quedado estancado    ;D
De nada para eso estamos , yo tambien la lio con esas funciones del game maker sobre todo con move_towards_point
pero bueno ahora que esta usando una variable para controlar la velocidad de sus objetos cuando pause y despause su juego le resultara mas sencillo restablecerla
claro eso dependera de como maneje la pausa de su juego
if(global.paused){
    speed = 0;
    }
if(!global.paused){
    speed = velocida;
    }

12
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;
}

13
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();
}


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

15
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;
  }
}


Páginas: 1 2