quick-cocos2d-x 学习系列之十四 测试用例
定义变量,创建13个场景名字
@H_301_10@ local items = { @H_301_10@ "framework.helper", @H_301_10@ "framework.native", @H_301_10@ "framework.display", @H_301_10@ "framework.crypto", @H_301_10@ "framework.network", @H_301_10@ "framework.luabinding", @H_301_10@ "framework.event", @H_301_10@ "framework.interface", @H_301_10@ "framework.socketTcp", @H_301_10@ "framework.timer", @H_301_10@ "framework.gamestate", @H_301_10@ "framework.transition", @H_301_10@ "framework.nvgdrawnode"}
game.createMenu函数用于创建一个UIListView,并向其中添加所有menu (每个menu的回调都为opentest).
在滑动UIListView的时设置变量game.bListViewMove = true(停止滑动时重新设置为false), 该值为true时,menu不调用。
game.createSceneClass(name) 用于创建一个class类。
每个类创建两个函数prepare,runTest。
其中prepare函数创建一个Layer,设置触摸,创建一个RETURN按钮点击返回到mainscene,创建一个label显示标题。如果有参数则显示另一个label.
其中runtest函数调用和自己Memu名字同名且多了一个Test单词的函数。
@H_301_10@1.framework.helper
@H_301_10@调用game.createMenu函数增加menu.(这也是为什么该函数放在game.lua文件上的原因了)回调函数为runtest函数。该函数所有场景类均一致。 @H_301_10@该例加载config.lua 文件。 @H_301_10@2.framework.native
@H_301_10@包含7个items, @H_301_10@local items = { @H_301_10@ "activityIndicator", @H_301_10@ "showAlert", @H_301_10@ "openWebBrowser", @H_301_10@ "callme", @H_301_10@ "sendEmail", @H_301_10@ "getInputText", @H_301_10@ "vibrate", @H_301_10@ }2.1activityIndicator
@H_301_10@显示显示活动指示器,2秒后调用函数隐藏显示活动指示器,并停止调用函数。 @H_301_10@2.2showAlert
@H_301_10@代码如下: @H_301_10@local function onButtonClicked(event) @H_301_10@ if event.buttonIndex == 1 then @H_301_10@ print("玩家选择了 YES 按钮") @H_301_10@ else @H_301_10@ print("玩家选择了 NO 按钮") @H_301_10@ end @H_301_10@ end @H_301_10@ @H_301_10@ device.showAlert("Confirm Exit","Are you sure exit game ?",{"YES","NO"},onButtonClicked) @H_301_10@ @H_301_10@显示一个对话框。 @H_301_10@2.3openWebBrowser
@H_301_10@打开浏览器如下图: @H_301_10@device.openURL("http://dualface.github.com") @H_301_10@ @H_301_10@2.4callme
@H_301_10@通过如下函数拨打电话: @H_301_10@device.openURL("tel:123-456-7890") @H_301_10@ @H_301_10@2.5sendEmail
@H_301_10@通过如下代码,打开设备上的邮件程序,并创建新邮件,填入收件人地址 @H_301_10@ local subject = string.urlencode("Hello") @H_301_10@ local body = string.urlencode("How are you ?") @H_301_10@ device.openURL(string.format("mailto:nobody@mycompany.com?subject=%s&body=%s",subject,body)) @H_301_10@ @H_301_10@ @H_301_10@ @H_301_10@2.6getInputText
@H_301_10@获取输入信息 @H_301_10@cc.Native:getInputText("Information","How weight are you (KG)","60")2.7Vibrate
@H_301_10@Vibrate 调用函数cc.Native:vibrate()实现振动。 @H_301_10@3.framework.display
@H_301_10@local items = { @H_301_10@ "addImageAsync", @H_301_10@ "scale9Sprite", @H_301_10@ "tilesSprite", @H_301_10@ "tiledBatchNode", @H_301_10@ "drawNode", @H_301_10@ "progress", @H_301_10@ "layerMultiTouch" @H_301_10@ } @H_301_10@3.1addImageAsync
@H_301_10@ @H_301_10@异步加载图片 @H_301_10@display.addImageAsync("Coin0001.png",function(event,texture) @H_301_10@ printf("display.addImageAsync(\"Coin0001.png\") - event = %s,texture = %s",tostring(event),tostring(texture)) @H_301_10@ self.coin = display.newSprite("Coin0001.png",display.left + 100,display.cy) @H_301_10@ self:addChild(self.coin) @H_301_10@ end) @H_301_10@加载完毕后调用函数,显示图片到场景中。3.2scale9Sprite
@H_301_10@通过命令newScale9Sprite,创建图片GreenButton.png创建精灵 @H_301_10@设置精灵范围最后设置fadeout和fadein. @H_301_10@3.3tilesSprite
@H_301_10@通过如下命令创建一个图片组成的tilesprite,密集恐惧症的小朋友要慎入。 @H_301_10@self.tilesSprite_ = display.newTilesSprite("close.png",cc.rect(10, 10,100,100)) @H_301_10@ :pos(display.left + 10,display.bottom+ 10) @H_301_10@ :addTo(self) @H_301_10@ @H_301_10@3.4tiledBatchNode
@H_301_10@代码如下: @H_301_10@local cb = function(plist,image) @H_301_10@ self.tiledBatchNode_ = display.newTiledBatchNode("#blocks9.png","blocks9ss.png",cc.size(170,170),10, 10) @H_301_10@ :pos(display.left + 10,display.bottom+ 150) @H_301_10@ :addTo(self) @H_301_10@ end @H_301_10@display.addSpriteFrames("blocks9ss.plist",cb) @H_301_10@加载图片到帧,然后调用函数cb.其中函数display.addSpriteFrames()
display.addSpriteFrames(plistFilename,image,handler)
将指定的 Sprite Sheets 材质文件及其数据文件载入图像帧缓存。
格式:
display.addSpriteFrames(数据文件名,材质文件名)
1 2 3 4 5 6 7 8 |
|
Sprite Sheets 通俗一点解释就是包含多张图片的集合。Sprite Sheets 材质文件由多张图片组成,而数据文件则记录了图片在材质文件中的位置等信息。
Parameters
@H_301_10@·stringplistFilename数据文件名 @H_301_10@·stringimage材质文件名3.5drawNode
@H_301_10@初始化了一个node节点,进行画图。 @H_301_10@一个实心圆,一个空心圆,一个方形,一个直线,一个三角型。3.6progress
@H_301_10@创建一个原型的进度条 @H_301_10@ local progress = display.newProgressTimer("Coin0001.png",display.PROGRESS_TIMER_RADIAL) @H_301_10@ :pos(100, 100) @H_301_10@ :addTo(self) @H_301_10@ progress:setPercentage(60) @H_301_10@ self.progressNode_ = progress @H_301_10@ @H_301_10@3.7layerMultiTouch
@H_301_10@创建一个新的Layer.为其增加监听,回调函数为onTouch函数。 @H_301_10@onTouch函数实现多点触摸。4.framework.crypto
@H_301_10@local items = { @H_301_10@ "AES256", @H_301_10@ "XXTEA", @H_301_10@ "Base64", @H_301_10@ "MD5File", @H_301_10@ "MD5", @H_301_10@ } @H_301_10@4.1AES256
@H_301_10@进行AES256加密解密操作。 @H_301_10@ @H_301_10@4.2XXTEA
@H_301_10@XXTEA加密,如下代码: @H_301_10@local p = "Test123" @H_301_10@ local k = "KEYKEY" @H_301_10@ local c = crypto.encryptXXTEA(p,k) @H_301_10@ printf("source: %s",p) @H_301_10@ printf("encrypt XXTEA: %s",bin2hex(c)) @H_301_10@ printf("decrypt XXTEA: %s",crypto.decryptXXTEA(c, k)) @H_301_10@ @H_301_10@ local p = string.rep("HELLO",15) @H_301_10@ local k = "keykey" @H_301_10@ local c = crypto.encryptXXTEA(p, k)) @H_301_10@4.3Base64
@H_301_10@Base64加密解密操作。同XXTEA。 @H_301_10@4.4MD5File
@H_301_10@MD5算法,对文件进行md5计算,代码如下 @H_301_10@local file = cc.FileUtils:getInstance():fullPathForFilename("config.lua") @H_301_10@ printf("md5 file test: %s -> %s",file,crypto.md5file(file)) @H_301_10@4.5MD5
@H_301_10@对字符串进行MD5计算,如下代码: @H_301_10@local p = string.rep("HELLO",5) @H_301_10@ printf("md5Test: %s -> %s",p,crypto.md5(p))5.framework.network
@H_301_10@local items = { @H_301_10@ "createHTTPRequest", @H_301_10@ "createHTTPRequestBadDomain", @H_301_10@ "send data to server", @H_301_10@ "isLocalWiFiAvailable", @H_301_10@ "isInternetConnectionAvailable", @H_301_10@ "isHostNameReachable", @H_301_10@ "getInternetConnectionStatus", @H_301_10@} @H_301_10@其中onResponse函数处理HTTP相关事件。 @H_301_10@如果事件不是progress则报错,如果是competeled则获取数据长度,如果dumpResponse为true则打印String。 @H_301_10@其他则打印”----------------------------------”。 @H_301_10@5.1createHTTPRequest
@H_301_10@ @H_301_10@local url = "http://quick-x.com/Feed/" @H_301_10@ self.requestCount = self.requestCount + 1 @H_301_10@ local index = self.requestCount @H_301_10@ local request = network.createHTTPRequest(function(event) @H_301_10@ if tolua.isnull(self) then @H_301_10@ printf("REQUEST %d COMPLETED,BUT SCENE HAS QUIT",index) @H_301_10@ return @H_301_10@ end @H_301_10@ self:onResponse(event,index) @H_301_10@ end, url,"GET") @H_301_10@ printf("REQUEST START %d",index) @H_301_10@ request:start() @H_301_10@ @H_301_10@见14.3中对createHTTPRequest函数的解释 @H_301_10@5.2createHTTPRequestBadDomain
@H_301_10@代码同上,只是连接到一个不存在的HTTP地址上去。 @H_301_10@5.3senddata to server
@H_301_10@通过POST命令,发送数据到SERVER。5.4isLocalWiFiAvailable
@H_301_10@判断本地WIFI是否可用。5.5isInternetConnectionAvailable
@H_301_10@判断网连接是否可用。5.6isHostNameReachable
@H_301_10@判断一个网址是否可达。5.7getInternetConnectionStatus
@H_301_10@通过network.getInternetConnectionStatus()命令,判断互联网、WIFI、3G网络是否可用。 @H_301_10@ @H_301_10@ @H_301_10@6.framework.luabinding
@H_301_10@ local items = { @H_301_10@ "avoidPeertableGC", @H_301_10@ "getCppFunction", @H_301_10@ } @H_301_10@6.1avoidPeertableGC
@H_301_10@local node = display.newNode() @H_301_10@ node:addNodeEventListener(cc.NODE_EVENT,function(event) @H_301_10@ printf("node event %s",event.name) @H_301_10@ end) @H_301_10@ node.customVar = 1 @H_301_10@ node:setTag(1) @H_301_10@ self:addChild(node) @H_301_10@ @H_301_10@ printf("1. node.customVar = %s,expected = 1",tostring(node.customVar)) -- 1 @H_301_10@ collectgarbage() @H_301_10@ collectgarbage() @H_301_10@ printf("2. node.customVar = %s,tostring(node.customVar)) -- 1 @H_301_10@ @H_301_10@ self:performWithDelay(function() @H_301_10@ printf("3. node.customVar = %s,tostring(self:getChildByTag(1).customVar)) -- 1 @H_301_10@ local node2 = self:getChildByTag(1) @H_301_10@ collectgarbage() @H_301_10@ collectgarbage() @H_301_10@ printf("4. node.customVar = %s,tostring(node2.customVar)) -- 1 @H_301_10@ self:removeChildByTag(1) @H_301_10@ printf("5. node = %s,expected = nil",tostring(self:getChildByTag(1))) -- nil @H_301_10@ printf("6. node.customVar = %s,tostring(node2.customVar)) -- nil @H_301_10@ end, 1.0) @H_301_10@6.2getCppFunction
@H_301_10@-- override C++ class method @H_301_10@ function cc.Node:setPosition(x,y) @H_301_10@ printf("cc.Node:setPosition(%0.2f,%0.2f)",x,y) @H_301_10@ -- call origin C++ method @H_301_10@ local cfunction = tolua.getcfunction(cc.Node,"setPosition") @H_301_10@ cfunction(self,y) @H_301_10@ end @H_301_10@ @H_301_10@ local node = display.newNode() @H_301_10@ self:addChild(node) @H_301_10@ print("expected 'cc.Node:setPosition(100.00,100.00)'") @H_301_10@ node:setPosition(100,100) --cc.Node:setPosition(100.00,100.00) @H_301_10@ local x,y = node:getPosition() @H_301_10@ printf("x,y = %0.2f,%0.2f,expected 100.00,100.00",y) @H_301_10@ @H_301_10@ -- restoreC++ method @H_301_10@ cc.Node.setPosition = tolua.getcfunction(cc.Node,"setPosition") @H_301_10@ print("expected - no output") @H_301_10@node:setPosition(100,100) @H_301_10@ @H_301_10@重写C++类函数,并重新加载函数。 @H_301_10@7.framework.event
@H_301_10@local items = { @H_301_10@ "addEventListener", @H_301_10@ "removeEventListener", @H_301_10@ "removeAllListener", @H_301_10@ "removeCoin", @H_301_10@ "sendEvent" @H_301_10@ } @H_301_10@先进行初始化,创建node增加图片Coin0001.png. @H_301_10@增加事件监听 EventTest1,EventTest2 @H_301_10@7.1addEventListener
@H_301_10@ @H_301_10@为代理事件增加事件监听 EventTest3,EventTest4。 @H_301_10@ self.eventProxy:addEventListener("EventTest3",function(event) print("event listener 3") dump(event) end,"tag3") @H_301_10@self.eventProxy:addEventListener("EventTest4",function(event) print("event listener 4") dump(event) end) @H_301_10@7.2removeEventListener
@H_301_10@移除事件EventTest1,EventTest2,EventTest3. @H_301_10@通过三种不同的方法如下: @H_301_10@ self.eventProxy:removeEventListener(self.eventHandle2) @H_301_10@ local eventHandle1 = self.eventProxy:getEventHandle("EventTest1") @H_301_10@ self.eventProxy:removeEventListener(eventHandle1) @H_301_10@ self.eventProxy:removeAllEventListenersForEvent("EventTest3") @H_301_10@7.3removeAllListener
@H_301_10@移除所有监听程序。7.4removeCoin
@H_301_10@移除coin精灵,当coin移除的时候添加的事件监听程序也消失。 @H_301_10@7.5sendEvent
@H_301_10@分发EventTest事件。 @H_301_10@事件名字EventTest1,EventTest2,EventTest3,EventTest4. @H_301_10@8.framework.interface
@H_301_10@ local items = { @H_301_10@ "register", @H_301_10@ "modebase", @H_301_10@ "functions" @H_301_10@} @H_301_10@主要是3个常用接口。 @H_301_10@8.1Register
@H_301_10@local register =require("framework.cc.Registry") @H_301_10@ @H_301_10@local eventProtocol =register.newObject("components.behavior.EventProtocol") @H_301_10@--创建一个事件协议对象。 @H_301_10@register.setObject(eventProtocol,"cryptoTest1") @H_301_10@ if not register.isObjectExists("cryptoTest1") then @H_301_10@ printError("ERRORsome thing wrong please check Register") @H_301_10@ end @H_301_10@ register.getObject("cryptoTest1") @H_301_10@ register.removeObject("cryptoTest1") @H_301_10@ if register.isObjectExists("cryptoTest1") then @H_301_10@ printError("ERRORsome thing wrong please check Register") @H_301_10@ end @H_301_10@ @H_301_10@ if not register.exists("components.behavior.EventProtocol") then @H_301_10@ printError("ERRORsome thing wrong please check Register") @H_301_10@ end @H_301_10@ @H_301_10@ @H_301_10@8.2Modebase
@H_301_10@local mvcBase =require("framework.cc.mvc.ModelBase") @H_301_10@8.3functions
@H_301_10@创建两个类Animal,Duck. @H_301_10@Iskindof函数用于判断对象是否属于指定的类。 @H_301_10@调用math相关函数等LUA相关的函数。 @H_301_10@ @H_301_10@ @H_301_10@ @H_301_10@ @H_301_10@ @H_301_10@ @H_301_10@ @H_301_10@ @H_301_10@9.framework.socketTcp
@H_301_10@ local items = { @H_301_10@ "Connect", @H_301_10@ "SendData", @H_301_10@ "Close" @H_301_10@} @H_301_10@Init函数创建一个SocketTCP对象。并添加SocketTCP相关的事件 @H_301_10@EVENT_DATA @H_301_10@EVENT_CLOSE @H_301_10@EVENT_CLOSED @H_301_10@EVENT_CONNECTED @H_301_10@EVENT_CONNECT_FAILURE @H_301_10@9.1Connect
@H_301_10@链接127.0.0.1。9.2SendData
@H_301_10@向Socket发送信息。9.3Close
@H_301_10@关闭Socket 对象。 @H_301_10@10.framework.timer
@H_301_10@创建一个定时器 @H_301_10@if self.timer_ then @H_301_10@ return @H_301_10@ end @H_301_10@ @H_301_10@ local Timer = require("framework.cc.utils.Timer") @H_301_10@ local appTimer = Timer.new() @H_301_10@ @H_301_10@ -- 响应 CITYHALL_UPGRADE_TIMER 事件 @H_301_10@ local function onCityHallUpgradeTimer(event) @H_301_10@ if event.countdown > 0 then @H_301_10@ -- 倒计时还未结束,更新用户界面上显示的时间 @H_301_10@ print("timer counting") @H_301_10@ else @H_301_10@ -- 倒计时已经结束,更新用户界面显示升级后的城防大厅 @H_301_10@ print("timer over") @H_301_10@ end @H_301_10@ end @H_301_10@ @H_301_10@ -- 注册事件 @H_301_10@ appTimer:addEventListener("CITYHALL_UPGRADE_TIMER",onCityHallUpgradeTimer) @H_301_10@ -- 城防大厅升级需要 3600 秒,每 30 秒更新一次界面显示 @H_301_10@ appTimer:addCountdown("CITYHALL_UPGRADE_TIMER",600,10) @H_301_10@ @H_301_10@ appTimer:start() @H_301_10@ @H_301_10@ self.timer_ = appTimer @H_301_10@ @H_301_10@addCountdown命令 @H_301_10@11.framework.gamestate
@H_301_10@初始化函数如下: @H_301_10@ local stateListener = function(event) @H_301_10@ if event.errorCode then @H_301_10@ print("ERROR,load:" .. event.errorCode) @H_301_10@ return @H_301_10@ end @H_301_10@ @H_301_10@ if "load" == event.name then @H_301_10@ local str = crypto.decryptXXTEA(event.values.data,"scertKey") @H_301_10@ local gameData = json.decode(str) @H_301_10@ dump(gameData,"gameData:") @H_301_10@ elseif "save" == event.name then @H_301_10@ local str = json.encode(event.values) @H_301_10@ if str then @H_301_10@ str = crypto.encryptXXTEA(str, "scertKey") @H_301_10@ returnValue = {data = str} @H_301_10@ else @H_301_10@ print("ERROR,encode fail") @H_301_10@ return @H_301_10@ end @H_301_10@ @H_301_10@ return {data = str} @H_301_10@ end @H_301_10@ end @H_301_10@ @H_301_10@ gameState.init(stateListener,"gameState.dat","keyHTL") @H_301_10@ @H_301_10@保存游戏状态之用。 @H_301_10@分别调用gameState.load()和gameState.save(data)函数。 @H_301_10@12.framework.transition
@H_301_10@创建10个金币,分别执行不同的动作。 @H_301_10@创建两个grossini_blue_,一个运行动作一次,另一个永久运行。13.framework.nvgdrawnode
@H_301_10@--nvgdraw绘画函数 @H_301_10@local quarLB = cc.p(display.cx/2,display.cy/2) @H_301_10@ local quarRT = cc.p(display.width - quarLB.x,display.height- quarLB.y) @H_301_10@ @H_301_10@ local drawNode1 = cc.NVGDrawNode:create() @H_301_10@ self:addChild(drawNode1) @H_301_10@ drawNode1:drawPoint(cc.p(display.cx - 100,display.cy),cc.c4f(1,0, 1)) @H_301_10@ @H_301_10@ local points = {} @H_301_10@ for i=1,10 do @H_301_10@ points[i] = cc.p(display.width/10*i,10) @H_301_10@ end @H_301_10@ local drawNode2 = cc.NVGDrawNode:create():addTo(self) @H_301_10@ drawNode2:drawPoints(points,cc.c4f(0,1, 1)) @H_301_10@ @H_301_10@ local drawNode3 = cc.NVGDrawNode:create() @H_301_10@ self:addChild(drawNode3) @H_301_10@ drawNode3:drawLine(quarLB,quarRT, 1)) @H_301_10@ @H_301_10@ local drawNode4 = cc.NVGDrawNode:create() @H_301_10@ self:addChild(drawNode4) @H_301_10@ drawNode4:drawRect(quarLB, 1)) @H_301_10@ @H_301_10@ points = {} @H_301_10@ points[1] = cc.p(100, 200) @H_301_10@ points[2] = cc.p(100, 100) @H_301_10@ points[3] = cc.p(200, 100) @H_301_10@ points[4] = cc.p(300, 150) @H_301_10@ local drawNode5 = cc.NVGDrawNode:create() @H_301_10@ self:addChild(drawNode5) @H_301_10@ drawNode5:drawPolygon(points,4,true, 1,1)) @H_301_10@ @H_301_10@ local drawNode6 = cc.NVGDrawNode:create() @H_301_10@ self:addChild(drawNode6) @H_301_10@ drawNode6:drawCircle(cc.p(display.cx,20, 1)) @H_301_10@ @H_301_10@ local drawNode7 = cc.NVGDrawNode:create() @H_301_10@ self:addChild(drawNode7) @H_301_10@ drawNode7:drawQuadBezier(quarLB,cc.p(quarRT.x, quarLB.y),1)) @H_301_10@ @H_301_10@ local drawNode8 = cc.NVGDrawNode:create() @H_301_10@ self:addChild(drawNode8) @H_301_10@ drawNode8:drawCubicBezier(cc.p(300,400),cc.p(350,500),cc.p(500,300),cc.p(600,cc.c4f(0.5, 1)) @H_301_10@ @H_301_10@ local drawNode9 = cc.NVGDrawNode:create() @H_301_10@ self:addChild(drawNode9) @H_301_10@ drawNode9:drawDot(cc.p(display.cx,5,0.5, 1)) @H_301_10@ @H_301_10@ local drawNode10 = cc.NVGDrawNode:create() @H_301_10@ self:addChild(drawNode10) @H_301_10@ drawNode10:setColor(cc.c4f(1, 1)) @H_301_10@ drawNode10:drawSolidRect(cc.p(330,120),cc.p(430,220), 1)) @H_301_10@ @H_301_10@ points = {} @H_301_10@ points[1] = cc.p(500, 400) @H_301_10@ points[2] = cc.p(600, 400) @H_301_10@ points[3] = cc.p(550, 500) @H_301_10@ local drawNode11 = cc.NVGDrawNode:create() @H_301_10@ self:addChild(drawNode11) @H_301_10@ drawNode11:drawSolidPolygon(points,3, 1)) @H_301_10@ @H_301_10@ local drawNode12 = cc.NVGDrawNode:create() @H_301_10@ self:addChild(drawNode12) @H_301_10@ drawNode12:setFill(true) @H_301_10@ drawNode12:setFillColor(cc.c4f(1, 1)) @H_301_10@ drawNode12:drawArc(cc.p(50,200),50, 30,200, 0.5,1)) @H_301_10@ @H_301_10@ local points = {} @H_301_10@ points[1] = cc.p(10, 300) @H_301_10@ points[2] = cc.p(200, 320) @H_301_10@ points[3] = cc.p(180, 350) @H_301_10@ points[4] = cc.p(220, 410) @H_301_10@ local drawNode13 = cc.NVGDrawNode:create() @H_301_10@ self:addChild(drawNode13) @H_301_10@ drawNode13:setLineWidth(4) @H_301_10@ drawNode13:setColor(cc.c4f(0, 1))drawNode13:drawSolidPolygon(points, 1))
14.相关函数
14.1device
当框架初始完成后,device 模块提供下列属性:
@H_301_10@·device.platform 返回当前运行平台的名字,可用值: ios,android,mac,windows. @H_301_10@·device.model 返回设备型号,可用值: unknown,iphone,ipad @H_301_10@·device.language 返回设备当前使用的语言,可用值: @H_301_10@o cn:中文 @H_301_10@o fr:法语 @H_301_10@o it:意大利语 @H_301_10@o gr:德语 @H_301_10@o sp:西班牙语 @H_301_10@o ru:俄语 @H_301_10@o jp:日语 @H_301_10@o en:英语 @H_301_10@·device.writablePath 返回设备上可以写入数据的首选路径: @H_301_10@o iOS 上返回应用程序所在的 Documents 目录 @H_301_10@o Android 上返回存储卡的根目录 @H_301_10@o 其他平台的返回值由 quick-x-player 决定 @H_301_10@·device.cachePath 返回设备上可以写入数据的缓存目录: @H_301_10@o iOS 上返回应用程序所在的 Library/Caches 目录 @H_301_10@o 其他平台的返回值同 device.writablePath @H_301_10@·device.directorySeparator 目录分隔符,在 Windows 平台上是 “\”,其他平台都是 “/” @H_301_10@·device.pathSeparator 路径分隔符,在 Windows 平台上是 “;”,其他平台都是 “:” Functions |
显示活动指示器 |
隐藏正在显示的活动指示器 |
显示一个包含按钮的弹出对话框 |
取消正在显示的对话框。 |
返回设备的 OpenUDID 值 |
用浏览器打开指定的网址 |
14.2display
display 模块封装了绝大部分与显示有关的功能,并负责根据 config.lua 中定义的分辨率设定计算屏幕的设计分辨率。
框架初始化后,display 模块提供下列属性:
@H_301_10@·display.sizeInPixels.width, @H_301_10@·display.sizeInPixels.height屏幕的像素分辨率 @H_301_10@·display.widthInPixels, @H_301_10@·display.heightInPixels 屏幕的像素分辨率 @H_301_10@·display.contentScaleFactor 内容缩放因子 @H_301_10@·display.size.width, @H_301_10@·display.size.height 屏幕的设计分辨率 @H_301_10@·display.width, @H_301_10@·display.height 屏幕的设计分辨率 @H_301_10@·display.cx, @H_301_10@·display.cy 屏幕中央的 x 坐标和 y 坐标 @H_301_10@·display.left, @H_301_10@·display.top, @H_301_10@·display.right, @H_301_10@·display.bottom 屏幕四边的坐标 @H_301_10@·display.c_left, @H_301_10@·display.c_top, @H_301_10@·display.c_right, @H_301_10@·display.c_bottom 当父对象在屏幕中央时,屏幕四边的坐标14.3network.createHTTPRequest()
network.createHTTPRequest(callback,url,method)
创建异步 HTTP 请求,并返回 cc.HTTPRequest 对象。
function onRequestFinished(event)
local"completed"ok = (event.name ==)
localrequest = event.request
ifnotthenok
-- 请求失败,显示错误代码和错误消息
print(request:getErrorCode(),request:getErrorMessage())
return
end
localcode = request:getResponseStatusCode()
if200thencode ~=
-- 请求结束,但没有返回 200 响应代码
print(code)
return
end
-- 请求成功,显示服务端返回的内容
localresponse = request:getResponseString()
print(response)
end
-- 创建一个请求,并以 POST 方式发送数据到服务端
local"http://www.mycompany.com/request.PHP"url =
local"POST"request = network.createHTTPRequest(onRequestFinished,)
"KEY""VALUE"request:addPOSTValue(,)
-- 开始请求。当请求完成时会调用 callback() 函数
request:start()
Returns
@H_301_10@·HTTPRequest 结果 原文链接:https://www.f2er.com/cocos2dx/343877.html