当屏幕被轻敲不同的次数(仅一次和两次)时,我试图对物体施加不同的力量。
我不确定我做错了什么。这是代码:
local function moveUp(event)
if event.numTaps > 1 then
jumper:applyForce( 0, 250, jumper.x, jumper.y )
elseif event.numTaps < 1 then
jumper:applyForce( 0, 0, jumper.x, jumper.y )
else
jumper:applyForce( 0, 200, jumper.x, jumper.y )
end
end
-- start game
createPlayScreen( )
system.setTapDelay( 2 )
Runtime:addEventListener("tap", moveUp)
我已经尝试将Runtime:addEventListener
移动到该功能中。我还尝试过event.numTaps == 2
和event.numTaps == 1
,但无济于事。
问题是 TapDelay 拒绝等待第二次点击。
非常感谢任何和所有帮助
P.S。为了测试的目的,我将秒设置为2,但是一旦我发现这有效,我将把时间缩短到0.3或者其他什么
答案 0 :(得分:0)
您使用的策略存在几个问题。首先,它不可扩展(超过两次点击)。但是好吧,也许你100%肯定你永远不需要超过2个水龙头。下一个问题是event.numTaps
只能是1或2,但你的监听器测试&lt; 1!这永远不会发生。下一个问题是,当您点击两次时,至少在模拟器中(未在设备上测试),您会收到两个事件:一个用于第一次点击numTaps = 1
,另一个用于第二次点按numTaps = 2
。换句话说,电晕引擎在发出单击事件之前不会等待,以了解在某个时间范围内是否发生第二次敲击事件。因此,您可以获得两次点击事件以进行两次点击事件,无法在处理程序中了解您是否应该等待&#34;等待&#34;查看是否可能在允许的延迟范围内发生另一次点击以构成&#34;双击&#34;事件而不是。
您需要做的是创建自己的N-tap事件生成器。无论何时发生敲击,请检查您的计时器是否已启动。如果是这样,请增加分接头数并重置定时器。如果没有,请启动稍后会暂停一段时间的计时器。如果在该延迟中没有其他点击,则您保存的计数是您的点击编号。如果计时器到期,请重置计数器。我创建了一些执行此操作的函数,并将它们全部放在一个表格中#34; object&#34;:
local tapEvents = {
measureInterTapTime = false, -- set to true to measure how fast you can tap!
onTapHandler = nil, -- set this to your handler
-- implementation details
tapTimer = nil,
tapCounter = 0,
tapEventTime = 0,
doneTap = function(self, event)
self.tapTimer = nil
if self.onTapHandler then
self.onTapHandler(self.tapCounter)
end
self.tapCounter = 0
self.tapEventTime = 0
end,
-- end implementation details
tap = function(self, event)
self.tapCounter = self.tapCounter + 1
if self.tapTimer ~= nil then
timer.cancel(self.tapTimer)
self.tapTimer = nil
end
local delayMS = 250
self.tapTimer = timer.performWithDelay(delayMS, function(e) self:doneTap(e) end, 1)
-- check how much time between taps, for interest:
if self.measureInterTapTime then
if self.tapEventTime ~= 0 then
local interTapTime = system.getTimer() - self.tapEventTime
print("Time (ms) between taps:", interTapTime)
end
self.tapEventTime = system.getTimer()
end
end,
}
tapEvents.onTapHandler = function(tapCounter)
print(tapCounter .. "-tap event")
end
-- because tapEvents contains a 'tap' function, will get called automatically with self:
Runtime:addEventListener('tap', tapEvents)
这可以无限制地捕获N-tap事件!我已经包含了一个你可以设置为true的标志,如果你想打印单个分接头之间的ms延迟,那么你可以确定最佳延迟应该是什么(你不希望延迟太短或者你可能无意中断N点击两个较小的事件;你也不希望它太长,或者用户必须明显等待表示我的多重事件结束&#34;)。
答案 1 :(得分:-1)
点击事件必须添加到显示对象,而不是添加到运行时。
例如,如果您有显示对象跳线,请使用:
jumper:addEventListener("tap", moveUp)