Problems while removing a text using :removeSelf()

Hello everyone ! I have a problem while trying to remove a display.newText variable in my game.

When I try to remove it I get an error telling me the var I want to remove is a nil value (but of course it is not nil).
Code looks like this:

local letter = display.newText(“content”, 0, 0, “Minecraftia”, 14.5)

[…]

letter:removeSelf() <- this point is the critical one

Thanks everyone, I hope someone will help me.

Instead letter:removeSelf() try display.remove(letter)

[quote name=“JonPM” post=“203914” timestamp=“1378925843”]Instead letter:removeSelf() try display.remove(letter)[/quote] I tried right now; I had no errors but nothing happened; text didn’t disappear :frowning:

Right before you call display.remove (or removeSelf()) put this:

print(letter)

print(letter.text)

The first should return a table, the second should return “content”.  If not then you are doing something else in your code that is modifying letter

[quote name=“JonPM” post=“203919” timestamp=“1378927981”]Right before you call display.remove (or removeSelf()) put this: print(letter) print(letter.text)   The first should return a table, the second should return “content”.  If not then you are doing something else in your code that is modifying letter[/quote] It tells me letter is a var containing a nil value. And it prints “nil” to console (obviously) But it is strange because it is not nil ! The function is something like this: local function showletter (event) Local letter If(event.phase==“ended”) then If(laboratory[“isLetterRead”] == false) then letter = display.newText(“text”, display.viewableContentWidth*0.5,display.viewableContentHeight*0.5,“Minecraftia”,12.5) laboratory[“isLetterRead”] = true return End print(letter) print(letter.text) display.remove(letter) laboratory[“isLetterRead”] = false return end end

This is because your are telling it to remove letter regardless if it has been created or not.  You have to use an If Else statement:

local function showletter (event) local letter If(event.phase=="ended") then If(laboratory["isLetterRead"] == false) then letter = display.newText("text", display.viewableContentWidth\*0.5,display.viewableContentHeight\*0.5,"Minecraftia",12.5) laboratory["isLetterRead"] = true return else print(letter) print(letter.text) display.remove(letter) laboratory["isLetterRead"] = false return end end

[quote name=“JonPM” post=“203933” timestamp=“1378931094”]This is because your are telling it to remove letter regardless if it has been created or not.  You have to use an If Else statement:  

local function showletter (event) local letter If(event.phase=="ended") then If(laboratory["isLetterRead"] == false) then letter = display.newText("text", display.viewableContentWidth\*0.5,display.viewableContentHeight\*0.5,"Minecraftia",12.5) laboratory["isLetterRead"] = true return else print(letter) print(letter.text) display.remove(letter) laboratory["isLetterRead"] = false return end end

[/quote] Tomorrow I will try this and see if it will work ! Thanks a lot JonPM !

you’re creating “letter” with local scope, so that reference “disappears” after first pass thru the event handler.

Instead letter:removeSelf() try display.remove(letter)

[quote name=“JonPM” post=“203914” timestamp=“1378925843”]Instead letter:removeSelf() try display.remove(letter)[/quote] I tried right now; I had no errors but nothing happened; text didn’t disappear :frowning:

Right before you call display.remove (or removeSelf()) put this:

print(letter)

print(letter.text)

The first should return a table, the second should return “content”.  If not then you are doing something else in your code that is modifying letter

[quote name=“JonPM” post=“203919” timestamp=“1378927981”]Right before you call display.remove (or removeSelf()) put this: print(letter) print(letter.text)   The first should return a table, the second should return “content”.  If not then you are doing something else in your code that is modifying letter[/quote] It tells me letter is a var containing a nil value. And it prints “nil” to console (obviously) But it is strange because it is not nil ! The function is something like this: local function showletter (event) Local letter If(event.phase==“ended”) then If(laboratory[“isLetterRead”] == false) then letter = display.newText(“text”, display.viewableContentWidth*0.5,display.viewableContentHeight*0.5,“Minecraftia”,12.5) laboratory[“isLetterRead”] = true return End print(letter) print(letter.text) display.remove(letter) laboratory[“isLetterRead”] = false return end end

This is because your are telling it to remove letter regardless if it has been created or not.  You have to use an If Else statement:

local function showletter (event) local letter If(event.phase=="ended") then If(laboratory["isLetterRead"] == false) then letter = display.newText("text", display.viewableContentWidth\*0.5,display.viewableContentHeight\*0.5,"Minecraftia",12.5) laboratory["isLetterRead"] = true return else print(letter) print(letter.text) display.remove(letter) laboratory["isLetterRead"] = false return end end

[quote name=“JonPM” post=“203933” timestamp=“1378931094”]This is because your are telling it to remove letter regardless if it has been created or not.  You have to use an If Else statement:  

local function showletter (event) local letter If(event.phase=="ended") then If(laboratory["isLetterRead"] == false) then letter = display.newText("text", display.viewableContentWidth\*0.5,display.viewableContentHeight\*0.5,"Minecraftia",12.5) laboratory["isLetterRead"] = true return else print(letter) print(letter.text) display.remove(letter) laboratory["isLetterRead"] = false return end end

[/quote] Tomorrow I will try this and see if it will work ! Thanks a lot JonPM !

you’re creating “letter” with local scope, so that reference “disappears” after first pass thru the event handler.