Tiled 编辑地形后 输出简化

Tiled 编辑地形后 输出简化做 2d 游戏 用 Tiled 编辑地形信息 另存为 json 后信息太复杂 这里简单将地形输出 第一个是 html 文件浏览器打开将 tiled 输出的 json 导入 会自动生成一个原文件名 Cut json 的文件里面只有地形 想另行定义就改红色字体部分即可 lt doctypehtml gt lt htmllang en gt lt head gt nbsp nbsp lt me

做2d游戏,用Tiled编辑地形信息,另存为json后 信息太复杂,这里简单将地形 输出。

第一个是html文件 浏览器打开将 tiled输出的json导入,会自动生成一个 原文件名+ _Cut.json的文件里面只有地形,

想另行定义就改红色字体部分即可

   


    Document




   


       
       
   



   
   

            var reader = new FileReader();//这是核心,读取操作就是由它完成.
            reader.readAsText(selectedFile);//读取文件的内容,也可以读取文件的URL
            reader.onload = function () {

                //当读取完成后回调这个函数,然后此时文件的内容存储到了result中,直接操作即可
                a = this.result
                if(typeof a == “string”){

                    a = JSON.parse(a)
                }
                console.log(a);
                console.log(“”);
                var c = a.tilesets[0].tiles;
                for(var i in c){

                    c[i] = c[i].terrain.join()
                }



                console.log(c);
                var file = new File([JSON.stringify(c)], name.substr(0,name.length – 5) + “_Cut.json”, { type: “text/json;charset=utf-8” });
                saveAs(file);
            }
        }
   



















二附上 FileSaver.js

var saveAs = saveAs || (function(view) {

    “use strict”;
    // IE <10 is explicitly unsupported
    if (typeof view === “undefined” || typeof navigator !== “undefined” && /MSIE [1-9]\./.test(navigator.userAgent)) {

        return;
    }
    var
          doc = view.document
          // only get URL when necessary in case Blob.js hasn’t overridden it yet
        , get_URL = function() {

            return view.URL || view.webkitURL || view;
        }
        , save_link = doc.createElementNS(“http://www.w3.org/1999/xhtml”, “a”)
        , can_use_save_link = “download” in save_link
        , click = function(node) {

            var event = new MouseEvent(“click”);
            node.dispatchEvent(event);
        }
        , is_safari = /constructor/i.test(view.HTMLElement) || view.safari
        , is_chrome_ios =/CriOS\/[\d]+/.test(navigator.userAgent)
        , throw_outside = function(ex) {

            (view.setImmediate || view.setTimeout)(function() {

                throw ex;
            }, 0);
        }
        , force_saveable_type = “application/octet-stream”
        // the Blob API is fundamentally broken as there is no “downloadfinished” event to subscribe to
        , arbitrary_revoke_timeout = 1000 * 40 // in ms
        , revoke = function(file) {

            var revoker = function() {

                if (typeof file === “string”) { // file is an object URL
                    get_URL().revokeObjectURL(file);
                } else { // file is a File
                    file.remove();
                }
            };
            setTimeout(revoker, arbitrary_revoke_timeout);
        }
        , dispatch = function(filesaver, event_types, event) {

            event_types = [].concat(event_types);
            var i = event_types.length;
            while (i–) {

                var listener = filesaver[“on” + event_types[i]];
                if (typeof listener === “function”) {

                    try {

                        listener.call(filesaver, event || filesaver);
                    } catch (ex) {

                        throw_outside(ex);
                    }
                }
            }
        }
        , auto_bom = function(blob) {

            // prepend BOM for UTF-8 XML and text/* types (including HTML)
            // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF
            if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {

                return new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type});
            }
            return blob;
        }
        , FileSaver = function(blob, name, no_auto_bom) {

            if (!no_auto_bom) {

                blob = auto_bom(blob);
            }
            // First try a.download, then web filesystem, then object URLs
            var
                  filesaver = this
                , type = blob.type
                , force = type === force_saveable_type
                , object_url
                , dispatch_all = function() {

                    dispatch(filesaver, “writestart progress write writeend”.split(” “));
                }
                // on any filesys errors revert to saving with object URLs
                , fs_error = function() {

                    if ((is_chrome_ios || (force && is_safari)) && view.FileReader) {

                        // Safari doesn’t allow downloading of blob urls
                        var reader = new FileReader();
                        reader.onloadend = function() {

                            var url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, ‘data:attachment/file;’);
                            var popup = view.open(url, ‘_blank’);
                            if(!popup) view.location.href = url;
                            url=undefined; // release reference before dispatching
                            filesaver.readyState = filesaver.DONE;
                            dispatch_all();
                        };
                        reader.readAsDataURL(blob);
                        filesaver.readyState = filesaver.INIT;
                        return;
                    }
                    // don’t create more object URLs than needed
                    if (!object_url) {

                        object_url = get_URL().createObjectURL(blob);
                    }
                    if (force) {

                        view.location.href = object_url;
                    } else {

                        var opened = view.open(object_url, “_blank”);
                        if (!opened) {

                            // Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html
                            view.location.href = object_url;
                        }
                    }
                    filesaver.readyState = filesaver.DONE;
                    dispatch_all();
                    revoke(object_url);
                }
            ;
            filesaver.readyState = filesaver.INIT;
 
            if (can_use_save_link) {

                object_url = get_URL().createObjectURL(blob);
                setTimeout(function() {

                    save_link.href = object_url;
                    save_link.download = name;
                    click(save_link);
                    dispatch_all();
                    revoke(object_url);
                    filesaver.readyState = filesaver.DONE;
                });
                return;
            }
 
            fs_error();
        }
        , FS_proto = FileSaver.prototype
        , saveAs = function(blob, name, no_auto_bom) {

            return new FileSaver(blob, name || blob.name || “download”, no_auto_bom);
        }
    ;
    // IE 10+ (native saveAs)
    if (typeof navigator !== “undefined” && navigator.msSaveOrOpenBlob) {

        return function(blob, name, no_auto_bom) {

            name = name || blob.name || “download”;
 
            if (!no_auto_bom) {

                blob = auto_bom(blob);
            }
            return navigator.msSaveOrOpenBlob(blob, name);
        };
    }
 
    FS_proto.abort = function(){};
    FS_proto.readyState = FS_proto.INIT = 0;
    FS_proto.WRITING = 1;
    FS_proto.DONE = 2;
 
    FS_proto.error =
    FS_proto.onwritestart =
    FS_proto.onprogress =
    FS_proto.onwrite =
    FS_proto.onabort =
    FS_proto.onerror =
    FS_proto.onwriteend =
        null;
 
    return saveAs;
}(
       typeof self !== “undefined” && self
    || typeof window !== “undefined” && window
    || this.content
));
// `self` is undefined in Firefox for Android content script context
// while `this` is nsIContentFrameMessageManager
// with an attribute `content` that corresponds to the window
 
if (typeof module !== “undefined” && module.exports) {

  module.exports.saveAs = saveAs;
} else if ((typeof define !== “undefined” && define !== null) && (define.amd !== null)) {

  define(“FileSaver.js”, function() {

    return saveAs;
  });
}











































































































































































版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221215.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午6:39
下一篇 2026年3月17日 下午6:39


相关推荐

  • 怎么在linux装samba服务器,在linux上装配置samba服务器.doc

    怎么在linux装samba服务器,在linux上装配置samba服务器.doc在linux上装配置samba服务器在linux上安装配置samba服务器在linux上安装配置samba服务器在这给大家介绍一个不错的家伙,samba服务。如果您正在犯愁,如何在Windows和Linux之间实现资源共享,就请看看这篇详解,希望能帮您解决困扰。先简单介绍一下,SMB(ServerMessagesBlock,信息服务块)是在局域网上共享文件和打印机的一种协议,通过它可以使局域网…

    2022年5月21日
    38
  • 如何用python刷屏_利用python实现在微信群刷屏的方法[通俗易懂]

    hello,我是小小炽,这是我写的第一篇博客,写博客一直都想在写,但是苦于能力尚浅,在各位大牛面前那既然是关公面前耍大刀了,但是其实想来每一个大牛不也是从一个小白慢慢进步学习从而达到一定的高度的吗,而且写博客的意义但不在于炫耀你的成果,而在于分享,听取他人的建议,互相学习,因此我下定决心,每天写一篇博客,不管是小项目还是学习笔记,至少坚持下来,我想一定会有所收获的。好,废话不多说,今天我写的是如何…

    2022年4月15日
    292
  • jquery实现轮播图_用jquery实现图片轮播图代码

    jquery实现轮播图_用jquery实现图片轮播图代码HTML代码:&lt;divclass="content_right"&gt;&lt;divclass="ad"&gt;&lt;ulclass="slider"&gt;&lt;li&gt;&lt;imgsrc=&quot

    2025年9月30日
    4
  • 阈值分割–大津阈值法(OSTU)

    阈值分割–大津阈值法(OSTU)文章目录大津阈值法 OSTU 阈值分割中 阈值自动选择的思路是什么 大津阈值法 OSTU 阈值分割中 阈值自动选择的思路是什么 最大化类间方差法选择阈值 大津法是一种确定图像分割阈值的算法 由日本学者大津于 1979 年提出 从原理上来讲该方法又称为最大类间方差法 按照大津法求得的阈值进行二值化后分割后 前景和背景图像的方差最大 其被认位是图像分割中阈值选取的最佳算法 不受图像亮度和

    2026年3月26日
    2
  • cmd查看mysql版本号_mysql当前版本

    cmd查看mysql版本号_mysql当前版本本文介绍如何在Java中通过MySQLJDBC连接AnalyticDBforMySQL集群。MySQLJDBC驱动版本AnalyticDBforMySQL支持以下版本的MySQLJDBC驱动。5.0版本系列:5.0.2,5.0.3,5.0.4,5.0.5,5.0.7,5.0.8。5.1版本系列:5.1.1,5.1.2,5.1.3,5.1.4,5.1.5,5.1.6,5.1.7,5.1…

    2025年11月13日
    5
  • Truncate用法详解[通俗易懂]

    Truncate用法详解[通俗易懂]前言:当我们想要清空某张表时,往往会使用truncate语句。大多时候我们只关心能否满足需求,而不去想这类语句的使用场景及注意事项。本篇文章主要介绍truncate语句的使用方法及注意事项。1.truncate使用语法truncate的作用是清空表或者说是截断表,只能作用于表。truncate的语法很简单,后面直接跟表名即可,例如:truncatetabletbl_name …

    2025年8月20日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号