如何让我的代码逻辑不再在Corona中不断增加分数

时间:2017-04-13 01:07:33

标签: lua corona state

下面是当箱子落在容器边界内时应该为分数加1的代码。

local score = 0
local thescore =  display.newText("Score " .. score,  150,430, native.systemFont , 19)
local function update()
    if (crate.x > side1.x and crate.x < side2.x and crate.y < shelf.y and crate.y > shelf.y - 50) then
            score = score + 1
            thescore.text = "Score " .. score
    end
end
timer.performWithDelay(1, update, -1)

我如何制作它,以便每次进入容器时,只有一次得分为1 ,而不是每隔毫秒将其保留在容器内?

1 个答案:

答案 0 :(得分:2)

状态变量

使用变量存储包的状态。首次在容器边界内找到它时,将变量设置为true并增加分数。下次调用update()时,如果该变量设置为true,则不会更改分数。另一方面,如果在容器外找到包,请将变量设置为false。它看起来像(伪代码):

local score = 0
local alreadyContained = false

local function update() 
    if crateIsInContainer() then
        if alreadyContained == false then
             alreadyContained = true
             score = score + 1
        end
    else
        alreadyContained = false
    end
end
timer.performWithDelay( 20, update )

顺便说一句,pointless比帧的持续时间更频繁地调用更新函数。如果您的config.luafps = 60,那么每17毫秒就有一帧。

使用物理

这可能对你的游戏来说太过分了,但是通过物理学,你可以使用物理实体作为传感器,并对重叠的不同阶段做出反应。这是documented here,我引用:

  

任何身体 - 或多元素身体的任何特定元素 - 都可以变成传感器。传感器不与其他物体进行物理交互,但是当其他物体通过它们时它们会产生碰撞事件。与传感器碰撞的物体将触发一个&#34;开始&#34;事件阶段,就像普通的非传感器对象一样,它们也会触发&#34;结束&#34;当它们退出传感器的碰撞边界时的事件阶段。

还要记住,物理机构的这种使用会检测重叠而不是遏制,这是你似乎感兴趣的内容。