我最近又回到了使用GameMaker:Studio,並且自從我上次使用它之後,hoo男孩已經有了一些大規模更新!事實上,我最後一次使用它,他們只有Windows和HTML5作爲導出選項...GameMaker轉輪在發出HTTP請求時崩潰
無論如何,急於嘗試一些新的東西,我決定嘗試在本機HTTP功能,因爲他們看起來很有希望。
我做了一個測試,使用http_post_string()
效果很好,發送一個JSON字符串到我的服務器並返回一個JSON字符串。返回的字符串實際上表示一個對象,它具有一個屬性"echo"
,它包含已經創建的HTTP請求,僅用於查看GM:S發送的內容。
我不喜歡它發送了Content-Type: application/x-www-form-urlencoded
,當時它非常明顯是JSON,我希望能夠設置我自己的用戶代理字符串,以便服務器可以知道哪個遊戲正在與之通話而無需傳遞額外參數。
因此,我使用低級http_request()
函數重新創建了相同的請求。一切都很好,所以我測試了它。
它墜毀。就像,沒有錯誤信息或任何東西,只是一個完整的崩潰和Windows不得不強行關閉它。
所以我在這裏用的代碼,由所有權利應該做工精細,但崩潰運行時...
///send_request(file,ds_map_data,callback_event_id)
var request = ds_map_create();
request[? "instance"] = id;
request[? "event"] = argument2;
if(!instance_exists(obj_ajax_callback)) {
instance_create(0,0,obj_ajax_callback);
}
var payload = json_encode(argument1);
var headers = ds_map_create();
headers[? "Content-Length"] = string_length(payload);
headers[? "Content-Type"] = "application/json";
headers[? "User-Agent"] = obj_ajax_callback.uastring;
var xhr = http_request("https://example.com/"+argument0,"POST",headers,payload);
with(obj_ajax_callback) {
active_callbacks[? xhr] = request;
}
ds_map_destroy(headers);
obj_ajax_callback
是保持活動請求的ds_map
的對象,並在其HTTP事件它監聽這些請求的回調,並按照with(request[? "instance"]) event_user(request[? "event"])
的方式作出反應,以便調用對象可以處理響應。這完全沒有改變http_post_string()
嘗試。
任何想法可能導致這次崩潰?
...... ... ... - 長時間停頓 - *真的* GM:S?不能只說「無效類型」?必須去徹底崩潰? Grr ...噢,至少現在工作了,我知道今後要留意這一點... –