lua - 中间类问题

标签 lua coronasdk

在遇到一些问题后,我现在正在使用 LUA 中间类库,但我遇到了一种我似乎无法弄清楚的情况。

假设我有我的课:编辑:打字错误:这是实际功能

require "middleclass"
weaponCanon2 = class("weaponCanon2")

function weaponCanon2:onWeaponCollision(event)
   if (event.phase == "began") then
      if (event.other.name ~= "ground") then
         self.canonBall.inAir = false
      end
   end
end

function weaponCanon2:initialize(atX, atY, inGroup)
self.name = "some value"
self.someObject:addEventListener("touch", **weaponCanon2.onWeaponCollision**)
...
end

当我这样做时,上面示例中的每个变量(例如 self.name)现在都是 nil。我认为这是因为我的职能是:

function weaponCanon2:onWeaponCollision(event)
   ...
end

然后设置碰撞事件变量,如 self.collisionEvent = weaponCanon2.onWeaponCollision 不是一回事。我不是 100% 确定 : 和 . 之间的区别。运营商是根据 LUA 但这些给我不同的问题。

现在另一个例子是我有一个重置功能。计时器关闭,然后调用重置功能。如果我这样做:

timer.performWithDelay(100, weaponCanon2.resetShot, 1)

然后在 100 毫秒内它会调用 weaponCAnon2.resetShot 1 次。当它这样做时,我所有的 self.name 等变量都是零。现在,如果我创建我的类:

require("weaponCanon2")
local canon = weaponCanon2:new("someName")
canon:saveInstance(canon)

然后回到我的类文件中我有:

function saveInstance(value)
   self.instance = value
end

现在我可以像这样调用它来使用这个计时器了:

timer.performWithDelay(100, function() self.instance:resetShot(); end, 1)

这将在我的任何成员变量 (self.name) == 为 nil 的情况下工作。在使用您的库或在 LUA 中时,是否有更好/更简单的方法来执行此操作?

很抱歉我不清楚,我无法全神贯注地解决这个问题并解释它非常困难。

感谢您的帮助,

-d

最佳答案

[编辑 3] 好的,我想我现在明白了问题。

在lua中,做这个:

function something:foo(bar, baz)

和做这个一样:

function something.foo(self, bar, baz)

换句话说:':' 运算符只是添加一个“幻影”自参数。同样,当您使用它调用函数时:

something:foo(bar, baz)

':' 会自动用某物的值“填充” self 参数。它相当于:

something.foo(something, bar, baz)

简而言之:weaponCanon2.onWeaponCollision在现实中有两个参数:self和event。

但是 Corona 只会传递一个参数:event。你必须欺骗 Corona 来传递你想要的参数;一种可能的解决方案是将您的函数包装到另一个函数中,如下所示:

self.someObject:addEventListener("touch", function(event) self:onWeaponCollision(event) end)

我希望这能澄清整个“:”的事情。

我已经完成了一个 Lua 教程,解释了这个以及关于 Lua 的其他事情。它在这里:

http://github.com/kikito/lua_missions

它是互动的;你在用 Lua 编程的同时学习 Lua。有一章解释“:”运算符(在 tables_and_functions 内)。它还解释了什么是“闭包”,以及其他内容。

无论如何,我希望这对您有所帮助。

问候!

关于lua - 中间类问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6363671/

相关文章:

function - 定义函数参数的默认值

lua - 为什么它说 : "Bad argument #1 to ' remove' (table expected, 没有 )'"

iphone - 备份/恢复 Gmail?

android - Google Play 游戏服务无法登录 - 返回已取消

ruby-on-rails - 如何从另一个应用程序向 Ruby on Rails 发送 http 请求?

ios - 如何在多个 Corona SDK 应用程序之间共享通用代码?

ios - iOS 设备上的 Lua 堆栈只有 ?,没有类名或行号

lua - Pandoc Lua 过滤器 : how to specify attributes for Span element

lua - Corona with Lua - 将文本转换为公式

python - linux中C的配置文件