quick-cocos2d-x 学习系列之十四 测试用例

quick-cocos2d-x 学习系列之十四 测试用例,第1张

概述quick-cocos2d-x 学习系列之十四 测试用例                   定义变量,创建13个场景名字     local items = {         "framework.helper",         "framework.native",         "framework.display",         "framework.crypto",      

quick-cocos2d-x 学习系列之十四 测试用例

定义变量,创建13个场景名字

local items = {

"framework.helper",

"framework.native",

"framework.display",

"framework.crypto",

"framework.network",

"framework.luabinding",

"framework.event",

"framework.interface",

"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单词的函数。

1.framework.helper

调用game.createMenu函数增加menu.(这也是为什么该函数放在game.lua文件上的原因了)回调函数为runtest函数。该函数所有场景类均一致。

该例加载config.lua 文件。

2.framework.native

包含7个items,

local items = {

"activityIndicator",

"showAlert",

"openWebbrowser",

"callme",

"sendEmail",

"getinputText",

"vibrate",

}

@H_301_138@2.1activityIndicator

显示显示活动指示器,2秒后调用函数隐藏显示活动指示器,并停止调用函数。

@H_301_138@2.2showAlert

代码如下:

local function onbuttonClicked(event)

if event.buttonIndex == 1 then

print("玩家选择了 YES 按钮")

else

print("玩家选择了 NO 按钮")

end

end

device.showAlert("Confirm Exit","Are you sure exit game ?",{"YES","NO"},onbuttonClicked)

显示一个对话框。

@H_301_138@2.3openWebbrowser

打开浏览器如下图:

device.openURL("http://dualface.github.com")

@H_301_138@2.4callme

通过如下函数拨打电话:

device.openURL("tel:123-456-7890")

@H_301_138@2.5sendEmail

通过如下代码,打开设备上的邮件程序,并创建新邮件,填入收件人地址

local subject = string.urlencode("Hello")

local body = string.urlencode("How are you ?")

device.openURL(string.format("mailto:nobody@mycompany.com?subject=%s&body=%s",subject,body))

@H_301_138@2.6getinputText

获取输入信息

cc.Native:getinputText("information","How weight are you (KG)","60")

@H_301_138@2.7Vibrate

Vibrate 调用函数cc.Native:vibrate()实现振动。

3.framework.display

local items = {

"addImageAsync",

"scale9Sprite",

"tilessprite",

"tiledBatchNode",

"drawNode",

"progress",

"layerMultitouch"

}

@H_301_138@3.1addImageAsync

异步加载图片

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)

加载完毕后调用函数,显示图片到场景中。

@H_301_138@3.2scale9Sprite

通过命令newScale9Sprite,创建图片Greenbutton.png创建精灵

设置精灵范围最后设置fadeout和fadein.

@H_301_138@3.3tilessprite

通过如下命令创建一个图片组成的tilesprite,密集恐惧症的小朋友要慎入。

self.tilessprite_ = display.newTilessprite("close.png",cc.rect(10, 10,100,100))

:pos(display.left + 10,display.bottom+ 10)

:addTo(self)

@H_301_138@3.4tiledBatchNode

代码如下:

local cb = 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)

end

display.addSpriteFrames("blocks9ss.pList",cb)

加载图片到帧,然后调用函数cb.

其中函数display.addSpriteFrames()

display.addSpriteFrames(pListfilename,image,handler)

将指定的 Sprite Sheets 材质文件及其数据文件载入图像帧缓存。

格式:

display.addSpriteFrames(数据文件名,材质文件名)

1

2

3

4

5

6

7

8

<br>-- 同步加载纹理

display.addSpriteFrames("Sprites.pList","Sprites.png")

-- 异步加载纹理

local cb = function(pList,image)

-- do something

end

display.addSpriteFrames("Sprites.pList","Sprites.png",cb)

Sprite Sheets 通俗一点解释就是包含多张图片的集合。Sprite Sheets 材质文件由多张图片组成,而数据文件则记录了图片在材质文件中的位置等信息。

Parameters

·stringpListfilename数据文件名

·stringimage材质文件名

@H_301_138@3.5drawNode

初始化了一个node节点,进行画图。

一个实心圆,一个空心圆,一个方形,一个直线,一个三角型。

@H_301_138@3.6progress

创建一个原型的进度条

local progress = display.newProgresstimer("Coin0001.png",display.PROGRESS_TIMER_RADIAL)

:pos(100, 100)

:addTo(self)

progress:setPercentage(60)

self.progressNode_ = progress

@H_301_138@3.7layerMultitouch

创建一个新的Layer.为其增加监听,回调函数为ontouch函数。

ontouch函数实现多点触摸。

4.framework.crypto

local items = {

"AES256",

"XXTEA",

"Base64",

"MD5file",

"MD5",

}

@H_301_138@4.1AES256

进行AES256加密解密 *** 作。

@H_301_138@4.2XXTEA

XXTEA加密,如下代码:

local p = "Test123"

local k = "KEYKEY"

local c = crypto.encryptXXTEA(p,k)

printf("source: %s",p)

printf("encrypt XXTEA: %s",bin2hex(c))

printf("decrypt XXTEA: %s",crypto.decryptXXTEA(c, k))

local p = string.rep("HELLO",15)

local k = "keykey"

local c = crypto.encryptXXTEA(p, k))

@H_301_138@4.3Base64

Base64加密解密 *** 作。同XXTEA

@H_301_138@4.4MD5file

MD5算法,对文件进行md5计算,代码如下

local file = cc.fileUtils:getInstance():fullPathForfilename("config.lua")

printf("md5 file test: %s -> %s",file,crypto.md5file(file))

@H_301_138@4.5MD5

对字符串进行MD5计算,如下代码:

local p = string.rep("HELLO",5)

printf("md5Test: %s -> %s",p,crypto.md5(p))

5.framework.network

local items = {

"createhttpRequest",

"createhttpRequestBadDomain",

"send data to server",

"isLocalWiFiAvailable",

"isInternetConnectionAvailable",

"isHostnameReachable",

"getInternetConnectionStatus",

}

其中onResponse函数处理http相关事件。

如果事件不是progress则报错,如果是competeled则获取数据长度,如果dumpResponse为true则打印String。

其他则打印”----------------------------------”。

@H_301_138@5.1createhttpRequest

local url = "http://quick-x.com/Feed/"

self.requestCount = self.requestCount + 1

local index = self.requestCount

local request = network.createhttpRequest(function(event)

if tolua.isnull(self) then

printf("REQUEST %d COMPLETED,BUT SCENE HAS QUIT",index)

return

end

self:onResponse(event,index)

end, url,"GET")

printf("REQUEST START %d",index)

request:start()

见14.3中对createhttpRequest函数的解释

@H_301_138@5.2createhttpRequestBadDomain

代码同上,只是连接到一个不存在的http地址上去。

@H_301_138@5.3senddata to server

通过POST命令,发送数据到SERVER。

@H_301_138@5.4isLocalWiFiAvailable

判断本地WIFI是否可用。

@H_301_138@5.5isInternetConnectionAvailable

判断网连接是否可用。

@H_301_138@5.6isHostnameReachable

判断一个网址是否可达。

@H_301_138@5.7getInternetConnectionStatus

通过network.getInternetConnectionStatus()命令,判断互联网、WIFI、3G网络是否可用。

6.framework.luabinding

local items = {

"avoIDPeertableGC",

"getCppFunction",

}

@H_301_138@6.1avoIDPeertableGC

local node = display.newNode()

node:addNodeEventListener(cc.NODE_EVENT,function(event)

printf("node event %s",event.name)

end)

node.customVar = 1

node:setTag(1)

self:addChild(node)

printf("1. node.customVar = %s,expected = 1",tostring(node.customVar)) -- 1

collectgarbage()

collectgarbage()

printf("2. node.customVar = %s,tostring(node.customVar)) -- 1

self:performWithDelay(function()

printf("3. node.customVar = %s,tostring(self:getChildByTag(1).customVar)) -- 1

local node2 = self:getChildByTag(1)

collectgarbage()

collectgarbage()

printf("4. node.customVar = %s,tostring(node2.customVar)) -- 1

self:removeChildByTag(1)

printf("5. node = %s,expected = nil",tostring(self:getChildByTag(1))) -- nil

printf("6. node.customVar = %s,tostring(node2.customVar)) -- nil

end, 1.0)

@H_301_138@6.2getCppFunction

-- overrIDe C++ class method

function cc.Node:setposition(x,y)

printf("cc.Node:setposition(%0.2f,%0.2f)",x,y)

-- call origin C++ method

local cfunction = tolua.getcfunction(cc.Node,"setposition")

cfunction(self,y)

end

local node = 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)

local x,y = node:getposition()

printf("x,y = %0.2f,%0.2f,expected 100.00,100.00",y)

-- restoreC++ method

cc.Node.setposition = tolua.getcfunction(cc.Node,"setposition")

print("expected - no output")

node:setposition(100,100)

重写C++类函数,并重新加载函数。

7.framework.event

local items = {

"addEventListener",

"removeEventListener",

"removeAllListener",

"removeCoin",

"sendEvent"

}

先进行初始化,创建node增加图片Coin0001.png.

增加事件监听 EventTest1EventTest2

@H_301_138@7.1addEventListener

为代理事件增加事件监听 EventTest3EventTest4

self.eventProxy:addEventListener("EventTest3",function(event) print("event Listener 3") dump(event) end,"tag3")

self.eventProxy:addEventListener("EventTest4",function(event) print("event Listener 4") dump(event) end)

@H_301_138@7.2removeEventListener

移除事件EventTest1,EventTest2,EventTest3.

通过三种不同的方法如下:

self.eventProxy:removeEventListener(self.eventHandle2)

local eventHandle1 = self.eventProxy:getEventHandle("EventTest1")

self.eventProxy:removeEventListener(eventHandle1)

self.eventProxy:removeAllEventListenersForEvent("EventTest3")

@H_301_138@7.3removeAllListener

移除所有监听程序。

@H_301_138@7.4removeCoin

移除coin精灵,当coin移除的时候添加的事件监听程序也消失。

@H_301_138@7.5sendEvent

分发EventTest事件。

事件名字EventTest1,EventTest2,EventTest3,EventTest4.

8.framework.interface

local items = {

"register",

"modebase",

"functions"

}

主要是3个常用接口。

@H_301_138@8.1Register

local register =require("framework.cc.Registry")

local eventProtocol =register.newObject("components.behavior.EventProtocol")

--创建一个事件协议对象。

register.setobject(eventProtocol,"cryptoTest1")

if not register.isObjectExists("cryptoTest1") then

printError("ERRORsome thing wrong please check Register")

end

register.getobject("cryptoTest1")

register.removeObject("cryptoTest1")

if register.isObjectExists("cryptoTest1") then

printError("ERRORsome thing wrong please check Register")

end

if not register.exists("components.behavior.EventProtocol") then

printError("ERRORsome thing wrong please check Register")

end

@H_301_138@8.2Modebase

local mvcBase =require("framework.cc.mvc.ModelBase")

@H_301_138@8.3functions

创建两个类Animal,Duck.

Iskindof函数用于判断对象是否属于指定的类。

调用math相关函数等LUA相关的函数。

9.framework.socketTcp

local items = {

"Connect",

"SendData",

"Close"

}

Init函数创建一个SocketTCP对象。并添加SocketTCP相关的事件

EVENT_DATA

EVENT_CLOSE

EVENT_CLOSED

EVENT_CONNECTED

EVENT_CONNECT_FAILURE

@H_301_138@9.1Connect

链接127.0.0.1。

@H_301_138@9.2SendData

Socket发送信息。

@H_301_138@9.3Close

关闭Socket 对象。

10.framework.timer

创建一个定时器

if self.timer_ then

return

end

local Timer = require("framework.cc.utils.Timer")

local appTimer = Timer.new()

-- 响应 CITYHALL_UPGRADE_TIMER 事件

local function onCityHallUpgradeTimer(event)

if event.countdown > 0 then

-- 倒计时还未结束,更新用户界面上显示的时间

print("timer counting")

else

-- 倒计时已经结束,更新用户界面显示升级后的城防大厅

print("timer over")

end

end

-- 注册事件

appTimer:addEventListener("CITYHALL_UPGRADE_TIMER",onCityHallUpgradeTimer)

-- 城防大厅升级需要 3600 秒,每 30 秒更新一次界面显示

appTimer:addCountdown("CITYHALL_UPGRADE_TIMER",600,10)

appTimer:start()

self.timer_ = appTimer

addCountdown命令

11.framework.gamestate

初始化函数如下:

local stateListener = function(event)

if event.errorCode then

print("ERROR,load:" .. event.errorCode)

return

end

if "load" == event.name then

local str = crypto.decryptXXTEA(event.values.data,"scertKey")

local gameData = Json.decode(str)

dump(gameData,"gameData:")

elseif "save" == event.name then

local str = Json.encode(event.values)

if str then

str = crypto.encryptXXTEA(str, "scertKey")

returnValue = {data = str}

else

print("ERROR,encode fail")

return

end

return {data = str}

end

end

gameState.init(stateListener,"gameState.dat","keyHTL")

保存游戏状态之用。

分别调用gameState.load()和gameState.save(data)函数。

12.framework.Transition

创建10个金币,分别执行不同的动作。

创建两个grossini_blue_,一个运行动作一次,另一个永久运行。

13.framework.nvgdrawnode

--nvgdraw绘画函数

local quarLB = cc.p(display.cx/2,display.cy/2)

local quarRT = cc.p(display.wIDth - quarLB.x,display.height- quarLB.y)

local drawNode1 = cc.NVGDrawNode:create()

self:addChild(drawNode1)

drawNode1:drawPoint(cc.p(display.cx - 100,display.cy),cc.c4f(1,0, 1))

local points = {}

for i=1,10 do

points[i] = cc.p(display.wIDth/10*i,10)

end

local drawNode2 = cc.NVGDrawNode:create():addTo(self)

drawNode2:drawPoints(points,cc.c4f(0,1, 1))

local drawNode3 = cc.NVGDrawNode:create()

self:addChild(drawNode3)

drawNode3:drawline(quarLB,quarRT, 1))

local drawNode4 = cc.NVGDrawNode:create()

self:addChild(drawNode4)

drawNode4:drawRect(quarLB, 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)

local drawNode5 = cc.NVGDrawNode:create()

self:addChild(drawNode5)

drawNode5:drawpolygon(points,4,true, 1,1))

local drawNode6 = cc.NVGDrawNode:create()

self:addChild(drawNode6)

drawNode6:drawCircle(cc.p(display.cx,20, 1))

local drawNode7 = cc.NVGDrawNode:create()

self:addChild(drawNode7)

drawNode7:drawQuadBezIEr(quarLB,cc.p(quarRT.x, quarLB.y),1))

local drawNode8 = cc.NVGDrawNode:create()

self:addChild(drawNode8)

drawNode8:drawCubicBezIEr(cc.p(300,400),cc.p(350,500),cc.p(500,300),cc.p(600,cc.c4f(0.5, 1))

local drawNode9 = cc.NVGDrawNode:create()

self:addChild(drawNode9)

drawNode9:drawDot(cc.p(display.cx,5,0.5, 1))

local drawNode10 = cc.NVGDrawNode:create()

self:addChild(drawNode10)

drawNode10:setcolor(cc.c4f(1, 1))

drawNode10:drawSolIDRect(cc.p(330,120),cc.p(430,220), 1))

points = {}

points[1] = cc.p(500, 400)

points[2] = cc.p(600, 400)

points[3] = cc.p(550, 500)

local drawNode11 = cc.NVGDrawNode:create()

self:addChild(drawNode11)

drawNode11:drawSolIDpolygon(points,3, 1))

local drawNode12 = cc.NVGDrawNode:create()

self:addChild(drawNode12)

drawNode12:setFill(true)

drawNode12:setFillcolor(cc.c4f(1, 1))

drawNode12:drawArc(cc.p(50,200),50, 30,200, 0.5,1))

local points = {}

points[1] = cc.p(10, 300)

points[2] = cc.p(200, 320)

points[3] = cc.p(180, 350)

points[4] = cc.p(220, 410)

local drawNode13 = cc.NVGDrawNode:create()

self:addChild(drawNode13)

drawNode13:setlinewidth(4)

drawNode13:setcolor(cc.c4f(0, 1))

drawNode13:drawSolIDpolygon(points, 1))

14.相关函数 @H_301_138@14.1device

提供设备相关属性的查询,以及设备功能的访问

当框架初始完成后,device 模块提供下列属性:

·device.platform 返回当前运行平台的名字,可用值: ios,androID,mac,windows.

·device.model 返回设备型号,可用值: unkNown,iphone,ipad

·device.language 返回设备当前使用的语言,可用值:

o cn:中文

o fr:法语

o it:意大利语

o gr:德语

o sp:西班牙语

o ru:俄语

o jp:日语

o en:英语

·device.writablePath 返回设备上可以写入数据的首选路径:

o iOS 上返回应用程序所在的 documents 目录

o AndroID 上返回存储卡的根目录

o 其他平台的返回值由 quick-x-player 决定

·device.cachePath 返回设备上可以写入数据的缓存目录:

o iOS 上返回应用程序所在的 library/Caches 目录

o 其他平台的返回值同 device.writablePath

·device.directorySeparator 目录分隔符,在 windows 平台上是 “\”,其他平台都是 “/”

·device.pathSeparator 路径分隔符,在 windows 平台上是 “;”,其他平台都是 “:”

Functions

device.showActivityIndicator()

显示活动指示器

device.hideActivityIndicator()

隐藏正在显示的活动指示器

device.showAlert(title,message,buttonLabels,listener)

显示一个包含按钮的d出对话框

device.cancelAlert()

取消正在显示的对话框。

device.getOpenUDID()

返回设备的 OpenUDID

device.openURL(url)

用浏览器打开指定的网址

device.showInputBox(title,defaultValue)

显示一个输入框,并返回用户输入的内容。

@H_301_138@14.2display

与显示图像、场景有关的功能

display 模块封装了绝大部分与显示有关的功能,并负责根据 config.lua 中定义的分辨率设定计算屏幕的设计分辨率。

框架初始化后,display 模块提供下列属性:

·display.sizeInPixels.wIDth,

·display.sizeInPixels.height屏幕的像素分辨率

·display.wIDthInPixels,

·display.heightInPixels 屏幕的像素分辨率

·display.contentScaleFactor 内容缩放因子

·display.size.wIDth,

·display.size.height 屏幕的设计分辨率

·display.wIDth,

·display.height 屏幕的设计分辨率

·display.cx,

·display.cy 屏幕中央的 x 坐标和 y 坐标

·display.left,

·display.top,

·display.right,

·display.bottom 屏幕四边的坐标

·display.c_left,

·display.c_top,

·display.c_right,

·display.c_bottom 当父对象在屏幕中央时,屏幕四边的坐标

@H_301_138@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

·httpRequest 结果

总结

以上是内存溢出为你收集整理的quick-cocos2d-x 学习系列之十四 测试用例全部内容,希望文章能够帮你解决quick-cocos2d-x 学习系列之十四 测试用例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1050184.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存