2013-07-30 2 views
0

Здесь при нажатии кнопкиКак перезаписать ранее созданный newText объект

local politeButton = widget.newButton 
{ 

left = 35, 
top = 335, 
width = 70, 
height = 70, 
defaultFile = "images/politeRu.png", 
overFile = "images/politeWhiteRu.png", 
onPress = politeGenerator, 
} 

и вот функция (на самом деле это закодировано вверх над кнопкой)

math.randomseed(os.time()) 
local function politeGenerator() 

local firstRandomPart = math.random(1,3) 
local secondRandomPart = math.random(1,3) 
local thirdRandomPart = math.random(1,3) 

local firstComplPart = {"I love", "I need", "I beg"} 
local secondComplPart = {" you like mad ", " the color of your eyes ", " your lips "} 
local thirdComplPart = {"and I wish you are going to be mine!", "and I am shivering!", "and this is all I want!"} 

local politeCompliment = firstComplPart[firstRandomPart]..secondComplPart[secondRandomPart]..thirdComplPart[thirdRandomPart] 

local complimentItself = display.newText(politeCompliment, 30, 150, 200, 200, "Lobster", 18) 

end 
Я создаю кнопку с функцией под названием

Хорошо, теперь я вижу случайный текст в симуляторе. Но когда я снова нажимаю кнопку, старый текст не исчезает, и новый текст появляется в старом тексте и так далее. Но мне нужно переписывать текст каждый раз, когда нажимаете кнопку. Я пробовал event.phase == "began", я пробовал complimentItself:removeSelf(), но все напрасно. Может ли кто-нибудь помочь, пожалуйста? Я просто не понимаю, почему переменная не перезаписывается, когда я нажимаю кнопку.

+0

ли 'complimentItself' новый виджет, который содержит текст, который вы только что создали? Если это так, вы теряете ссылку на нее, когда функция выходит, и вы не можете ее удалить позже. Поэтому каждый раз через функцию вы создаете новый виджет и никогда не удаляете старые. Вам нужно сохранить старую ссылку и удалить ее с экрана, который я представляю (хотя я ничего не знаю о короне). –

+0

Etan, спасибо за ваше участие, ваше предложение имеет смысл для меня, но я до сих пор не получаю «как», или я не понимаю, где именно моя ошибка. – pulp

+0

Вы используете глобальную (или внешнюю локальную) для хранения старой ссылки и удаляете ее, когда politeGenerator запускается снова, или вы узнаете, как подключить какой-либо другой механизм (событие, сигнал и т. Д.), Чтобы текстовый виджет знал, что ему нужно удалить себя. Я не могу быть более конкретным, так как я не знаю достаточно о короне. Глобальный/внешний локальный маршрут, безусловно, прост. –

ответ

1

вы можете изменить свой текст с помощью .text, чтобы изменить старый текст, и я закодировал ваш код таймером, чтобы увидеть, что текст меняется, проблема вашего кода заключается в том, что вы вызываете функцию politeGenerator(), вы всегда инициализируете локальная переменная complimentItself не будет перезаписывать существующий текст, а создать новый перекрывающий старый текст

local firstComplPart = {"I love", "I need", "I beg"} 
local secondComplPart = {" you like mad ", " the color of your eyes ", " your lips "} 
local thirdComplPart = {"and I wish you are going to be mine!", "and I am shivering!", "and this is all I want!"} 

local politeCompliment = firstComplPart[firstRandomPart]..secondComplPart[secondRandomPart]..thirdComplPart[thirdRandomPart] 
local complimentItself = display.newText(politeCompliment, 30, 150, 200, 200, "Lobster", 18) 


local function listener() 

politeCompliment = firstComplPart[math.random(1,3)]..secondComplPart[math.random(1,3)]..thirdComplPart[math.random(1,3)] 
complimentItself.text = politeCompliment 
end 

timer.performWithDelay(1000, listener, 0) 
+0

Да! Это помогает! Спасибо! Здесь мне просто нужно поместить функцию complimentItself в нужное место в коде, и все сработало! – pulp

0

Я использую эту функцию для создания и обновления текстовых объектов. Это очень просто:

function createText(text, xPos, yPos, fontSize, color, refPoint) 
    local myText = display.newText("", 0, 0, native.systemFont, fontSize) 
    myText.text = text 
    if refPoint == "CL" then 
     myText:setReferencePoint(display.CenterLeftReferencePoint) 
    elseif refPoint == "CR" then 
     myText:setReferencePoint(display.CenterRightReferencePoint) 
    elseif refPoint == "C" then 
     myText:setReferencePoint(display.CenterReferencePoint) 
    end 
    myText.x = xPos 
    myText.y = yPos 

    if color then myText:setTextColor(color[1], color[2], color[3]) 
    else myText:setTextColor(255, 255, 255) end 

    function myText:update(t, refPoint) 
     myText.text = t.text or myText.text 
     myText.size = t.fontSize or myText.size 

     if refPoint == "CL" then 
      myText:setReferencePoint(display.CenterLeftReferencePoint) 
     elseif refPoint == "CR" then 
      myText:setReferencePoint(display.CenterRightReferencePoint) 
     elseif refPoint == "C" then 
      myText:setReferencePoint(display.CenterReferencePoint) 
     end 

     myText.x = t.xPos or myText.x 
     myText.y = t.yPos or myText.y 
    end 

    return myText 
end 

Пример:

local myText = createText("Random text", 50, 160, 20, { 0, 0, 0 }, "C") 
myText:update({ text = "Updated random text", size = 30, xPos = 400, yPos = 300 }, "C") 
+0

Благодарим вас за внимание, я собираюсь поиграть с вашей функцией, чтобы узнать, соответствует ли она моим потребностям! – pulp

Смежные вопросы