Question

I hope someone can help me because this problem has been driving me crazy the last few days. So I just started with corona - made a few tutorials and really having fun discovering the possibilities. Problem: I want to integrate a simple game into a storyboard. I somehonw can't manage to find the right combination and always get this error pop up.

File: assertion failed!
Assertion failed!
stack traceback:
[C]: ?
[C]: in function 'assert'
?: in function 'get0rCreateTable'
?: in function 'addEventListener'
?: in function 'addEventListener'
...ik/Desktop/_DummyProjekt2/Fruit Fliesv10/level01.lua:51: in function
<. . . ik/Desktop/_DummyProjekt2/ Fruit Fliesv10/level0l. lua:44>
?: in function 'dispatchEvent'
?: in function <?:1096>
(tail call): ?
?: in function <?:466>
?: in function <?:218>

It's probably a rookie mistake, but I have been stuck for a few days now and definitely need some help. I've gone thru most of the tutorials and documentation I could find with no luck. So any help would be greately welcome :) So this is my level 1


local storyboard = require( "storyboard" )
local scene = storyboard.newScene()

local widget = require ("widget")
local playfile = require ("play")



function scene:createScene(event)


local screenGroup = self.view
local spawnEnemy
local gameTitle
local scoreTxt
local score = 0
local hitBowl
local planet
local speedBump = 0



background = display.newImage("images/background.png")
background.y = centerY
background.x = centerX


bowl = display.newImage("images/bowl2.png")
bowl.x = centerX
bowl.y = centerY


scoreTxt = display.newText( "Score: 0", 0, 0, "orange juice", 22 )
scoreTxt.x = centerX
scoreTxt.y = 10
scoreTxt:setFillColor(1,1,1)
scoreTxt.y = 255

end





function scene:enterScene(event)




enemypics = {"images/blue.png","images/pink.png", "images/green.png"}
enemy = display.newImage(enemypics[math.random (#enemypics)])
enemy:addEventListener ( "tap", shipSmash )
    if math.random(2) == 1 then
    enemy.x = math.random ( -100, -10 )
else
    enemy.x = math.random ( display.contentWidth + 10, display.contentWidth + 100 )
    enemy.xScale = -1
end
enemy.y = math.random (display.contentHeight)
enemy.trans = transition.to ( enemy, { x=centerX, y=centerY, time=math.random(2500-speedBump, 4500-speedBump), onComplete=hitBowl } )
speedBump = speedBump + 50

end



function startGame()
text = display.newText( "Tap here to start. Protect the Fruit Bowl!", 0, 0, "orange juice", 24 )
text.x = centerX
text.y = display.contentHeight - 30
text:setFillColor(0, 0, 0)
 local function goAway(event)
display.remove(event.target)
    text = nil
    display.remove(gameTitle)
     spawnEnemy()
     scoreTxt.alpha = 1
     scoreTxt.text = "Score: 0"
     score = 0
     bowl.numHits = 10
    bowl.alpha = 1
     speedBump = 0
 end
text:addEventListener ( "tap", goAway )
end



local function bowlDamage()
    bowl.numHits = bowl.numHits - 2
    bowl.alpha = bowl.numHits / 10
    if bowl.numHits < 2 then
    bowl.alpha = 0
    timer.performWithDelay ( 1000, startGame )
    --audio.play ( sndLose )
else
    local function goAway(obj)
        bowl.xScale = 1
        bowl.yScale = 1
        bowl.alpha = bowl.numHits / 10
    end
    transition.to ( bowl, { time=200, xScale=1.2, yScale=1.2, alpha=1, onComplete=goAway} )
end
end

function hitBowl(obj)

display.remove( obj )
bowlDamage()
--audio.play(sndBlast)
if bowl.numHits > 1 then
    spawnEnemy()
end
end


local function shipSmash(event)
local obj = event.target
display.remove( obj )
--audio.play(sndKill)
transition.cancel ( event.target.trans )
score = score + 5
scoreTxt.text = "Score: " .. score
spawnEnemy()

end



function scene:exitScene(event)

end


function scene:destroyScene(event)

end

scene:addEventListener( "createScene", scene )
scene:addEventListener( "enterScene", scene )
scene:addEventListener( "exitScene", scene )
scene:addEventListener( "destroyScene", scene )

return scene
Was it helpful?

Solution

So LUA is fun in lots of regards and this is one you'll learn quickly. So I only think this might be the problem, if not it could lead you on the correct trail.

In your top error message you'll see that it gives you this:

...ik/Desktop/_DummyProjekt2/Fruit Fliesv10/level01.lua:51: in function

That level01.lua:51 signifies a line number, so line 51 (or around there). And the lines above it in the error mention addEventListener. Those two things are our clues.

Here's some code from around there:

enemy = display.newImage(enemypics[math.random (#enemypics)])
enemy:addEventListener ( "tap", shipSmash )
    if math.random(2) == 1 then

Looks like there's an addEventListener there, one parameter is a string, the other is a function. Where is that function? It's on line 117 which is after line 51 which is most likely the problem. In LUA (and some other languages) you have to declare things in order. So you could do two things. You could move the shipSmash function up above line 51 or you could forward declare that variable. So up in the top part of your file you could do local shipSmash. This assures line 51 that that name exists (what it's trying to check) and then you can declare it later (sometimes I do this for code structure).

Hopefully that helps. I've been using LUA/Corona SDK since about July, I'm still getting used to a lot of the small things like this that I've spent hours ripping my hair out over.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top