使用定时器更改文本

我想在几秒钟后更改文本对象的字符串。这是代码:

  if scoretoShow then
aAscoretext = display.newText( scoretoShow.."/8", 200, 200, "Comic Sans MS", 30)
else
aAscoretext = display.newText( "0/8", 200, 200, "Comic Sans MS", 30)
end
aAscoretext:setFillColor( 0.4 )
aAscoretext.x = Letterbackground.x
aAscoretext.y = Letterbackground.y + Letterbackground.width/3

   if type(scoreChange) == "number" then
for f = 0, scoreChange, 1 do
    print("f")
        print(f)

timer.performWithDelay( timeforChange-(f*(timeforChange/scoreChange)),
function()
 aAscoretext.text = "HELLO!"
Letterbackground:setFillColor( gradients[newScore-f+1] )
audio.play(Wobble)
end)

然而,如果我把“aAscoretext.text = "HELLO!"”放在“print(f)”下面,那么它就正常工作了。

谢谢。

点赞
用户3455883
用户3455883

for 循环中的所有对 timer.performWithDay() 的调用可能不是按照你期望的方式执行。我发现如果在 TextObject 中更改 text 属性的监听器需要在延迟后再次调用自身以进行更改的另一个步骤,会更容易一些。

这将演示我的意思。假设您有一个显示分数的 TextObject“score”和两个变量 currentScorenewScore,其中 newScore > currentScore,且两者都是整数值。如果要让分数显示从 currentScorenewScore “开始计数”,可以这样做:

local currentScore = 0

--
-- 当分数需要改变时调用此函数
--
local function newScoreToDisplay( newScore )

    local countingInterval = 100 -- 我们希望将显示的分数每 100 毫秒加 1

    local function adjustScoreDisplay( event )

       if currentScore < newScore then
           currentScore = currentScore + 1
           score.text = tostring( currentScore ) -- score 是一个 Corona TextObject
           timer.performWithDelay( countingInterval, adjustScoreDisplay )
       end
    end

    -- 如果确实需要调整分数,则首次调用 adjustScore()
    if currentScore < newScore then
        timer.performWithDelay( 0, adjustScore ) --立即进行第一次更改
    end
end
2017-04-26 12:23:46