未在Kongregate中加载的游戏资产

时间:2017-04-17 13:41:47

标签: actionscript-3 flash kongregate

我刚创建了我的第一个游戏,但遇到了一些问题。我上传到Kongregate(但尚未发布),并且在预览中不加载外部文件(音乐和三张图片)。游戏的其余部分工作正常。

如果我尝试更改它,那么有一个包含资源的zip并更改代码中的目录,它就会崩溃。

我正在使用FlashDevelop,所以一切都是编程的。我注意到swf只有几kb大,所以无论如何都要将资产编译成swf文件并以这种方式加载它们,还是我还需要做其他事情?

请提供帮助,并提前致谢。

2 个答案:

答案 0 :(得分:1)

好的,让我解释一下。让我们假设你有一个主模块 game.swf 从同一个文件夹加载一些图像 asset.jpg 。你在本地测试它,它工作得很好。您将 game.html game.swf asset.jpg 放在您的网站http://niamke.com/上,它仍然有效。然后您将游戏发布为http://kongregate.com/games/niamke/myniamkegame/并突然停止加载 asset.jpg

<强>为什么

来自Flash Player的HTTP请求通过浏览器处理。因此,浏览器从Flash插件实例获取“ asset.jpg ”请求。在一个页面中可能存在来自几个不同域的各种内容(包括几个Flash应用程序),因此浏览器无需计算正确的地址,并且明显地尝试相对于最顶层的HTML文档加载,基本上{{3哪个不存在。

如何避免

您应该创建一小段代码,为您加载的文件确定正确的URL。只要您的内容附加到Stage,任何显示对象都可以访问包含绝对SWF URL的loaderInfo对象。

<强>用法

Files.parseURL(loaderInfo.url);

var aLoader:Loader = new Loader;
var aRequest:URLRequest = new URLRequest(Files.baseUrl + "asset.jpg");

Loader.load(aRequest);

<强>实施

package
{
    public class Files
    {
        // Long live Bill Gates and Windows and backslashes.
        static public function figureSlash(value:String):String
        {
            var aSplit:Array = value.split("/");
            var oSplit:Array = value.split("\\");

            return (aSplit.length >= oSplit.length)? "/": "\\";
        }

        static public var baseUrl:String;
        static public var systemSlash:String;

        // Supposed to dissect the SWF url in order to
        // process relative resource file urls properly.
        static public function parseURL(value:String):void
        {
            // Figure correct slash.
            systemSlash = figureSlash(value);

            // Split SWF URL into Array and remove SWF name.
            var aSplit:Array = value.split(systemSlash);
            aSplit[aSplit.length - 1] = "";

            // Obtain the SWF root folder.
            baseUrl = aSplit.join(systemSlash);
        }
    }   
}

答案 1 :(得分:0)

评论让我得出以下结论: “我只是将URLRequest链接到在线托管文件的位置。”