cocos2d-x技術(shù)群新群:117871561
c++技術(shù)交流群:593010226
這里不死摳cocos-lua組件的原理荞驴, 重在快速上手使用, 只針對快速開發(fā)贯城,所以我盡量用簡潔 易懂的 文筆去闡述熊楼。
在一個公司里能運用手上的知識 快速的完成一個功能才是最好的,也可已根據(jù)自己的能力和時間 去選擇是不是要深入的了解這些組件及功能能犯。畢竟還是需要下班充電的鲫骗。
當(dāng)然我的文章 也會根據(jù)我對cocos2d-lua的了解程度 不斷更新,完善踩晶,希望對你有用
綜述:cocos2d-x lua API對XMLHttpRequest對象進行了移植执泰,在cocos2d-x lua編程中可以利用此對象與web服務(wù)器進行數(shù)據(jù)的傳輸。
簡述XMLHttpReques對象的屬性和常用函數(shù):
open() 與服務(wù)器鏈接渡蜻,創(chuàng)建新的請求
send()向服務(wù)器發(fā)送請求
abort()退出當(dāng)前請求
readyState屬性术吝。表示當(dāng)前請求的就緒狀態(tài),其中4表示準(zhǔn)備就緒
status屬性茸苇,提供當(dāng)前htp請求狀態(tài)碼排苍,其中200表示成功請求
responseText屬性,服務(wù)器返回的請求響應(yīng)文本
onreadystatechange屬性学密,設(shè)置回調(diào)函數(shù)淘衙,當(dāng)服務(wù)器處理玩請求后,會自動調(diào)用該函數(shù)
關(guān)鍵:open和send函數(shù)以及onreadystatechange屬性
open函數(shù)用到的參數(shù):
request-type:發(fā)送請求的類型腻暮。一般發(fā)送GET或者POST彤守,也可以發(fā)送HEAD
url:要連接的目標(biāo)URL
asynch:是否需要異步鏈接毯侦,true或者false,默認是true(可選參數(shù))
username:可選參數(shù),用于身份驗證
password:可選參數(shù)具垫,用于身份驗證
示例代碼:
--此方法是一個請求服務(wù)器數(shù)據(jù)的回調(diào)
lcoal function touchCallBack(Sender)
local URL = ”要連接的服務(wù)器地址“
--請求服務(wù)器調(diào)用GetMobilePropertyType方法
local data = "action=GetMobilePropertyType"
local url = URL.."?"..data
--創(chuàng)建一個XMLHTTPREQUEST對象
local xhr = cc.XMLHttpRequest:new()
--設(shè)置應(yīng)答類型為,應(yīng)答返回的是json字符串侈离,其他應(yīng)答類型還有 XMLHTTPREQUEST_RESPONSE_ARRAY_BUFFER返回的是二進制數(shù)據(jù)XMLHTTPREQUEST_RESPONSE_STRING返回的是文本字符
xhr.responseType = cc.XMLHTTPREQUEST_RESPONSE_JSON
--與服務(wù)器鏈接創(chuàng)建請求
xhr.open("GET",url)
--服務(wù)器處理完數(shù)據(jù)后會調(diào)用此函數(shù)
local function readSever()
if xhr.readyState == 4 and xhr.status == 200
then
-- 獲得json格式的響應(yīng)數(shù)據(jù) 需要解碼
lcoal responseData = xhr.response
if responseData
then
--獲取解碼數(shù)據(jù)pcall返回兩個值第一個值是true或false第二個值是解碼后的數(shù)據(jù)
ok, dataTable = pcall(
--解碼數(shù)據(jù)
function() return json.decode(responseData)
end)
if not ok then
print("onHttpJsionTable_cjson_error")
dataTable = nil
end
end
end
end
--注冊請求服務(wù)器事件
xhr:registerScriptHandler(responseData )
--向服務(wù)器發(fā)送數(shù)據(jù)
xhr:send()
end
--此方法是一個向服務(wù)器提交數(shù)據(jù)的回調(diào)
local function addDataCallBack(sender)
local URL = ”要連接的服務(wù)器地址“
--請求服務(wù)器調(diào)用addData方法,將字段 name,age的內(nèi)容添加到服務(wù)器的某個表中
local data = {"action":"addData","name":"lilei","age":23}
local encodeData = json.encode(data)
local xhr = cc.XMLHttpRequest:new()
xhr.responseType = cc.XMLHTTPREQUEST_RESPONSE_JSON
xhr.open("POST",URL )
local function readServerData()
if xhr.readyState == 4 and xhr.status ==200
then
local serverData = xhr.response
if serverData
then
ok,dataTable = pcall(
function() return json.decode(serverData)
end)
end
end
end
xhr.registerScriptHandler(readServerData)
xhr.send(encodeData )
end