2016-06-17 6 views
0

私は、コロナSDKを使用してNintendo Tetrisゲームのクローンバージョンを開発しています。画面上部に2つのテキストオブジェクトがあります:1つは現在のレベルを表し、もう1つは現在のスコアを表します。私がブロックに沿って記入するたびに、私のプログラムはこの行を消去し、いくつかのスコアと+1レベルを加えます。問題は、スコアとレベルの変数を更新してmyText.textを使用してテキストを更新すると、古いテキストを消去せず、古いテキストと重複する新しいテキストを作成することです。コロナSDK。ルアdisplay.newText() - 更新されたスコアテキストは、消去せずに古いものと重複しています。

私のコードは以下の通りです: 1)私はラインとアップデートのテキスト

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

3を消去機能を持っている)私のシーンの物乞い

local scoreText 
local levelText 

2で2つのローカル変数を宣言)シーン内:ショー(イベント)私はテキストを作成する

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

@ピグレット1)私はscene:show(event)を一度だけ呼び出します。このイベントには2つの段階があります:「意志」と「した」。私が自分の疑問を提起したとき、私のコードは「意志」段階で実行されました。それから、私はそれをカットして「did」フェーズに貼り付け、オーバーラップはもう起こりません。なぜこのように動作するのか分かりません。 2)関数eraseLinesは、画面上のテトリスブロックの行を消去し、テキストを更新する。おそらくそれはそこのテキスト操作フォームを除外して、それを別の関数として作るほうがよいでしょう。 –

答えて

2

ショーイベントが2回(フェーズ)willdidと呼ばれるため、スコア/レベルラベルを2回追加している瞬間です。シーンを作成するときに表示オブジェクトを追加します。

-- 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 
関連する問題