Hi there folks!
I need some help with OOP-like modules using metatables - I’m quite good at all Corona programming, but OOP seems to be a big hurdle for me. I’ve read all tutorials but I keep on making errors, so would you guys and girls like at my code for a second? Thanks!
What I want to do in a nutshell is this:
- Create bullets that have their own move-and-die logic, as instances of a bullet class.
- Retain control over the bullets from my main.lua script, so I can kill all bullets when this is needed (etc. on gameover).
So, here’s my main.lua code:
local bullet = require("bullet")
bulletList = {}
local function createBullet()
bulletList[#bulletList+1] = bullet.new(200,200,math.random(360),5)
end
timer.performWithDelay(200, createBullet, 0)
local function killBullet()
if math.random(25) == 5 then
-- delete bullet
for i = #bulletList, 1, -1 do
bulletList[i].destroy()
bulletList.remove(i)
end
end
end
Runtime:addEventListener("enterFrame", killBullet)
and here is my bullet.lua module:
-- bullet.lua --
----------------
local bullet = {}
local bullet\_mt = { \_\_index = bullet} -- metatable
-- private functions
-- public functions
function bullet.new(startX, startY, angle, speed)
-- forward references
local moveBullet
local newBullet = {}
newBullet.image = display.newImage("bullet.png")
newBullet.image.x = startX
newBullet.image.y = startY
newBullet.image.rotation = angle
newBullet.image.xScale = .1
newBullet.image.yScale = .1
transition.to(newBullet.image, {time = 200, xScale = 1, yScale = 1})
function newBullet.destroy()
Runtime:removeEventListener("enterFrame", moveBullet)
newBullet.image:removeSelf()
newBullet = nil
end
moveBullet = function()
newBullet.image.x = newBullet.image.x + math.cos(math.rad(angle))\*speed
newBullet.image.y = newBullet.image.y + math.sin(math.rad(angle))\*speed
if newBullet.image.x \> 500 then
newBullet.destroy()
end
end
Runtime:addEventListener("enterFrame", moveBullet)
return setmetatable (newBullet, bullet\_mt)
end
return bullet
Jon Beebes tutorials make some sense, but I quickly get lost when it come to knowing where to put my functions, using self etc…
Any help is greatly appreciated!
Thanks,
Thomas [import]uid: 70134 topic_id: 34539 reply_id: 334539[/import]
