下面是当箱子落在容器边界内时应该为分数加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 ,而不是每隔毫秒将其保留在容器内?
答案 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.lua
有fps = 60
,那么每17毫秒就有一帧。
这可能对你的游戏来说太过分了,但是通过物理学,你可以使用物理实体作为传感器,并对重叠的不同阶段做出反应。这是documented here,我引用:
任何身体 - 或多元素身体的任何特定元素 - 都可以变成传感器。传感器不与其他物体进行物理交互,但是当其他物体通过它们时它们会产生碰撞事件。与传感器碰撞的物体将触发一个&#34;开始&#34;事件阶段,就像普通的非传感器对象一样,它们也会触发&#34;结束&#34;当它们退出传感器的碰撞边界时的事件阶段。
还要记住,物理机构的这种使用会检测重叠而不是遏制,这是你似乎感兴趣的内容。