LUA : Scene not being created. What is wrong? - lua

I'm building a game where I have a start screen and clicking the start button it should take me to the FIRST level. Some stuff happens and then I will be taken to the SECOND level.
However I'm running into problems and can't seem to find a solution.
When I click the start button it seems to get stuck in the create function because i prints out something. I was told you don't have to place anything in the create function and just put everything in the SHOW FUNCTION. Was i mislead?
START SCENE
local composer = require("composer")
local widget = require("widget")
local options = {effect = "fade", time = 800}
local startBtn;
local function start(event)
-- load first scene
composer.gotoScene( "level1", options);
startBtn:removeSelf();
print("Start Game")
end
startBtn = widget.newButton(
{
left = 75,
top = 100,
id = "startBtn",
label = "Start",
onEvent = start
}
)
When I click the START button it should take me to the FIRST LEVEL which is here
and is where i'm running into problems.
local composer = require( "composer" );
local scene = composer.newScene();
local widget = require ("widget");
function scene:create( event )
local sceneGroup = self.view;
end
function scene:show( event )
local sceneGroup = self.view
local phase = event.phase
local params = event.params;
print(params);
if (phase == "will") then
print("Will")
elseif (phase == "did") then
print("Did")
local bg = display.newImage ("bg.png",
display.contentCenterX, display.contentCenterY);
------- ALEX KIDD ---------------------------------
local options =
{
frames = {
{ x = 1, y = 2, width = 16, height = 25}, --frame 1
{ x = 18, y = 2, width = 16, height = 25}, --frame 2
{ x = 35, y = 2, width = 16, height = 25}, --frame 3
{ x = 52, y = 2, width = 16, height = 25}, --frame 4
{ x = 1, y = 54, width = 16, height = 24}, --ready1
{ x = 19, y = 54, width = 16, height = 24}, --ready2
{ x = 37, y = 54, width = 29, height = 24}, -- rock
{ x = 67, y = 54, width = 33, height = 24}, -- scissor
{ x = 101, y = 54, width = 33, height = 24}, -- paper
}
};
local sheet = graphics.newImageSheet( "kidd.png", options );
-- Create animation sequence for animation
local seqData = {
{name = "normal", start=1 , count = 4, time = 800},
{name = "faster", frames={1,2,3,4}, time = 400},
{name = "shake", frames={5,6}, time = 500},
{name = "rock", frames={7}},
{name = "paper", frames={9}},
{name = "scissor", frames={8}},
}
local alex = display.newSprite (sheet, seqData);
alex.x = display.contentCenterX-100;
alex.y = display.contentCenterY+83;
alex.anchorX = 1;
alex.anchorY = 1;
---------- JANKEN ---------------------------------
local jankenOpt =
{
frames = {
{x= 154, y= 13, width= 39, height= 48 }, -- shake1
{x= 195, y= 13, width= 39, height= 48 }, -- shake2
{x= 236, y= 13, width= 32, height= 48 }, -- set
{x= 270, y= 13, width= 16, height= 48 }, --r/p/s
{x= 287, y= 13, width= 16, height= 48 }, --r/p/s
{x= 305, y= 13, width= 15, height= 48 }, --r/p/s
{x= 69, y= 13, width= 41, height= 48 }, --flap1
{x= 110, y= 13, width= 40, height= 48 }, --flap2
}
};
local jankenSheet = graphics.newImageSheet( "chars.png", jankenOpt );
-- Create animation sequence janken
local seqDataJanken = {
{name = "flap", frames={7,8}, time = 500},
{name = "shake", frames={1,2}, time = 500},
{name = "set", frames={3}, time = 10, loopCount=1},
}
local janken = display.newSprite (jankenSheet, seqDataJanken);
janken.x = display.contentCenterX+100;
janken.y = display.contentCenterY+83;
janken.anchorX = 1;
janken.anchorY = 1;
-------------- button setup
local btnOpt =
{
frames = {
{ x = 3, y = 2, width=70, height = 22}, --frame 1
{ x = 78, y = 2, width=70, height = 22}, --frame 2
}
};
local buttonSheet = graphics.newImageSheet( "button.png", btnOpt );
local function foo (wow)
alex:play();
janken:play();
end
local function bar (wow)
alex:pause();
janken:pause();
--alex:setFrame(2); --keep it at this frame
-- NEXT: generate more buttons
end
-- Function to handle button event
local function go( event )
-- event.target is the button widget
print (event.phase, event.target.id)
transition.to(alex, {time=2000, x=170, onStart = foo, onComplete = bar})
end
local btnGo = widget.newButton(
{
x = 200,
y = 20,
id = "btnGo",
label = "Go!",
labelColor = { default={ 0, 0, 0 }, over={ 0, 0, 0 } },
sheet = buttonSheet,
defaultFrame = 1,
overFrame = 2,
onPress = go,
}
);
-------------- play buttons
local function shoot (buttonID)
local randomHand = math.random(4,6);
-- position Janken and draw his hands
janken:setSequence("set");
hand = display.newImage (jankenSheet, randomHand, display.contentCenterX+61, display.contentCenterY+60);
if (buttonID == "btnRock") then
alex:setSequence("rock"); -- just show rock for now
elseif (buttonID == "btnScissor") then
alex:setSequence("scissor"); -- just show rock for now
else
alex:setSequence("paper"); -- just show rock for now
end
end
local function play (event)
if (event.phase == "ended") then
alex:setSequence ("shake");
alex:play();
janken:setSequence("shake");
janken:play();
local t = timer.performWithDelay (1500, function() shoot(event.target.id) end, 1);
print (event.target.id); -- which button was it?
end
end
local btnRock = widget.newButton(
{
x = 80,
y = 20,
id = "btnRock",
label = "Rock",
labelColor = { default={ 0, 0, 0 }, over={ 0, 0, 0 } },
sheet = buttonSheet,
defaultFrame = 1,
overFrame = 2,
onEvent = play,
}
);
local btnPaper = widget.newButton(
{
x = 80,
y = 50,
id = "btnPaper",
label = "Paper",
labelColor = { default={ 0, 0, 0 }, over={ 0, 0, 0 } },
sheet = buttonSheet,
defaultFrame = 1,
overFrame = 2,
onEvent = play,
}
);
local btnScissor = widget.newButton(
{
x = 80,
y = 80,
id = "btnScissor",
label = "Scissor",
labelColor = { default={ 0, 0, 0 }, over={ 0, 0, 0 } },
sheet = buttonSheet,
defaultFrame = 1,
overFrame = 2,
onEvent = play,
}
);
local scoreAlex = display.newText ( {text="Alex: 0", x=230, y=60, fontSize=20});
scoreAlex:setFillColor (0,0,0);
scoreAlex.anchorX = 1;
end
end
function scene:hide( event )
local sceneGroup = self.view
local phase = event.phase
if ( phase == "will" ) then
transition.cancel(enemy);
elseif ( phase == "did" ) then
end
end
scene:addEventListener( "create", scene )
scene:addEventListener( "enter", scene )
scene:addEventListener( "hide", scene )
return scene

Well, you are adding a listener scene:addEventListener( "enter", scene ) which should be scene:addEventListener( "show", scene ) (Change enter to show)
Your listener is not even being fired, because it was not added with the correct name.
Composer uses the following events: create, destroy, show, hide.

Related

why is this error coming out in Corona sdk?

12:39:31.002 ERROR: Runtime error
12:39:31.002 C:\Users\User\Documents\Corona Projects\MATH FOR CHILDREN\level1.lua:207: attempt to call method 'setFillColor' (a nil value)
12:39:31.002 stack traceback:
12:39:31.002 C:\Users\User\Documents\Corona Projects\MATH FOR CHILDREN\level1.lua:207: in function 'listener'
12:39:31.002 D:\a\corona\corona\subrepos\timer\timer.lua:331: in function 'method'
12:39:31.002 D:\a\corona\corona\platform\resources\init.lua:220: in function <D:\a\corona\corona\platform\resources\init.lua:189>
This is my code
local composer = require("composer");
local scene = composer.newScene();
local widget = require( "widget" )
local json = require("json")
display.setDefault("background", 55/255, 50/255, 47/255);
------------------------------------------------------------------------------------
local tapText
local casi = display.newText( "a", display.contentCenterX, 700, "Myfontilqar-Regular.ttf", 42 )
casi:setFillColor(0/255,196/255,253/255,1)
local yes = display.newText( "c", display.contentCenterX, 700, "Myfontilqar-Regular.ttf", 46 )
yes:setFillColor(6/255,204/255,36/255,1)
local no = display.newText( "b", display.contentCenterX, 700, "Myfontilqar-Regular.ttf", 44 )
no:setFillColor(219/255,26/255,15/255,1)
local bal
local balpl
local vrem
local scetcikBal = 0
local scetcikBalpl = 0
local scetcikLevel = 0
local settings = {
yesJ = 0, noJ = 0, procent = 0, procent2 = 0
}
local function saveSettings()
local path = system.pathForFile( "itoq.json", system.DocumentsDirectory )
local file = io.open( path, "w" )
if (file) then
local contents = json.encode(settings)
file:write( contents )
io.close( file )
return true
end
end
local secondL = 20
local function obnovVr( event )
secondL = secondL - 1
vrem.text = secondL
if secondL == 0 then
settings.yesJ = scetcikBal
settings.noJ = scetcikBalpl
settings.procent = (scetcikBal * 10)
saveSettings()
composer.gotoScene( "Level1Score")
end
end
local kor = {
{display.contentCenterX - 66, display.contentCenterY + 120},
{display.contentCenterX + 70, display.contentCenterY + 120},
{display.contentCenterX - 66, display.contentCenterY + 200},
{display.contentCenterX + 70, display.contentCenterY + 200}
}
local tb = {
{"1 + 2 = ?",{"3","2","4","1"},"1 + 2 = 3"},
{"2 + 3 = ?",{"5","4","6","3"},"2 + 3 = 5"},
{"3 + 1 = ?",{"4","3","5","1"},"3 + 1 = 4"},
{"2 + 2 = ?",{"4","2","3","1"},"2 + 2 = 4"},
{"3 + 2 = ?",{"5","3","4","1"},"3 + 2 = 5"},
{"1 + 1 = ?",{"2","5","4","1"},"1 + 1 = 2"},
{"1 + 3 = ?",{"4","1","5","2"},"1 + 3 = 4"},
{"2 + 1 = ?",{"3","2","1","4"},"2 + 1 = 3"},
{"4 + 1 = ?",{"5","3","4","1"},"4 + 1 = 5"},
{"1 + 4 = ?",{"5","4","2","3"},"1 + 4 = 5"}
}
local j
for i = #tb, 2, -1 do
j = math.random( i )
tb[i], tb[j] = tb[j], tb[i]
end
local j1
for i = #kor, 2, -1 do
j1 = math.random( i )
kor[i], kor[j1] = kor[j1], kor[i]
end
local button1
local button2
local button3
local button4
nVoprosa = 1
local t = 2
local function stop1()
button1:setEnabled( false )
button2:setEnabled( false )
button3:setEnabled( false )
button4:setEnabled( false )
tapText.text = tb[nVoprosa][3]
tapText:setFillColor(6/255, 204/255, 36/255, 1)
end
local function stop2()
button1:setEnabled( false )
button2:setEnabled( false )
button3:setEnabled( false )
button4:setEnabled( false )
tapText.text = tb[nVoprosa][3]
tapText:setFillColor(219/255, 26/255, 15/255, 1)
tapText.size = 50
end
local function vb()
t = t - 1
if t == 0 then
scetcikBal = scetcikBal + 1
bal.text = scetcikBal
scetcikLevel = scetcikLevel + 1
if ( scetcikLevel == 10) then
settings.yesJ = scetcikBal
settings.noJ = scetcikBalpl
settings.procent = (scetcikBal * 10)
saveSettings()
composer.gotoScene( "Level1Score")
else
button1:setEnabled( true )
button2:setEnabled( true )
button3:setEnabled( true )
button4:setEnabled( true )
tapText:setFillColor(255/255, 255/255, 255/255, 1 )
nVoprosa = nVoprosa + 1
tapText.text = tb[nVoprosa][1]
button1:setLabel( tb[nVoprosa][2][1] )
button2:setLabel( tb[nVoprosa][2][2] )
button3:setLabel( tb[nVoprosa][2][3] )
button4:setLabel( tb[nVoprosa][2][4] )
local j1
for i = #kor, 2, -1 do
j1 = math.random( i )
kor[i], kor[j1] = kor[j1], kor[i]
end
button1.x = kor[1][1]
button1.y = kor[1][2]
button2.x = kor[2][1]
button2.y = kor[2][2]
button3.x = kor[3][1]
button3.y = kor[3][2]
button4.x = kor[4][1]
button4.y = kor[4][2]
end
t = 2
end
end
local function vbn()
t = t - 1
if t == 0 then
scetcikBalpl = scetcikBalpl + 1
balpl.text = scetcikBalpl
scetcikLevel = scetcikLevel + 1
if ( scetcikLevel == 10) then
settings.yesJ = scetcikBal
settings.noJ = scetcikBalpl
settings.procent = (scetcikBal * 10)
saveSettings()
composer.gotoScene( "Level1Score")
else
button1:setEnabled( true )
button2:setEnabled( true )
button3:setEnabled( true )
button4:setEnabled( true )
tapText:setFillColor(255/255, 255/255, 255/255, 1)
tapText.size = 40
nVoprosa = nVoprosa + 1
tapText.text = tb[nVoprosa][1]
button1:setLabel( tb[nVoprosa][2][1] )
button2:setLabel( tb[nVoprosa][2][2] )
button3:setLabel( tb[nVoprosa][2][3] )
button4:setLabel( tb[nVoprosa][2][4] )
local j1
for i = #kor, 2, -1 do
j1 = math.random( i )
kor[i], kor[j1] = kor[j1], kor[i]
end
button1.x = kor[1][1]
button1.y = kor[1][2]
button2.x = kor[2][1]
button2.y = kor[2][2]
button3.x = kor[3][1]
button3.y = kor[3][2]
button4.x = kor[4][1]
button4.y = kor[4][2]
end
t = 2
end
end
local function handleButtonEvent( event )
if ( "ended" == event.phase ) then
stop1()
timer.performWithDelay( 300, vb, t )
--vb()
end
end
local function handleButtonEventN( event )
if ( "ended" == event.phase ) then
stop2()
timer.performWithDelay( 300, vbn, t )
--vbn()
end
end
---------------------------------------------------------------------------------------
function scene:create( event )
local sceneGroup = self.view
timer.performWithDelay( 1000, obnovVr, secondL )
tapText = display.newText("", display.contentCenterX, display.contentCenterY - 80, "Lato-Regular.ttf", 40 )
tapText.text = tb[1][1]
button1 = widget.newButton(
{
id = "button1",
label = tb[nVoprosa][2][1],
onEvent = handleButtonEvent,
labelColor = { default={ 1, 1, 1 }, over={ 0, 0, 0, 0.5 } },
fontSize = 36,
font = "Lato-Regular.ttf",
emboss = false,
shape = "roundedRect",
width = 120,
height = 60,
cornerRadius = 0,
fillColor = { default={55/255,50/255,47/255,1}, over={31/255,76/255,115/255,1} },
strokeColor = { default={0/255,196/255,253/255,1}, over={0.8,0.8,1,1} },
strokeWidth = 3
}
)
button2 = widget.newButton(
{
id = "button2",
label = tb[nVoprosa][2][2],
onEvent = handleButtonEventN,
labelColor = { default={ 1, 1, 1 }, over={ 0, 0, 0, 0.5 } },
fontSize = 36,
font = "Lato-Regular.ttf",
emboss = false,
shape = "roundedRect",
width = 120,
height = 60,
cornerRadius = 0,
fillColor = { default={55/255,50/255,47/255,1}, over={31/255,76/255,115/255,1} },
strokeColor = { default={0/255,196/255,253/255,1}, over={0.8,0.8,1,1} },
strokeWidth = 3
}
)
button3 = widget.newButton(
{
id = "button3",
label = tb[nVoprosa][2][3],
onEvent = handleButtonEventN,
labelColor = { default={ 1, 1, 1 }, over={ 0, 0, 0, 0.5 } },
fontSize = 36,
font = "Lato-Regular.ttf",
emboss = false,
shape = "roundedRect",
width = 120,
height = 60,
cornerRadius = 0,
fillColor = { default={55/255,50/255,47/255,1}, over={31/255,76/255,115/255,1} },
strokeColor = { default={0/255,196/255,253/255,1}, over={0.8,0.8,1,1} },
strokeWidth = 3
}
)
button4 = widget.newButton(
{
id = "button4",
label = tb[nVoprosa][2][4],
onEvent = handleButtonEventN,
labelColor = { default={ 1, 1, 1 }, over={ 0, 0, 0, 0.5 } },
fontSize = 36,
font = "Lato-Regular.ttf",
emboss = false,
shape = "roundedRect",
width = 120,
height = 60,
cornerRadius = 0,
fillColor = { default={55/255,50/255,47/255,1}, over={31/255,76/255,115/255,1} },
strokeColor = { default={0/255,196/255,253/255,1}, over={0.8,0.8,1,1} },
strokeWidth = 3
}
)
--
button1.x = kor[1][1]
button1.y = kor[1][2]
button2.x = kor[2][1]
button2.y = kor[2][2]
button3.x = kor[3][1]
button3.y = kor[3][2]
button4.x = kor[4][1]
button4.y = kor[4][2]
casi.x = 240
casi.y = 2
yes.x = 40
yes.y = 2
no.x = 140
no.y = 2
bal = display.newText(scetcikBal, 80, 3, "Lato-Regular.ttf", 30 )
balpl = display.newText(scetcikBalpl, 180, 3, "Lato-Regular.ttf", 30 )
vrem = display.newText("20", 290, 3, "Lato-Regular.ttf", 30 )
sceneGroup:insert(bal)
sceneGroup:insert(balpl)
sceneGroup:insert(yes)
sceneGroup:insert(no)
sceneGroup:insert(vrem)
sceneGroup:insert(casi)
sceneGroup:insert(tapText)
sceneGroup:insert(button1)
sceneGroup:insert(button2)
sceneGroup:insert(button3)
sceneGroup:insert(button4)
end
function scene:show( event )
local sceneGroup = self.view
local phase = event.phase
if (phase == "will") then
elseif (phase == "did") then
end
end
function scene:hide( event )
local sceneGroup = self.view
local phase = event.phase
if (phase == "will") then
elseif (phase == "did") then
composer.removeScene( "level1" )
end
end
function scene:destroy( event )
local sceneGroup = self.view
end
-- -----------------------------------------------------------------------------------
-- Scene event function listeners
-- -----------------------------------------------------------------------------------
scene:addEventListener( "create", scene )
scene:addEventListener( "show", scene )
scene:addEventListener( "hide", scene )
scene:addEventListener( "destroy", scene )
-- -----------------------------------------------------------------------------------
return sceneenter code here
C:\Users\User\Documents\Corona Projects\MATH FOR CHILDREN\level1.lua:207: attempt to call method 'setFillColor' (a nil value)
In line 207 of level1.lua you do this setFillColor() which is not allowed as setFillColor is not a function value but a nil value.
setFillColor is a method of the ShapeObject class. Make sure you're doing using it like this: myShapeObject:setFillColor(myColor)

How can I remove these DisplayObjects at end of a scene?

I want the balloons in this scene, which are DisplayObjects, to disappear when the scene ends. I have added them to the local sceneGroup = scene.view by passing this as the first argument to display.newImageRect() and assumed this would be enough for them to be removed as they are listed in the destroy.scene bit at the bottom. However when it transitions to the next scene they are still there. Why are these DisplayObjects not being removed?
local composer = require( "composer" )
local scene = composer.newScene()
local Balloons
local positioninsheetOptions = 100
local sheetOptions =
{
frames =
{
{
x = 0,
y = 0,
width = 71,
height = 100
},
{
x = 0,
y = positioninsheetOptions,
width = 71,
height = 100
},
{
x = 0,
y = positioninsheetOptions*2,
width = 71,
height = 100
},
{
x = 0,
y = positioninsheetOptions*3,
width = 71,
height = 100
},
{
x = 0,
y = positioninsheetOptions*4,
width = 71,
height = 100
},
{
x = 0,
y = positioninsheetOptions*5,
width = 71,
height = 100
},
{
x = 0,
y = positioninsheetOptions*6,
width = 71,
height = 100
},
{
x = 0,
y = positioninsheetOptions*7,
width = 71,
height = 100
},
{
x = 0,
y = positioninsheetOptions*8,
width = 71,
height = 100
},
{
x = 0,
y = positioninsheetOptions*9,
width = 71,
height = 100
},
{
x = 0,
y = positioninsheetOptions*10,
width = 71,
height = 100
},
{
x = 0,
y = positioninsheetOptions*11,
width = 71,
height = 100
},
},
}
local objectSheet = graphics.newImageSheet( "gameObjects.png", sheetOptions )
Balloons = {}
-- -----------------------------------------------------------------------------------
-- Code outside of the scene event functions below will only be executed ONCE unless
-- the scene is removed entirely (not recycled) via "composer.removeScene()"
-- -----------------------------------------------------------------------------------
local function gotoGame()
composer.gotoScene( "game" )
end
-- -----------------------------------------------------------------------------------
-- Scene event functions
-- -----------------------------------------------------------------------------------
-- create()
function scene:create( event )
local sceneGroup = self.view
-- Code here runs when the scene is first created but has not yet appeared on screen
local background = display.newImageRect( sceneGroup, "background.png", 800, 1400 )
background.x = display.contentCenterX
background.y = display.contentCenterY
local balloonBlue1 = display.newImageRect(sceneGroup, objectSheet, 6, 71, 100)
local balloonYellow1 = display.newImageRect(sceneGroup, objectSheet, 8, 71, 100)
local balloonRed1 = display.newImageRect(sceneGroup, objectSheet, 10, 71, 100)
local balloonBlue2 = display.newImageRect(sceneGroup, objectSheet, 6, 71, 100)
local Balloons = display.newGroup()
Balloons:insert( balloonBlue1 )
Balloons:insert( balloonYellow1 )
Balloons:insert( balloonRed1 )
Balloons:insert( balloonBlue2 )
Balloons:addEventListener( "tap", gotoGame )
balloonBlue1.x = (display.contentWidth/8)
balloonBlue1.y = balloonBlue1.height
balloonYellow1.x = (display.contentWidth/8)*3
balloonYellow1.y = balloonBlue1.height
balloonRed1.x = (display.contentWidth/8)*5
balloonRed1.y = balloonBlue1.height
balloonBlue2.x = (display.contentWidth/8)*7
balloonBlue2.y = balloonBlue1.height
end
-- show()
function scene:show( event )
local sceneGroup = self.view
local phase = event.phase
if ( phase == "will" ) then
-- Code here runs when the scene is still off screen (but is about to come on screen)
elseif ( phase == "did" ) then
-- Code here runs when the scene is entirely on screen
end
end
-- hide()
function scene:hide( event )
local sceneGroup = self.view
local phase = event.phase
if ( phase == "will" ) then
elseif ( phase == "did" ) then
-- Code here runs immediately after the scene goes entirely off screen
end
end
-- destroy()
function scene:destroy( event )
local sceneGroup = self.view
-- Code here runs prior to the removal of scene's view
end
-- -----------------------------------------------------------------------------------
-- Scene event function listeners
-- -----------------------------------------------------------------------------------
scene:addEventListener( "create", scene )
scene:addEventListener( "show", scene )
scene:addEventListener( "hide", scene )
scene:addEventListener( "destroy", scene )
-- -----------------------------------------------------------------------------------
return scene
You need to add the Balloon group (of which the balloons are children) to your sceneGroup.
In scene:destroy, make sure you remove any listeners and cancel any transitions on the things you want destroyed. If you have, when the scene's view is destroyed, the Balloon group and all it's children will also be destroyed.

How to insert rows into TableView in Corona?

I'm trying to render the match results (string.find) in to a Row, with kinda works... but its only displaying the last match. so if I match 'jan' and 'kevin' it will; only list 'kevin'
Is there a way to fix this ?
code:
local MasterData = xml:loadFile( "sample.xml")
local XMLdataTEST = {}
for i=1,#MasterData.child do
XMLdataTEST[i] = MasterData.child[i]
end
inputNumber = 1
check1 = 'jan'
check2 = 'kevin'
for i=1,#XMLdataTEST do
local data1 = XMLdata[i].child[1].value
local data2 = XMLdata[i].child[2].value
local data3 = XMLdata[i].child[3].value
local data4 = XMLdata[i].child[4].value
input1 = string.lower( data1.. "" )
input2 = string.lower(_G['check' .. inputNumber] )
input = input2
if string.find( input1.. "" , input ) then
print(inputNumber.. " match with " ..input)
inputNumber = inputNumber + 1
local function onRowRender( event )
local row = event.row
local number = display.newText( row, "" .. row.index .. " - ", 12, 0, nil, 18 )
number:setReferencePoint( display.CenterLeftReferencePoint )
number.x = 15
number.y = row.height * 0.5
number:setFillColor( 0, 0, 0 )
local name = display.newText(row, input1, 12, 0, nil, 18 )
name:setReferencePoint( display.CenterLeftReferencePoint )
name.x = number.x + number.contentWidth
name.y = row.height * 0.5
name:setFillColor( 0, 0, 0 )
local score = display.newText(row,"testy", 12, 0, nil, 18 )
score:setReferencePoint( display.CenterLeftReferencePoint )
score.x = display.contentWidth - score.contentWidth - 20
score.y = row.height * 0.5
score:setFillColor( 0, 0, 0 )
end
local tableView = widget.newTableView
{
left = 0,
top = 0,
height = display.contentHeight,
width = display.contentWidth,
onRowRender = onRowRender,
onRowTouch = onRowTouch,
listener = scrollListener
}
tableView.x = display.contentWidth + display.contentWidth/2 + 50
transition.to( tableView, { time=500, x=display.contentWidth / 2, transition=easing.inOutExpo } )
for i = 1, 1 do
local isCategory = false
local rowHeight = 40
local rowColor = { 255, 255, 255 }
local lineColor = { 220, 220, 220 }
tableView:insertRow
{
isCategory = isCategory,
rowHeight = rowHeight,
rowColor = rowColor,
lineColor = lineColor,
onRender = onRowRender,
}
end
end
end
Your tableView being declared within the outer loop meant that the first instance of it would be transitioned over by the second instance. And a quick look over the docs indicates that each event.row allows an optional params table to include any data you may need to render the row.
local MasterData = xml:loadFile( "sample.xml")
local XMLdataTEST = {}
for i=1,#MasterData.child do
XMLdataTEST[i] = MasterData.child[i]
end
-- ** moved from loop **
local function onRowRender( event )
local row = event.row
local number = display.newText( row, "" .. row.index .. " - ", 12, 0, nil, 18 )
number:setReferencePoint( display.CenterLeftReferencePoint )
number.x = 15
number.y = row.height * 0.5
number:setFillColor( 0, 0, 0 )
-- ** changed to use params table **
local name = display.newText(row, row.params.input1, 12, 0, nil, 18 )
name:setReferencePoint( display.CenterLeftReferencePoint )
name.x = number.x + number.contentWidth
name.y = row.height * 0.5
name:setFillColor( 0, 0, 0 )
local score = display.newText(row,"testy", 12, 0, nil, 18 )
score:setReferencePoint( display.CenterLeftReferencePoint )
score.x = display.contentWidth - score.contentWidth - 20
score.y = row.height * 0.5
score:setFillColor( 0, 0, 0 )
end
-- ** moved from loop **
local tableView = widget.newTableView {
left = 0,
top = 0,
height = display.contentHeight,
width = display.contentWidth,
onRowRender = onRowRender,
onRowTouch = onRowTouch,
listener = scrollListener
}
tableView.x = display.contentWidth + display.contentWidth/2 + 50
transition.to( tableView, { time=500, x=display.contentWidth / 2, transition=easing.inOutExpo } )
inputNumber = 1
check1 = 'jan'
check2 = 'kevin'
for i=1,#XMLdataTEST do
local data1 = XMLdata[i].child[1].value
local data2 = XMLdata[i].child[2].value
local data3 = XMLdata[i].child[3].value
local data4 = XMLdata[i].child[4].value
input1 = string.lower( data1.. "" )
input2 = string.lower(_G['check' .. inputNumber] )
input = input2
if string.find( input1.. "" , input ) then
print(inputNumber.. " match with " ..input)
inputNumber = inputNumber + 1
local isCategory = false
local rowHeight = 40
local rowColor = { 255, 255, 255 }
local lineColor = { 220, 220, 220 }
tableView:insertRow
{
isCategory = isCategory,
rowHeight = rowHeight,
rowColor = rowColor,
lineColor = lineColor,
-- ** pass input1 to onRowRender **
params = { input1 = input1 }
}
end
end

Connecting my tab buttons to pages

I'm creating a basic quiz game in corona for a class and am having troubles getting my tab bar buttons to connect to the other pages that have been created for them. I was just wondering if anyone out there could help me out.
main.lua
local background = display.newImage ("basketball_court.jpg")
print("PE Sports Quiz")
display.setStatusBar( display.HiddenStatusBar )
local textObj = display.newText("PE Sports Quiz",
100, 50, m11, 24)
textObj:setTextColor(250,250,250)
local widget = require ( "widget" )
local storyboard = require("storyboard")
local scene = storyboard.newScene()
local localGroup = display.newGroup()
local tabButtons =
{
{
width = 32, height = 32,
defaultFile = "tab.png",
overFile = "tab2.png",
label = "Play",
onPress = function() storyboard.gotoScene( "basketball1" ); end,
selected = true
},
{
width = 32, height = 32,
defaultFile = "tab.png",
overFile = "tab2.png",
label = "Credits",
onPress = function() storyboard.gotoScene( "credits" ); end,
}
}
local demoTabs = widget.newTabBar
{
top = display.contentHeight - 50,
width = display.contentWidth,
backgroundFile = "back.png",
tabSelectedLeftFile = "tab.png",
tabSelectedMiddleFile = "tab.png",
tabSelectedRightFile = "tab.png",
tabSelectedFrameWidth = 20,
tabSelectedFrameHeight = 52,
buttons = tabButtons
}
local tabBar = widget.newTabBar
{
top = display.contentHeight - 50,
width = display.contentWidth,
buttons = tabButtons
}
The only thing I see is that you should rename your credits.lua to gamecredits.lua and change the gotoScene() call for it. There is an internal module called "credits" that can cause issues.

In onButtonEvent function t.value not updating

I am designing an Odd One Out round for a game that I am developing, every time a button is pressed, the onButtonEvent function is supposed to check if the word selected is the odd one out and then refreshes the buttons with different words.
The words are updating and the value assigned to each button is updating, I have been printing it out to the console. I think the problem is when I assign right[num] = t.value the only values that go into the table are the first 3 values that were originally assigned to the buttons. Why is this not being updated?
local function onButtonEvent( event )
local t = event.target
--local phase = event.phase
if event.phase == "release" then
--num = num + 1
displayBtns()
right[num] = t.value
print(right[1])
print(right[2])
print(right[3])
print(right[4])
-- --s3 = table.concat(right)
--print(s3)
if right[num] == answers[num].right then
print("correct!")
elseif right[num] == answers[num].wrong then
-- t.alpha = 0
-- select.alpha = 1
print("incorrect!")
elseif right[num] == answers[num].wrong2 then
else
print("incorrect!")
end
num = num + 1
num2 = num2 + 1
s3 = ""
-- display.remove( btn3 )
-- btn3 = nil
-- display.remove( btn2 )
-- btn2 = nil
-- display.remove( btn1 )
-- btn1 = nil
end
--num = math.random(1,#t)
s3 = ""
end
function displayBtns()
btn3 = widget.newButton{
default = "images/Round4_blue_button.png",
label = answers[num].right,
fontSize = 22,
labelColor = { default={ 255, 250, 250}, over={ 0, 0, 0,} },
onEvent = onButtonEvent
}
btn3.value = answers[num].right
print(btn3.value)
btn2 = widget.newButton{
default = "images/Round4_blue_button.png",
label = answers[num].wrong2,
fontSize = 22,
labelColor = { default={ 255, 250, 250}, over={ 0, 0, 0,} },
onEvent = onButtonEvent
}
btn2.value = answers[num].wrong2
print(btn2.value)
btn1 = widget.newButton{
default = "images/Round4_blue_button.png",
label = answers[num].wrong,
fontSize = 22,
labelColor = { default={ 255, 250, 250}, over={ 0, 0, 0,} },
onEvent = onButtonEvent
}
btn1.value = answers[num].wrong
print(btn1.value)
print("----------")
--btn3.label = answers[num].right
-- p1Button = display.newImage("images/SinglePlayer_button.png", 90, 140)
-- p2Button = display.newImage("images/2Player_button.png", 90, 220)
-- p1Button.touch = onSceneTouch
-- p1Button:addEventListener("touch", p1Button)
-- p2Button.touch = onSceneTouch1
-- p2Button:addEventListener("touch", p2Button)
btn1.x = 90; btn1.y = 245
btn2.x = 240; btn2.y = 245
btn3.x = 390; btn3.y = 245
-- p2Button.x = 240; p2Button.y = 260
end
displayBtns()
The problem is probably here:
elseif right[num] == answers[num].wrong2 then
else
print("incorrect!")
end
You have nothing set in the elseif statement.

Resources