I’m using the LUA middleclass library now after some problems and I have a situation that I can’t seem to figure out.
Say I have my class: EDIT: Had a typo: here is the actual functions
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
When I do this, every variable such as self.name in the above example is now nil. I believe this to be because my function is:
function weaponCanon2:onWeaponCollision(event)
...
end
Then setting a collision event varible like self.collisionEvent = weaponCanon2.onWeaponCollision is not the same thing. I am not 100% sure what the difference between the : and . operator is in terms of LUA but these give me different problems.
Now another example is that I have a reset function. A timer goes off and then calls a reset function. If I do this:
timer.performWithDelay(100, weaponCanon2.resetShot, 1)
Then in 100ms it will call weaponCAnon2.resetShot 1 time. When it does this all my self.name etc variables are nil. Now if I create my class:
require("weaponCanon2")
local canon = weaponCanon2:new("someName")
canon:saveInstance(canon)
then back in my class file I have:
function saveInstance(value)
self.instance = value
end
Now I can use this timer by calling it like so:
timer.performWithDelay(100, function() self.instance:resetShot(); end, 1)
This will work without any of my member variables (self.name) being == to nil. Is there a better/easier way to do this when using your library or in LUA?
Sorry for being unclear I’m having trouble wrapping my mind around this problem and explaining it is being very difficult.
Thanks for the help,
-d
[EDIT 3] Ok I think I understand the problem now.
In lua, making this:
Is the same as making this:
In other words: the ‘:’ operator simply adds a “phantom” self parameter. Similarly, when you do invoke a function with it:
The ‘:’ is automatically “filling in” the self parameter with the value of something. It’s equivalent to:
In short: weaponCanon2.onWeaponCollision takes two parameters in reality: self and event.
But Corona will only pass it one parameter: event. You have to trick Corona into passing the parameter you want; A possible solution is wrapping your function into another function, like this:
I hope this clarifies the whole “:” thing.
I have done a Lua tutorial that explains this, and other things, regarding Lua. It’s here:
http://github.com/kikito/lua_missions
It’s interactive; you learn Lua while programming in Lua. There’s a chapter explaining the ‘:’ operator (inside tables_and_functions). It also explains what a “closure” is, as well as other things.
In any case, I hope this helps.
Regards!