I started by placing my sprite sheets into a table like so…
local spriteSheets = {
["character1"] = sprite.newSpriteSheetFromData("sprites/character1sprite.png", require("sprites.character1sprite").getSpriteSheetData()),
["character2"] = sprite.newSpriteSheetFromData("sprites/character2sprite.png", require("sprites.character2sprite").getSpriteSheetData()),
["character3"] = sprite.newSpriteSheetFromData("sprites/character3sprite.png", require("sprites.character3sprite").getSpriteSheetData()),
["little1"] = sprite.newSpriteSheetFromData("sprites/little1sprite.png", require("sprites.little1sprite").getSpriteSheetData()),
["crystal1"] = sprite.newSpriteSheetFromData("sprites/crystal1sprite.png", require("sprites.crystal1sprite").getSpriteSheetData()),
["pincer1"] = sprite.newSpriteSheetFromData("sprites/pincer1sprite.png", require("sprites.pincer1sprite").getSpriteSheetData()),
["pincer2"] = sprite.newSpriteSheetFromData("sprites/pincer2sprite.png", require("sprites.pincer2sprite").getSpriteSheetData()),
["firefly1"] = sprite.newSpriteSheetFromData("sprites/firefly1sprite.png", require("sprites.firefly1sprite").getSpriteSheetData()),
["batbean1"] = sprite.newSpriteSheetFromData("sprites/batbean1sprite.png", require("sprites.batbean1sprite").getSpriteSheetData()),
["octobean1"] = sprite.newSpriteSheetFromData("sprites/octobean1sprite.png", require("sprites.octobean1sprite").getSpriteSheetData()),
}
And I’ll typically call in a character using something like…
local function newFirefly()
local firefly1set = sprite.newSpriteSet(spriteSheets["firefly1"], 1, 4)
sprite.add(firefly1set, "buzz", 1, 4, 500, -2 )
local firefly = sprite.newSprite(firefly1set)
firefly:prepare("buzz")
firefly:play()
enemylayer:insert(firefly)
return firefly
end
local firefly1 = newFirefly()
firefly1.x = \_W/4
firefly1.y = \_H/4
Up until today I hadn’t been particularly worried about removing scene objects at the end of each stage because I was assuming (maybe incorrectly) that Director was doing it for me. When I noticed the memory leak I started to look closer and noticed the correlation with the sprites, but it could be display objects in general.
My typical scene changing function goes something like…
local function nextStage(event)
if(event.phase == "ended" or event.phase == "cancelled") then
Runtime:removeEventListener("enterFrame", moveCamera)
audio.fadeOut({channel=1, time=500})
local function goNext()
audio.dispose(soundtrack)
soundtrack = nil
tnt:cancelAllTransitions() -- from Timers and Transitions external module
tnt:cancelAllTimers()
local tRemove = table.remove -- Code from Danny @Ansca Mobile
for i, v in pairs(spriteSheets) do
spriteSheets[i]:dispose()
spriteSheets[i] = nil
end
tRemove(spriteSheets) -- End code from Danny
\_G.stage = "stage"..(currentStage +1) -- Game data stored in global variable
director:changeScene("restart", fxMode)
end
next1.timer = tnt:newTimer(550, goNext, 1)
end
end
I’ve been getting an error since I added the code Danny recommended but the memory leak was occurring without it. I’m also open to any general feedback regarding ways to approach this differently if you noticing any other quirks or problems. As stated before, this is my first go with Corona 
Thanks again [import]uid: 136211 topic_id: 31400 reply_id: 125533[/import]