Lua脚本与游戏测试(二)

发表于:2016-3-15 15:19

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:testerhome    来源:51Testing软件测试网采编

  上一篇介绍了下lua和lua里打log的方式。
  本文主要还是基于客户端的,服务端其实也可以用lua,可以了解下云风的skynet框架,已经开源。
  与简悦合作的陌陌其中的游戏部门就是使用了这套框架在开发MMO,这里就不多介绍了,
  有兴趣的可以自行前往查看。
  题外话:最近在验收一些项目时,发现一些数据交互独立的地方,进行了拆分业务,这个没错,但拆分方式导致了同步问题,怪物和英雄分别在2个端计算不同的逻辑,然后战斗数据包单包转发,传输过程中不拆包,一些问题还是产生在业务层面上。
  回归正文,任何语言和测试的关系,首先测试读懂代码,了解语言的优势,这是第一步也是最基础的,lua标准库是第二步。
  实现C/C++对Lua脚本的调用 LuaScript.h
  markdown里没有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 这个容易发生问题的类型。
相关文章
Lua脚本与游戏测试(一)
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号