Lua中让回调函数支持回调对象方法的解决方法_Lua

在 Cocos2d-Lua 中,存在很多异步或延迟的操作,例如后台加载图片、等待一定时间执行代码等。这些功能的函数通常要求传入一个 function 作为参数。

复制代码 代码如下:

-- 在后台加载一个图像,加载完成后输出消息
display.addImageAsync("hello.png", function()
    print("load hello.png completed")
end)

但如果我们希望这种回调支持一个对象方法,就有点小困难了。因为 Lua 的对象方法在调用时需要使用 object:method() 形式,而回调是无法支持这种格式的。

好在 Lua 强大的闭包功能不但好用而且对性能无影响,所以我们可以将代码改写为:

复制代码 代码如下:

local MyClass = class("MyClass")

function MyClass:print()
    print("load hello.png completed")
end

----

local my = MyClass.new()

display.addImageAsync("hello.png", function()
    my:print()
end)

原理非常简单,就是在匿名函数里调用对象方法而已。

Quick 框架里已经提供了更简单的使用方法 handler() 函数:

复制代码 代码如下:

display.addImageAsync("hello.png", hander(my, my.print))

时间: 2024-11-05 07:51:30

Lua中让回调函数支持回调对象方法的解决方法_Lua的相关文章

boost python c++接口-boost python 封装c++接口 回调函数设置类对象

问题描述 boost python 封装c++接口 回调函数设置类对象 在python调用的时候报错,应该是self不是c++的类型导致无法使用 解决方案 最好是再封装一层C的接口给Python调用

Lua中调用C++函数实例_Lua

到这为止,大家对Lua和C++之间的通信应该有些熟悉了,今天我们来介绍最后一个操作. (旁白:什么?最后一个?要结束了么?太好了~!) 上一章传送门:http://www.jb51.net/article/55097.htm 1. Lua调用C++的函数 Lua要调用C++的函数还是蛮方便的,首先,我们来创建一个c++函数先: 复制代码 代码如下: public: static int getNumber(int num); int HelloLua::getNumber( int num )

Lua中的loadfile、dofile、loadstring、require用法实例_Lua

复制代码 代码如下: do  local errorInfo = loadfile("test.lua"); --load code file  if(errorInfo == nil) then   print("load file failed");  else   print("load file success");   local doInfo = dofile("test.lua") --complie the f

WinXP系统中的帮助和支持打不开如何解决?

  我们在使用WinXP统的过程中,如有问题解决不了,这时候我们就可以通过系统中自带的"帮助和支持"向联机Microsoft支持技术人员寻求帮助.但最近有用户反应,当它想打开系统中自带的"帮助和支持"功能时,却发现无法启动"帮助和支持",怎么办呢?下面小编就和大家说一下WinXP系统中的帮助和支持打不开如何解决. 步骤如下: 1.单击"开始",选择"控制面板". 2.点击"性能和维护".

hibernate-Hibernate一对多中,在多方的关联对象如果提供getter方法,hql查询不出结果的问题

问题描述 Hibernate一对多中,在多方的关联对象如果提供getter方法,hql查询不出结果的问题 entity @Entity @Table(name = "tb_many", catalog = "ecs") public class Many implements Serializable { private static final long serialVersionUID = 1L; @Id @Column(name="mid"

JS在Chrome浏览器中showModalDialog函数返回值为undefined的解决方法_javascript技巧

本文实例讲述了JS在Chrome浏览器中showModalDialog函数返回值为undefined的解决方法.分享给大家供大家参考,具体如下: 主页面: <script type="text/javascript"> function SelectGroupCust() { var temp = window.showModalDialog("Default2.aspx?xx=" + Date(), "", "dialog

javasciprt下jquery函数$.post执行无响应的解决方法

 这篇文章主要介绍了javasciprt下jquery函数$.post执行无响应的解决方法,需要的朋友可以参考下 在编写javascirpt程序过程中,用$.post方法发送数据,若数据中字符含有'<',将导致$.post无法成功执行.   代码如下: var jsonstr='{"value":"abcd<efg"}';  $.post(  url,  { "jsonstr": jsonstr },  function (data,

win7系统访问磁盘提示“你没有权限查看或编辑这个对象”原因和解决方法

  win7系统访问磁盘提示"你没有权限查看或编辑这个对象"原因和解决方法.安装win7旗舰版系统之后,访问磁盘的时候需要管理员权限,这时候大家只要使用Administrator管理员账户就可以登入了.但是一些用户新建了非管理员权限的用户进行登入使用,在使用时候却遇到了问题,之前本来可以访问磁盘的,但是后来没办法访问了,提示"你没有权限查看或编辑这个对象",想切换回"Administrator"账户也无法切换怎么办?下面一起看看解决方法吧. 故障

电脑中无法启动Network List Service服务项的解决方法

  电脑中无法启动Network List Service服务项的解决方法 1.按组合键win+r打开运行,输入dcomcnfg并回车; 2.打开组件服务后,依次展开"组件服务→计算机→我的电脑→dcom配置",找到netprofm; 3.右击netprofm,打开属性; 4.切换到安全选项卡,在"启动和激活权限"中选择"自定义",并点击"编辑"按钮; 5.点击"添加"按钮; 6.输入对象名称"L