当前位置: 首页 > 编程笔记 >

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

张和颂
2023-03-14
本文向大家介绍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))

 类似资料:
  • 本文向大家介绍ajax回调函数中使用$(this)取不到对象的解决方法,包括了ajax回调函数中使用$(this)取不到对象的解决方法的使用技巧和注意事项,需要的朋友参考一下 下面这段jquery代码,是可以达到预期效果的。 其中,大家可以看到,在发出ajax请求之前,我提前定义了两个变量,obj和form,分别用来存储两个jquery对象。如果在ajax的回调函数内使用$(this)的话,实践证

  • 本文向大家介绍jQuery Ajax Post 回调函数不执行问题的解决方法,包括了jQuery Ajax Post 回调函数不执行问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 今天在写一个检查用户名的功能时,使用的是jQuery.post( url, [data], [callback], [type] )这个函数,但是发现其中的回调函数不能执行。 先来看看我的代码: 前台代码: 后台

  • 本文向大家介绍理解Android中Activity的方法回调,包括了理解Android中Activity的方法回调的使用技巧和注意事项,需要的朋友参考一下 为什么需要方法回调? 方法回调是功能定义和功能分离的一种手段,是一种松耦合的设计思想。在JAVA中回调是通过接口来实现的。作为一种系统架构,必须要有自己的运行环境,并且要提供用户的实现接口。 下面通过实例来模拟一下Android中Activit

  • 本文向大家介绍php对微信支付回调处理的方法,包括了php对微信支付回调处理的方法的使用技巧和注意事项,需要的朋友参考一下 应用场景 支付完成后,微信会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答。 对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。 (通知频率为1

  • 在以下代码中,设置状态后,setState方法的回调不会像预期的那样执行。如果你检查控制台,你会明白我的意思。console.log读取的状态不是更新的状态。它总是前一个(你可以通过点击读取数组按钮来检查这个),但是根据反应文档: setState()的第二个参数是一个可选的回调函数,它将在setState完成并重新呈现组件后执行。通常,我们建议对此类逻辑使用componentDidUpdate(

  • 本文向大家介绍对象不支持此属性或方法: Session.CodePage = 936 解决方法,包括了对象不支持此属性或方法: Session.CodePage = 936 解决方法的使用技巧和注意事项,需要的朋友参考一下 今天调试网站时在后台出现这样的错误,“Microsoft VBScript 运行时错误 '800a01b6' 对象不支持此属性或方法: 'Session.CodePage'”