2016-06-17 30 views
0

我正在開發使用Corona SDK的Nintendo俄羅斯方塊遊戲的克隆版本。我的屏幕上方有兩個文字對象:一個代表當前的等級,另一個代表當前的得分。每當我填充塊時,我的程序會擦除此行並添加一些分數和+1級別。問題在於,一旦我更新了分數和級別變量並使用myText.text來刷新我的文本,它就不會擦除舊文本並創建與舊文本重疊的新文本。Corona SDK。 Lua中。 display.newText() - 我更新的分數文本重疊舊的沒有擦除

我的代碼如下: 1)我在現場的乞討聲明瞭兩個局部變量

local scoreText 
local levelText 

2)我有功能刪除行和更新文本

function eraseLines() 
      -- some code that erases lines 
      scores = scores + 10 
      scoreText.text = "Score:"..scores 
      level = level + 1 
      levelText.text = "Level:"..level 
end 

3 )場景:顯示(事件)我創建我們的文本

function scene:show(event) 
    -- some code  
    scoreText = display.newText("Score:"..scores, halfW*0.5, 20) 
    levelText = display.newText("Level:".. level, halfW*1.5, 20) 
    sceneGroup:insert(scoreText) 
    sceneGroup:insert(levelText) 
    scoreText:setFillColor(0, 0, 0) 
    levelText:setFillColor(0, 0, 0) 
end 

請幫我找爲什麼發生重疊

+0

你打電話給場景:多次顯示(事件)嗎? 對於更新文本的函數,eraseLines也是一個非常糟糕的名字。 爲什麼不把它命名爲updateScoreLevel或者是爲了避免混淆 – Piglet

+0

@Piglet 1)我只調用場景:show(event)一次。在這個事件中有兩個階段:「將」和「做」。當我提出我的問題時,我的代碼在「意志」階段執行。然後我剪切並粘貼到「完成」階段,重疊不再發生。我不確定它爲什麼這樣工作。 2)eraseLines函數會擦除屏幕上的Tetris塊的行並更新文本。可能最好排除那裏的文本處理形式,並將其作爲一個單獨的函數。 –

回答

2

目前您正在添加兩次得分/等級標籤,因爲該演出事件被稱爲兩次(階段)willdid。在創建場景時添加顯示對象。

-- 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 
    scoreText = display.newText("Score: 0", halfW * 0.5, 20) 
    levelText = display.newText("Level: 0", halfW * 1.5, 20) 
    sceneGroup:insert(scoreText) 
    sceneGroup:insert(levelText) 
    scoreText:setFillColor(0, 0, 0) 
    levelText:setFillColor(0, 0, 0) 

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) 
     scoreText.text = "Score: " .. score 
     levelText.text = "Level: " .. level 

    elseif (phase == "did") then 
     -- Code here runs when the scene is entirely on screen 

    end 
end