quick-cocos2d-x 学习系列之十四 测试用例_第1页
quick-cocos2d-x 学习系列之十四 测试用例_第2页
quick-cocos2d-x 学习系列之十四 测试用例_第3页
quick-cocos2d-x 学习系列之十四 测试用例_第4页
quick-cocos2d-x 学习系列之十四 测试用例_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

quick-cocos2d-x学习系列之十四测试用例 定义变量,创建13个场景名字localitems={"framework.helper","framework.native","framework.display","framework.crypto","work","framework.luabinding","framework.event","erface","framework.socketTcp","framework.timer","framework.gamestate","framework.transition","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单词的函数。framework.helper调用game.createMenu函数增加menu.(这也是为什么该函数放在game.lua文件上的原因了)回调函数为runtest函数。该函数所有场景类均一致。该例加载config.lua文件。framework.native包含7个items,localitems={addImageAsync异步加载图片display.addImageAsync("Coin0001.png",function(event,texture)printf("display.addImageAsync(\"Coin0001.png\")-event=%s,texture=%s",tostring(event),tostring(texture))self.coin=display.newSprite("Coin0001.png",display.left+100,display.cy)self:addChild(self.coin)end)加载完毕后调用函数,显示图片到场景中。scale9Sprite通过命令newScale9Sprite,创建图片GreenButton.png创建精灵设置精灵范围最后设置fadeout和fadein.tilesSprite通过如下命令创建一个图片组成的tilesprite,密集恐惧症的小朋友要慎入。self.tilesSprite_=display.newTilesSprite("close.png",cc.rect(10,10,100,100)):pos(display.left+10,display.bottom+10):addTo(self)tiledBatchNode代码如下:localcb=function(plist,image)self.tiledBatchNode_=display.newTiledBatchNode("#blocks9.png","blocks9ss.png",cc.size(170,170),10,10):pos(display.left+10,display.bottom+150):addTo(self)enddisplay.addSpriteFrames("blocks9ss.plist","blocks9ss.png",cb)加载图片到帧,然后调用函数cb.其中函数display.addSpriteFrames()display.addSpriteFrames(plistFilename,image,handler)将指定的SpriteSheets材质文件及其数据文件载入图像帧缓存。格式:display.addSpriteFrames(数据文件名,材质文件名)12345678<br>--同步加载纹理display.addSpriteFrames("Sprites.plist","Sprites.png")

--异步加载纹理localcb=function(plist,image)

--dosomethingenddisplay.addSpriteFrames("Sprites.plist","Sprites.png",cb)SpriteSheets通俗一点解释就是包含多张图片的集合。SpriteSheets材质文件由多张图片组成,而数据文件则记录了图片在材质文件中的位置等信息。Parametersstring

plistFilename

数据文件名string

image

材质文件名drawNode初始化了一个node节点,进行画图。一个实心圆,一个空心圆,一个方形,一个直线,一个三角型。progress创建一个原型的进度条localprogress=display.newProgressTimer("Coin0001.png",display.PROGRESS_TIMER_RADIAL):pos(100,100):addTo(self)progress:setPercentage(60)gressNode_=progresslayerMultiTouch创建一个新的Layer.为其增加监听,回调函数为onTouch函数。onTouch函数实现多点触摸。framework.cryptolocalitems={"AES256","XXTEA","Base64","MD5File","MD5",}AES256进行AES256加密解密操作。XXTEAXXTEA加密,如下代码:localp="Test123"localk="KEYKEY"localc=crypto.encryptXXTEA(p,k)printf("source:%s",p)printf("encryptXXTEA:%s",bin2hex(c))printf("decryptXXTEA:%s",crypto.decryptXXTEA(c,k))localp=string.rep("HELLO",15)localk="keykey"localc=crypto.encryptXXTEA(p,k)printf("source:%s",p)printf("encryptXXTEA:%s",bin2hex(c))printf("decryptXXTEA:%s",crypto.decryptXXTEA(c,k))Base64Base64加密解密操作。同XXTEA。MD5FileMD5算法,对文件进行md5计算,代码如下localfile=cc.FileUtils:getInstance():fullPathForFilename("config.lua")printf("md5filetest:%s->%s",file,crypto.md5file(file))MD5对字符串进行MD5计算,如下代码:localp=string.rep("HELLO",5)printf("md5Test:%s->%s",p,crypto.md5(p))worklocalitems={"createHTTPRequest","createHTTPRequestBadDomain","senddatatoserver","isLocalWiFiAvailable","isInternetConnectionAvailable","isHostNameReachable","getInternetConnectionStatus",}其中onResponse函数处理HTTP相关事件。如果事件不是progress则报错,如果是competeled则获取数据长度,如果dumpResponse为true则打印String。其他则打印”----------------------------------”。createHTTPRequestlocalurl="/feed/"self.requestCount=self.requestCount+1localindex=self.requestCountlocalrequest=network.createHTTPRequest(function(event)iftolua.isnull(self)thenprintf("REQUEST%dCOMPLETED,BUTSCENEHASQUIT",index)returnendself:onResponse(event,index)end,url,"GET")printf("REQUESTSTART%d",index)request:start()见14.3中对createHTTPRequest函数的解释createHTTPRequestBadDomain代码同上,只是连接到一个不存在的HTTP地址上去。senddatatoserver通过POST命令,发送数据到SERVER。isLocalWiFiAvailable判断本地WIFI是否可用。isInternetConnectionAvailable判断网连接是否可用。isHostNameReachable判断一个网址是否可达。getInternetConnectionStatus通过network.getInternetConnectionStatus()命令,判断互联网、WIFI、3G网络是否可用。framework.luabindinglocalitems={"avoidPeertableGC","getCppFunction",}avoidPeertableGClocalnode=display.newNode()node:addNodeEventListener(cc.NODE_EVENT,function(event)printf("nodeevent%s",)end)node.customVar=1node:setTag(1)self:addChild(node)printf("1.node.customVar=%s,expected=1",tostring(node.customVar))--1collectgarbage()collectgarbage()printf("2.node.customVar=%s,expected=1",tostring(node.customVar))--1self:performWithDelay(function()printf("3.node.customVar=%s,expected=1",tostring(self:getChildByTag(1).customVar))--1localnode2=self:getChildByTag(1)collectgarbage()collectgarbage()printf("4.node.customVar=%s,expected=1",tostring(node2.customVar))--1self:removeChildByTag(1)printf("5.node=%s,expected=nil",tostring(self:getChildByTag(1)))--nilprintf("6.node.customVar=%s,expected=nil",tostring(node2.customVar))--nilend,1.0)getCppFunction--overrideC++classmethodfunctioncc.Node:setPosition(x,y)printf("cc.Node:setPosition(%0.2f,%0.2f)",x,y)--calloriginC++methodlocalcfunction=tolua.getcfunction(cc.Node,"setPosition")cfunction(self,x,y)endlocalnode=display.newNode()self:addChild(node)print("expected'cc.Node:setPosition(100.00,100.00)'")node:setPosition(100,100)--cc.Node:setPosition(100.00,100.00)localx,y=node:getPosition()printf("x,y=%0.2f,%0.2f,expected100.00,100.00",x,y)--restoreC++methodcc.Node.setPosition=tolua.getcfunction(cc.Node,"setPosition")print("expected-nooutput")node:setPosition(100,100)重写C++类函数,并重新加载函数。framework.eventlocalitems={"addEventListener","removeEventListener","removeAllListener","removeCoin","sendEvent"}先进行初始化,创建node增加图片Coin0001.png.增加事件监听EventTest1,EventTest2addEventListener为代理事件增加事件监听EventTest3,EventTest4。self.eventProxy:addEventListener("EventTest3",function(event)print("eventlistener3")dump(event)end,"tag3")self.eventProxy:addEventListener("EventTest4",function(event)print("eventlistener4")dump(event)end)removeEventListener移除事件EventTest1,EventTest2,EventTest3.通过三种不同的方法如下:self.eventProxy:removeEventListener(self.eventHandle2)localeventHandle1=self.eventProxy:getEventHandle("EventTest1")self.eventProxy:removeEventListener(eventHandle1)self.eventProxy:removeAllEventListenersForEvent("EventTest3")removeAllListener移除所有监听程序。removeCoin移除coin精灵,当coin移除的时候添加的事件监听程序也消失。sendEvent分发EventTest事件。事件名字EventTest1,EventTest2,EventTest3,EventTerfacelocalitems={"register","modebase","functions"}主要是3个常用接口。Registerlocalregister=require("framework.cc.Registry")localeventProtocol=register.newObject("components.behavior.EventProtocol")--创建一个事件协议对象。register.setObject(eventProtocol,"cryptoTest1") ifnotregister.isObjectExists("cryptoTest1")then printError("ERRORsomethingwrongpleasecheckRegister") end register.getObject("cryptoTest1") register.removeObject("cryptoTest1") ifregister.isObjectExists("cryptoTest1")then printError("ERRORsomethingwrongpleasecheckRegister") end ifnotregister.exists("components.behavior.EventProtocol")then printError("ERRORsomethingwrongpleasecheckRegister") endModebaselocalmvcBase=require("framework.cc.mvc.ModelBase")functions创建两个类Animal,Duck.Iskindof函数用于判断对象是否属于指定的类。调用math相关函数等LUA相关的函数。framework.socketTcplocalitems={"Connect","SendData","Close"}Init函数创建一个SocketTCP对象。并添加SocketTCP相关的事件EVENT_DATAEVENT_CLOSEEVENT_CLOSEDEVENT_CONNECTEDEVENT_CONNECT_FAILUREConnect链接。SendData向Socket发送信息。Close关闭Socket对象。framework.timer创建一个定时器ifself.timer_thenreturnend localTimer=require("framework.cc.utils.Timer")localappTimer=Timer.new()--响应CITYHALL_UPGRADE_TIMER事件localfunctiononCityHallUpgradeTimer(event)ifevent.countdown>0then--倒计时还未结束,更新用户界面上显示的时间print("timercounting")else--倒计时已经结束,更新用户界面显示升级后的城防大厅print("timerover")endend--注册事件appTimer:addEventListener("CITYHALL_UPGRADE_TIMER",onCityHallUpgradeTimer)--城防大厅升级需要3600秒,每30秒更新一次界面显示appTimer:addCountdown("CITYHALL_UPGRADE_TIMER",600,10)appTimer:start()self.timer_=appTimeraddCountdown命令framework.gamestate初始化函数如下: localstateListener=function(event) ifevent.errorCodethen print("ERROR,load:"..event.errorCode) return end if"load"==then localstr=crypto.decryptXXTEA(event.values.data,"scertKey")localgameData=json.decode(str)dump(gameData,"gameData:") elseif"save"==then localstr=json.encode(event.values)ifstrthenstr=crypto.encryptXXTEA(str,"scertKey")returnValue={data=str}else print("ERROR,encodefail")returnend return{data=str} end end gameState.init(stateListener,"gameState.dat","keyHTL")保存游戏状态之用。分别调用gameState.load()和gameState.save(data)函数。framework.transition创建10个金币,分别执行不同的动作。创建两个grossini_blue_,一个运行动作一次,另一个永久运行。framework.nvgdrawnode--nvgdraw绘画函数localquarLB=cc.p(display.cx/2,display.cy/2) localquarRT=cc.p(display.width-quarLB.x,display.height-quarLB.y) localdrawNode1=cc.NVGDrawNode:create() self:addChild(drawNode1) drawNode1:drawPoint(cc.p(display.cx-100,display.cy),cc.c4f(1,0,0,1)) localpoints={} fori=1,10do points[i]=cc.p(display.width/10*i,10) end localdrawNode2=cc.NVGDrawNode:create():addTo(self) drawNode2:drawPoints(points,10,cc.c4f(0,1,0,1))localdrawNode3=cc.NVGDrawNode:create() self:addChild(drawNode3)drawNode3:drawLine(quarLB,quarRT,cc.c4f(0,0,1,1))localdrawNode4=cc.NVGDrawNode:create() self:addChild(drawNode4)drawNode4:drawRect(quarLB,quarRT,cc.c4f(1,1,0,1)) points={} points[1]=cc.p(100,200) points[2]=cc.p(100,100) points[3]=cc.p(200,100) points[4]=cc.p(300,150) localdrawNode5=cc.NVGDrawNode:create() self:addChild(drawNode5)drawNode5:drawPolygon(points,4,true,cc.c4f(0,1,1,1)) localdrawNode6=cc.NVGDrawNode:create() self:addChild(drawNode6) drawNode6:drawCircle(cc.p(display.cx,display.cy),20,cc.c4f(1,0,1,1))localdrawNode7=cc.NVGDrawNode:create() self:addChild(drawNode7)drawNode7:drawQuadBezier(quarLB,cc.p(quarRT.x,quarLB.y),quarRT,cc.c4f(1,1,1,1)) localdrawNode8=cc.NVGDrawNode:create() self:addChild(drawNode8)drawNode8:drawCubicBezier(cc.p(300,400),cc.p(350,500),cc.p(500,300),cc.p(600,400),cc.c4f(0.5,0,0,1))localdrawNode9=cc.NVGDrawNode:create() self:addChild(drawNode9)drawNode9:drawDot(cc.p(display.cx,display.cy),5,cc.c4f(0,0.5,0,1))localdrawNode10=cc.NVGDrawNode:create() self:addChild(drawNode10) drawNode10:setColor(cc.c4f(1,1,1,1))drawNode10:drawSolidRect(cc.p(330,120),cc.p(430,220),cc.c4f(0,0,0.5,1))points={} points[1]=cc.p(500,400) points[2]=cc.p(600,400) points[3]=cc.p(550,500) localdrawNode11=cc.NVGDrawNode:create() self:addChild(drawNode11)drawNode11:drawSolidPolygon(points,3,cc.c4f(0.5,0.5,0,1))localdrawNode12=cc.NVGDrawNode:create() self:addChild(drawNode12) drawNode12:setFill(true) drawNode12:setFillColor(cc.c4f(1,1,1,1))drawNode12:drawArc(cc.p(50,200),50,30,200,1,cc.c4f(0,0.5,0.5,1)) localpoints={} points[1]=cc.p(10,300) points[2]=cc.p(200,320) points[3]=cc.p(180,350) points[4]=cc.p(220,410) localdrawNode13=cc.NVGDrawNode:create() self:addChild(drawNode13)drawNode13:setLineWidth(4)drawNode13:setColor(cc.c4f(0,0.5,0.5,1))drawNode13:drawSolidPolygon(points,4,cc.c4f(0.5,0,0.5,1))相关函数device提供设备相关属性的查询,以及设备功能的访问当框架初始完成后,device模块提供下列属性:device.platform返回当前运行平台的名字,可用值:ios,android,mac,windows.device.model返回设备型号,可用值:unknown,iphone,ipaddevice.language返回设备当前使用的语言,可用值:cn:中文fr:法语it:意大利语gr:德语sp:西班牙语ru:俄语jp:日语en:英语device.writablePath返回设备上可以写入数据的首选路径:iOS上返回应用程序所在的Documents目录Android上返回存储卡的根目录其他平台的返回值由quick-x-player决定device.cachePath返回设备上可以写入数据的缓存目录:iOS上返回应用程序所在的Library/Caches目录其他平台的返回值同device.writablePathdevice.directorySeparator目录分隔符,在Windows平台上是“\”,其他平台都是“/”device.pathSeparator路径分隔符,在Windows平台上是“;”,其他平台都是“:”Functionsdevice.showActivityIndicator()显示活动指示器device.hideActivityIndicator()隐藏正在显示的活动指示器device.showAlert(title,

message,

buttonLabels,

listener)显示一个包含按钮的弹出对话框device.cancelAlert()取消正在显示的对话框。device.getOpenUDID()返回设备的OpenUDID值HYPERLINK"/article/index?type=quick_api&url=/doc/api_quick/device.h

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论