我正在从一本书中学习并学习方向。我对代码event.type。
非常困惑以下是本书中的代码:
portrait = display.newText ("Portrait", display.contentWidth / 2,display.contentHeight / 2, nil,20)
portrait: setFillColor ( 1,1,1 )
portrait.alpha = 1
landscape = display.newText ("Landscape", display.contentWidth/ 2, display.contentHeight /2, nil, 20)
landscape: setFillColor (1,1,1)
landscape.alpha = 0
local function onOrientationChange (event)
if (event.type == 'landscapeRight' or event.type == 'landscapeLeft') then
local newAngle = landscape.rotation - event.delta
transition.to (landscape, {time = 1500, rotation = newAngle})
transition.to (portrait, {rotation = newAngle})
portrait.alpha = 0
landscape.alpha = 1
else
local newAngle = portrait.rotation - event.delta
transition.to (portrait, {time = 150, rotation = newAngle})
transition.to (landscape, {rotation = newAngle})
portrait.alpha = 1
landscape.alpha = 0
end
end
似乎整个方向更改功能适用于event.type。我不明白它是什么,我不明白它是什么(==
)。此外,当我更改字符串(在本例中为'landscapeRight'和'landscapeLeft')时,它也是相同的。它将采取任何价值,仍然可以正常运作。我对它的工作方式感到困惑,请解释event.type。
答案 0 :(得分:2)
使用'landscapeRight'
这样的字符串作为枚举文字是一种常见的Lua习语。
对于orientation
个事件,event.type
保留新的设备方向。
在您提供的代码段中,在定义onOrientationChange
后,您似乎没有调用或以其他方式引用Runtime
。您应该使用
Runtime:addEventListener('orientation', onOrientationChange)
对象
{{1}}
答案 1 :(得分:1)
我希望你接受MBlanc的回答,我只是要扩展到这里:orientation event.type是一个值,它是几个字符串之一,如MBlanc帖子中的链接所示。 Event.type永远不会是那些字符串以外的任何东西。所以你通过将比较更改为永远不会匹配event.type的字符串来做的事情总是在“else”分支中结束,就好像你的设备从不面向横向:
local function onOrientationChange (event)
if (event.type == 'blabla1' or event.type == 'blabla2') then
...do stuff -- but will never get run because event.type can never have those values
else -- so your program always ends up here:
...do other stuff...
end
end
这将使程序运行正常,除非当您的设备确实处于方向landscapeRight或左侧时,程序将执行“else”块而不是它应该执行的块(第一个块)。