HTTP 請求與響應:
private createGameScene():void { //HTTP 1.0 var request = new egret.HttpRequest(); request.responseType = egret.HttpResponseType.TEXT; //請求二進制數據則用 HttpResponse.ARRAY_BUFFER //http 測試服務器 + Get 方式 request.open("http://httpbin.org/post",egret.HttpMethod.POST); // get 方法:request.open("http://httpbin.org/get",egret.HttpMethod.GET); request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); request.send(); //如果是帶有參數的請求:get - url + ? + key1=value1&key2=value2; post - send(key1=value1&key2=value2); request.addEventListener(egret.Event.COMPLETE, this.onGetComplete, this); request.addEventListener(egret.IOErrorEvent.IO_ERROR, this.onGetIOError, this); request.addEventListener(egret.ProgressEvent.PROGRESS, this.onGetProgress, this); } private onGetComplete(event:egret.Event):void { var request = <egret.HttpRequest>event.currentTarget; console.log("get data : ",request.response); var responseLabel = new egret.TextField(); responseLabel.size = 18; responseLabel.text = "GET response: \n" + request.response.substring(0, 50) + "..."; this.addChild(responseLabel); responseLabel.x = 50; responseLabel.y = 70; } private onGetIOError(event:egret.IOErrorEvent):void { console.log("get error : " + event); } private onGetProgress(event:egret.ProgressEvent):void { console.log("get progress : " + Math.floor(100*event.bytesLoaded/event.bytesTotal) + "%"); }
跨域加載位圖:
在本地搭建了一個 IIS 站點用來當資源站。
private createGameScene():void { var imgLoader:egret.ImageLoader = new egret.ImageLoader(); imgLoader.once(egret.Event.COMPLETE, this.imgLoadHandler, this); imgLoader.load("http://127.0.0.1/hero1.png"); } private imgLoadHandler(evt:egret.Event):void { var Loader:egret.ImageLoader = evt.currentTarget; var bmData:egret.BitmapData = Loader.data; //應該默認是以二進制數據來傳輸 var bMap:egret.Bitmap = new egret.Bitmap(bmData); this.addChild(bMap); }
但是在 WebGL 運行 createTexture 時報錯,egret 教程上也說暫時不支持 WebGL?
跨域加載文件:
private createGameScene():void { //代碼與普通請求完全相同 var url = "http://127.0.0.1/test.txt"; //IIS的MIME不支持教程的 json 格式,改成 txt 后瀏覽器才可訪問,但js仍不可訪問 var request:egret.HttpRequest = new egret.HttpRequest(); request.once(egret.Event.COMPLETE, this.resLoadHandler, this); request.once(egret.IOErrorEvent.IO_ERROR, this.resLoadHandler, this); request.once(egret.ProgressEvent.PROGRESS, this.progressLoadHandler, this); request.open(url, egret.HttpMethod.GET); request.send(); //js 的跨域問題.. } private resLoadHandler(evt:egret.Event):void{ switch(evt.type){ case egret.Event.COMPLETE: var request:egret.HttpRequest = evt.currentTarget; console.log("resLoadHandler: ", request.response); break; case egret.IOErrorEvent.IO_ERROR: console.log("resLoadHandler io error."); break; } } private progressLoadHandler( evt:egret.ProgressEvent):void{ console.log("progress:", + Math.floor(100 * evt.bytesLoaded / evt.bytesTotal) + "%"); }
這里沒有指定 ResponseType,等搞定了跨域問題要回來驗證一下。