Corona:ScoreText在旧版上写下新的分数

时间:2015-06-08 12:37:52

标签: lua corona scoring

我的代码将分数(最终分数)写入旧分数(不删除分数)所以当它再次计数时,我们实际上可以看到背面写的旧分数(玩家所拥有的最后一分)的柜台。 (当它显示新的高分时,我们也可以在后面看到旧的高分)

local physics = require "physics"
physics.start()

--physics.setContinuous( false ) 

local storyboard = require "storyboard"
local scene = storyboard.newScene()

display.setDefault( "anchorX", 0 )
display.setDefault( "anchorY", 0 )


--local mydata = require( "mydata" )
--mydata.score = 0
    score = 0

function scene:createScene(event)

local screenGroup = self.view

sky = display.newImage("bg.jpg")
sky.x = 820; sky.y = 0. sky.rotation = 90 
screenGroup:insert(sky)

mountain1 = display.newImage("montagne2.png")
mountain1.x = -200; mountain1.y = 600
mountain1.speed = 0.5
screenGroup:insert(mountain1)
end

local scoreNumber = display.newText(score, 400, 0, nil, 50)
    scoreNumber.xScale = 1.2
    scoreNumber.yScale = 1.2

    if scoreNumber then 
    scoreNumber:removeSelf()
    end

local function updateScore()
    score = score + 1
    scoreNumber.text = score
    --mydata.score = mydata.score + 1

end

    scoreTimer = timer.performWithDelay(100, updateScore, -1)



local scoreText = display.newText("score:", 0, 0, nil, 50)
    scoreText.xScale = 1.2
    scoreText.yScale = 1.2
    screenGroup:insert( scoreNumber)




end

function scene:exitScene(event)


    Runtime:removeEventListener("touch", touchScreen)
    Runtime:removeEventListener("enterFrame", mountain1)
    Runtime:removeEventListener("enterFrame", mountain2)
    Runtime:removeEventListener("enterFrame", mountain3)
    Runtime:removeEventListener("enterFrame", mountain4)
    Runtime:removeEventListener("enterFrame", missile1)
    Runtime:removeEventListener("enterFrame", obst1)
    Runtime:removeEventListener("enterFrame", obst2)
    Runtime:removeEventListener("enterFrame", obst3)
    Runtime:removeEventListener("enterFrame", obst4)
    Runtime:removeEventListener("enterFrame", obst5)
    Runtime:removeEventListener("enterFrame", obst6)
    Runtime:removeEventListener("collision", onCollision)
    timer.cancel(scoreTimer)
     timer.cancel(memTimer)

end

function scene:destroyScene(event)

end

scene:addEventListener("createScene", scene)
scene:addEventListener("enterScene", scene)
scene:addEventListener("exitScene", scene)
scene:addEventListener("destroyScene", scene)

return scene

1 个答案:

答案 0 :(得分:0)

我不是100%确定我们看到了足够的代码或者更重要的是正确的代码,但还有很多事情要发生。

local scoreNumber = display.newText(score, 400, 0, nil, 50)
scoreNumber.xScale = 1.2
scoreNumber.yScale = 1.2

if scoreNumber then 
     scoreNumber:removeSelf()
end

在此代码块中,您创建scoreNumber并立即将其删除。您也永远不会将其添加到场景的视图组:screenGroup:insert(scoreNumber)

local function updateScore()
    score = score + 1
    scoreNumber.text = score
    --mydata.score = mydata.score + 1
 end
 scoreTimer = timer.performWithDelay(100, updateScore, -1)

这可能会导致您的应用崩溃,因为您每隔100毫秒(1/10秒)调用updateScore,它会尝试引用您在其上方删除的scoreNumber。

local scoreText = display.newText("score:", 0, 0, nil, 50)
scoreText.xScale = 1.2
scoreText.yScale = 1.2

现在你已经创建了scoreText,但是我从未看到你将它插入到screenGroup中,也没有看到你更新它的值。

你还有很多其他事情要做。我没有看到你在哪里设置默认锚点(如果你是的话),如果不是,显示对象的中心是X和Y值。所以scoreNumber,它绘制的短暂时间将从左侧居中400px,从顶部居中0px。这至少使文本的上半部分脱离屏幕。然后你出于某种原因扩大规模。为什么不使用更大的字体? 50 * 1.2 = 60.然后scoreText被绘制为0,0这不仅将上半部分放在屏幕上,而且将左半部分放在屏幕上。

请记住,如果您希望Storyboard管理您的显示对象,则必须将它们插入到screenGroup中,您不必自行删除它们。