cocos2d-x的helloLua例子函数名定义误导初学者
初次研究cocos2d-x,
cocos2d-x支持lua是一个很不错的功能,使用lua来开发有个最大的好处就是不用每次改了游戏代码都编译,大多数情况下改了脚本直接运行程序就可以了,发布更新时也不用更新主程序。
同时也有个弊端,就是有能像vc那样加断点,所以为了debug方便,仅仅用控制台输出是不够的,如果能把日志保存下来并且有颜色区分,信息过略自然更好。
我的想法是用debugview来捕获cocos2d-x项目的debug信息。。
于是今天就研究了一下HelloLua这个例子,它是用控制台输出信息的,显示不能满足我的要求。。有没有办法通过lua的调用打印debug信息呢?
打开"..\samples\Lua\HelloLua\Resources"下的hello.lua文件
- -- for CCLuaEngine traceback
- function __G__TRACKBACK__(msg)
- print("----------------------------------------")
- print("LUA ERROR: " .. tostring(msg) .. "\n")
- print(debug.traceback())
- print("----------------------------------------")
- end
- local function main()
- -- avoid memory leak
- collectgarbage("setpause", )
- collectgarbage("setstepmul", )
- local cclog = function(...)
- print(string.format(...))
end- require "hello2"
- cclog("result is " .. myadd(, ))
- --------(后面代码非重点,忽略。。。)-------
end- xpcall(main, __G__TRACKBACK__)
发现控制台里面的信息是用cclog来输出的,可是我怎么用debugview捕获不了呢?
找了许久,找到了cocos2d-x和lua的关键字映射源码“\scripting\lua\cocos2dx_support\LuaCocos2d.cpp”,搜索了一下,只搜到了"CCLuaLog"函数,怎么都搜不到cclog。。
用CCLuaLog在lua里面试了一下,可以捕获到debug信息,可为什么用cclog不行呢?在vc里面试一下cclog也是可以捕获到的。。
这时我怀疑lua里面调用的cclog可能是重写过的,因为CCLuaLog不支持"..."参数,正在百思不解的时候,我又重新仔细看了一下hello.lua脚本,这时才发现我犯傻了。。
- local cclog = function(...)
- print(string.format(...))
- end
其实cclog只是在lua里面自定义的输出函数。。。只是把名字取为cclog,我的个去。。。
如果想要输出debug信息,只是需要把这段代码改为如下代码即可:
- local cclog = function(...)
- CCLuaLog("cocos2dx-->"..string.format(...))
- end
cocos2d-x的helloLua例子函数名定义误导初学者的更多相关文章
- php function 定义时函数名前加&符号的意义
看了很多帖子,但是都不能理解,又去看了很多资料,终于名白了.记下备忘. 问题:php在声明函数时,函数名前面的&符号有什么用? 一直想不通.很多帖子说类似于变量的$a=&$b,但是$b ...
- 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针
您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. ...
- JS函数 函数调用 函数定义好后,是不能自动执行的,需要调用它,直接在需要的位置写函数名。
函数调用 函数定义好后,是不能自动执行的,需要调用它,直接在需要的位置写函数名. 第一种情况:在<script>标签内调用. <script type="text/java ...
- C++ 回调函数的定义与用法
一回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理.用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义呢?它和其它函数(比如钩子函 ...
- C/C++函数调用的几种方式及函数名修饰规则以及c++为什么不允许重载仅返回类型不同的函数
我们知道,调用函数时,计算机常用栈来存放函数执行需要的参数,由于栈的空间大小是有限的,在windows下栈是向低地址扩展的数据结构,是一块连续的内存区域.这句话的意思是栈顶的地址和栈的最大容量是系统预 ...
- C++编译器的函数名修饰规则
我们知道在C++中有函数重载这样一个东西,当我们定义了几个功能类似且函数名是一样的函数的时候,只要它的参数列表不同,编译是可以通过的,但是在C中是不可以的. double add(double a, ...
- C语言函数名与函数指针详解
一.通常的函数调用 一个通常的函数调用的例子: /* 自行包含头文件 */ void MyFun(int x); /* 此处的声明也可写成:void MyFun(int) */ int main(in ...
- 在C语言中以编程的方式获取函数名
仅仅为了获取函数名,就在函数体中嵌入硬编码的字符串,这种方法单调乏味还易导致错误,不如看一下怎样使用新的C99特性,在程序运行时获取函数名吧. 对象反射库.调试工具及代码分析器,经常会需要在运行时访问 ...
- Python函数的定义、参数传入与函数的调用
作为计算机代码的一种抽象方式,函数在Python中扮演了极为重要的角色.今天给大家介绍Python函数的定义.参数的传入以及调用方式.其中函数参数的传入方式为本节重点内容.Python函数的参数形式包 ...
随机推荐
- unity3d与eclipse集成开发android应用
原地址:http://blog.csdn.net/armoonwei/article/details/7032537 Unity as a Library Once you have eclipse ...
- java thread类和runable
java thread 类其实和其他类是一样的.有自己的属性和方法.以及有一个重写的run方法 不同的是:必须重写run()方法. run()方法是线程thread启动后cpu调用运行的程序代码. r ...
- javascript数据变量类型判断(JS变量是否是数组,是否是函数的判断)
function isArray(o) { return Object.prototype.toString.apply(o) === “[object Array]”;}function isFun ...
- vs2015 打不开了 提示"CSharpPackage",未能正确加载xx包
原文:vs2015 打不开了 提示"CSharpPackage" 最近发现vs2015 在新建项目和加载现有项目的时候会报错 提示 开始我以为是系统的问题导致vs 配置除了问题,重 ...
- SQL 两张结构一样的表合并查询 .
select * from table1 union all select * from table2 union all 是所有的都显示出来: select * from table1 union ...
- VS2012 Build相关
最近写了一个小程序,用到了一些关于build方面的内容,google后,记录一下 1. VS工程下的bin和obj文件夹,bin文件夹下的debug和release文件夹,以及其中的文件 大家可以参考 ...
- Redis文档
http://manual.csser.com/redis/connection/auth.html
- C++ 空类默认产生成员函数
class Empty { Empty(){...} //默认构造函数 ~Empty(){...} //默认析构函数 Empty(const Empty&){...} //拷贝构造函数 Emp ...
- js模仿jquery里的几个方法parent, parentUntil, children
有时工作需要, 也是接着上一章的方法, 用js模仿jquery里的几个方法parent, parentUntil, children. function parent(node){ return no ...
- POI根据EXCEL模板,修改内容导出新EXCEL (只支持HSSF)
package excelPoiTest; import java.io.File; import java.io.FileInputStream; import java.io.FileOutput ...