Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

* 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!.

Autor Tema: como importar mapas .json? [Solucionado]  (Leído 654 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Jeffrey Faper

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;
« Última modificación: Enero 16, 2022, 06:42:59 pm por Jeffrey Faper »

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.