Question

this code (lua) gives you a random value from the table "local a" by pressing the text "new". Unfortunately the new random value just appears above the old one. I've tried to remove the old value e.g. with display.remove(mmDis), but it doesn't work.

The second problem is that sometimes I also get back the value "nil" and not only the four entries from the table.

Both things must be easy to solve, but as newbie to lua and working on these small things for almost 4 hours now I just don't get what to change to make it work.

-- references
local mmDis

-- functions 
function randomText(event)
    display.remove(mmDis)
    local a = {"Banana!","Apple!","Potato","Pie"}

    com = (a[math.random(0.5,#a)])

    local mmDis = display.newText(tostring(com), 
        display.contentWidth*0.57, display.contentHeight*0.7,               
        display.contentWidth*0.9, display.contentHeight*0.8, "Calibri", 60)
end

    -- menu button
local textnew = display.newText("New", 0, 0, "Calibri", 40)
textnew.x = display.contentWidth*0.2
textnew.y = display.contentHeight*0.9

textnew:addEventListener ("tap", randomText )
Was it helpful?

Solution

It's hard to understand what you are trying to do because when you create textnew you have it in one position and size, while in randomeText() you seem to want to replace that text object with a new one, but you put it at a different pos and size. It appears you want to change the object's text every time you press on tap; in this case, you don't need to replace the text object, you just replace its text.

Also:

  • you have two "local mmDis", the second one will hide the first, not sure what you're after there
  • read carefully the docs for math.random
  • com is already a string so you don't need tostring

Try this code and let me know if this is not what you are after:

local menuTextOptions = {
    text = "New", 
    x = display.contentWidth*0.2,
    y = display.contentHeight*0.9,
    align = 'left',
    font = "Calibri", 
    fontSize = 40,
}
local textnew = display.newText(menuTextOptions)

-- functions 
function randomText(event)
    local a = {"Banana!","Apple!","Potato","Pie"}
    local com = a[math.random(1,#a)]
    textnew.text = com

    -- if you want to change position too:  
    -- textnew.x = display.contentWidth*0.2
    -- textnew.y = display.contentHeight*0.9

    -- if you want to change size too, but only used for multiline text:  
    -- textnew.width = display.contentWidth*0.9
    -- textnew.height = display.contentHeight*0.8
end

textnew:addEventListener ("tap", randomText )

Sometimes it looks like the button doesn't do anything when you tap but that's because the random number happens to be same as previous, you could put a loop to guard against that. Ig you actually want to change the pos and/or width, then the above code makes it clear where you should do that.

OTHER TIPS

So, that's the basic code (without any extras at the moment :)) how it should be. Big thanks to Scholli!:

local menuTextOptions = {
    text = "New", 
    x = display.contentWidth*0.2,
    y = display.contentHeight*0.9,
    align = 'left',
    font = "Calibri", 
    fontSize = 40,
}
local textnew = display.newText(menuTextOptions)

local replacement = display.newText(menuTextOptions)
replacement.y = display.contentHeight*0.5

-- functions 
function randomText(event)
    local a = {"Banana!","Apple!","Potato","Pie"}
    local com = a[math.random(1,#a)]
    replacement.text = com

end

textnew:addEventListener ("tap", randomText )
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top