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