lua与游戏测试(二)
2016-01-26 01:50
429 查看
接上一篇 来源我自己在testerhome文章lua与游戏测试(二)
上一篇介绍了下lua和lua里打log的方式。
本文主要还是基于客户端的,服务端其实也可以用lua,可以了解下云风的skynet框架,已经开源。
与简悦合作的陌陌其中的游戏部门就是使用了这套框架在开发MMO,这里就不多介绍了,
有兴趣的可以自行前往查看。
题外话:最近在验收一些项目时,发现一些数据交互独立的地方,进行了拆分业务,这个没错,但拆分方式导致了同步问题,怪物和英雄分别在2个端计算不同的逻辑,然后战斗数据包单包转发,传输过程中不拆包,一些问题还是产生在业务层面上。
实现C/C++对Lua脚本的调用 LuaScript.h
markdown里没有lua,先用ruby代替
这段是给做介绍的是公共的。
介绍下lua的类型有8个 Nil Booleans Strings Functions...
今天介绍nil,nil 用于区分数据和没有数据的值
测试中比较留意的界面层级的测试 CCLayer 用nil判断事件。
Nil 判断 touch事件
Nil 用于 函数的默认 没有数据的值
默认情况下,lua里所有的变量都指向nil
ChatSence 聊天场景
这里没有nil不会产生bug,local是局部变量,但如果在tables初始化后的其他地方定义了nil,就会导致bug。
关键测试点,lua所有未定义的变量使用起来都会返回nil,发现变量是需要被使用的,但出现了以下就是bug。
实际测试中看到抛错和读都不吃力,要写出来,还是整理思绪了一些时间。
看官可以去读下一些公司lua代码,本周就讲到这里,下周日 继续介绍函数类型Booleans 这个容易发生问题的类型。
上一篇介绍了下lua和lua里打log的方式。
本文主要还是基于客户端的,服务端其实也可以用lua,可以了解下云风的skynet框架,已经开源。
与简悦合作的陌陌其中的游戏部门就是使用了这套框架在开发MMO,这里就不多介绍了,
有兴趣的可以自行前往查看。
题外话:最近在验收一些项目时,发现一些数据交互独立的地方,进行了拆分业务,这个没错,但拆分方式导致了同步问题,怪物和英雄分别在2个端计算不同的逻辑,然后战斗数据包单包转发,传输过程中不拆包,一些问题还是产生在业务层面上。
回归正文,任何语言和测试的关系,首先测试读懂代码,了解语言的优势,这是第一步也是最基础的,lua标准库是第二步。
实现C/C++对Lua脚本的调用 LuaScript.hmarkdown里没有lua,先用ruby代替
#ifndef __LUA_SCRIPT_H__ #define __LUA_SCRIPT_H__ #include "GameDef.h" class CLuaScript { public: CLuaScript(); ~CLuaScript(); public: bool LoadScript(const char* szFileName); bool CallFunction(char* cFuncName, int nResults, char* cFormat, va_list vlist); bool CallFunction(const char* cFuncName, int nResults, char* cFormat, ...); private: void RegisterLuaLib(); --注册lua各种基础库 bool RegisterFunctions(TLua_Funcs Funcs[], int n); --将游戏接口注册到lua脚本 private: lua_State* m_LuaState; --state 脚本和C\C++交互 bool m_IsLoadScript; }; #endif
这段是给做介绍的是公共的。
公共库有很多段,还需要注册lua标准库和c++脚本接口
介绍下lua的类型有8个 Nil Booleans Strings Functions...今天介绍nil,nil 用于区分数据和没有数据的值
测试中比较留意的界面层级的测试 CCLayer 用nil判断事件。
Nil 判断 touch事件
function createMaskLayer( priority,touchRect ,touchCallback, layerOpacity,highRect) local layer = CCLayer:create() layer:setPosition(ccp(0, 0)) layer:setAnchorPoint(ccp(0, 0)) layer:setTouchEnabled(true) layer:setTouchPriority(priority or -1024) --默认权限 -1024 layer:registerScriptTouchHandler(function ( eventType,x,y ) if(eventType == "began") then if(touchRect == nil) then if(touchCallback ~= nil) then --判断事件状态,如果没有取到,则回调屏蔽层touch touchCallback() end return true else if(touchRect:containsPoint(ccp(x,y))) then return false else if(touchCallback ~= nil) then touchCallback() end return true end end end print(eventType) end,false, priority or -1024, true)
循环体还是很简单的,部分解释器可以检查,这里可以改变touchCallback ~= nil把 ~= nil去掉,就可以验证事件,至于层级会产生触摸抛错,不是这段可以解释的。
Nil 用于 函数的默认 没有数据的值默认情况下,lua里所有的变量都指向nil
ChatSence 聊天场景
require "script/network/RequestCenter" require "script/network/Network" require "script/libs/LuaCCLabel" local IMG_PATH = "images/chat/" -- 图片主路径 local m_layerSize = CCSizeMake(620,700) local m_chatGmLayer local m_chatGmLayerBg =nil --可以写nil也可以不写
这里没有nil不会产生bug,local是局部变量,但如果在tables初始化后的其他地方定义了nil,就会导致bug。
关键测试点,lua所有未定义的变量使用起来都会返回nil,发现变量是需要被使用的,但出现了以下就是bug。
lua:xx行: bad argument #参数 to '函数' (string expected, got nil)
实际测试中看到抛错和读都不吃力,要写出来,还是整理思绪了一些时间。
看官可以去读下一些公司lua代码,本周就讲到这里,下周日 继续介绍函数类型Booleans 这个容易发生问题的类型。
相关文章推荐
- Android之使用Http协议实现文件上传功能
- 我是运营,我没有假期
- 每个 Linux 游戏玩家都绝不想要的恼人体验
- mysql集群之MMM简单搭建
- 在 Fedora 上使用 Steam play 和 Proton 来玩 Windows 游戏
- Steam 让我们在 Linux 上玩 Windows 的游戏更加容易
- 如何使用 Steam Play 在 Linux 上玩仅限 Windows 的游戏
- 新一代iPad适配应用之游戏篇
- 通晓网络测试常用命令
- VB实现的《QQ美女找茬游戏》作弊器实例
- 详解Lua中的表的概念及其相关操作方法
- Lua编程示例(二):面向对象、metatable对表进行扩展
- 把Lua编译进nginx步骤方法
- Lua脚本自动生成APK包
- Lua中的元表(metatable)、元方法(metamethod)详解
- Lua中的metatable介绍
- Lua中ipair和pair的区别
- Lua中的函数精讲笔记
- 浅谈Lua的面向对象特性
- 详解Lua中的变量相关知识点