• Corona SDK新手教程:tap、touch和multitouch的区别


    本教程主要讲解一下tap、touch和multitouch的区别,以及如何处理每种方式。

    如果是新手的话,可以先复习一下之前的文章 CoronaSDK之交互系统和事件检测

    1 Tap检测

    Tap事件是用户和触屏之间交互最基础的一种。本质上来说,一个tap就是表示用户用手指接触到屏幕,然后在差不多附近的位置再抬起的过程。这个tap事件只有在用户在同一个点接触和放开屏幕,才作为tap事件成功的发生。

    在Corona里,对于大部分display object,你可以注册一个tap事件监听器来监听tap事件:

    local function myTapListener( event )
    
        --code executed when the button is tapped
        print( "object tapped = "..tostring(event.target) )  --'event.target' is the tapped object
        return true
    end
    
    local myButton = display.newRect( 100, 100, 200, 50 )
    myButton:addEventListener( "tap", myTapListener )  --add a "tap" listener to the object

    来自tap事件的event参数包括下列字段:

    • event.target:被触碰的对象(display object)引用
    • event.name:"tap"字符串
    • event.numTaps:屏幕上tap的个数。默认两次tap序列之间的延迟为0,但是这个事件可以通过system.setTapDelay()函数来调整。
    • event.x / event.y:在屏幕坐标系里,tap发生的位置的x和y

    不像touch event,tap事件并不包括一个phase属性 -- 这个tap就是一个单一的动作,同时包括了接触和放开。所以你不需要以任何形式处理阶段信息(phase)。

    1.1 过滤双击(double tap):

    使用event.numTaps属性,你可以轻易确定一个对象是否被双击,并且区别在这个对象上的多次单击。

    为了做到这一点,只要确保event.numTaps等于2,并且忽略其他所有情况(return true):

    local function myTapListener( event )
    
        if ( event.numTaps == 2 ) then
            print( "object double-tapped = "..tostring(event.target) )
        else
            return true
        end
    end
    
    local myButton = display.newRect( 100, 100, 200, 50 )
    myButton:addEventListener( "tap", myTapListener )

    2 Touch检测

    Touch事件提供了更高级的屏幕交互。通过touch事件,你可以检测到用户首次接触到屏幕,以及什么时候放开屏幕。你也可以跟踪用户手指在屏幕上的滑动轨迹。为了完成这个目标,Corona提供了event.phase属性的四种状态:

    • "began":表示手指刚接触到屏幕
    • "moved":表示手指正在屏幕上移动
    • "ended":表示手指刚从屏幕上放开
    • "cancelled":表示系统取消了对这次接触的跟踪(不要和ended混淆了)

    在Corona里,你可以监听在大多数显示对象上注册的touch事件监听器:

    local function myTouchListener( event )
    
        if ( event.phase == "began" ) then
            --code executed when the button is touched
            print( "object touched = "..tostring(event.target) )  --'event.target' is the touched object
        elseif ( event.phase == "moved" ) then
            --code executed when the touch is moved over the object
            print( "touch location in content coordinates = "..event.x..","..event.y )
        elseif ( event.phase == "ended" ) then
            --code executed when the touch lifts off the object
            print( "touch ended on object "..tostring(event.target) )
        end
        return true  --prevents touch propagation to underlying objects
    end
    
    local myButton = display.newRect( 100, 100, 200, 50 )
    myButton:addEventListener( "touch", myTouchListener )  --add a "touch" listener to the object

    这里event的属性包括下列字段:

    • event.id:一个唯一的标识,用来区别透过不同的touch事件传来的多处触摸。详见后下节multitouch。
    • event.target:被接触到的对象(display object)
    • event.name:"touch"字符串
    • event.phase:上面所描述的触摸的阶段
    • event.time:自从应用开始运行到现在的毫秒数,用来累计时间间隔
    • event.x / event.y:在屏幕坐标系里,接触位置的x和y
    • event.xStart / event.yStart:在屏幕坐标系里,触摸序列发生的began阶段时的位置的x和y

    3 Multitouch检测

    在应用中启动多点触控(multitouch)可以让检测和处理,同时在屏幕上多处发生的用户触摸事件。

    因为默认情况下,multitouch是被关闭的,所以你必须通过system.activate()函数来启动它。注意,多点触控功能只能在实际真机上测试,而不能在Corona模拟器里测试。

    system.activate( "multitouch" )

    开启多点触控以后,注册到对象上的touch事件监听器,和前面描述touch检测一样。然后,通过比较event.id属性,来确定touch事件序列中哪一个触碰被返回。

    system.activate( "multitouch" )
    
    local myRectangle = display.newRect( 0, 0, 320, 480 )
    
    local function multitouchListener( event )
        print( "Phase: "..event.phase )
        print( "Location: "..event.x..","..event.y )
        print( "Unique touch ID: "..tostring(event.id) )
        print( "----------" )
        return true
    end
    
    myRectangle:addEventListener( "touch", multitouchListener )
  • 相关阅读:
    机器学习入门-文本数据-使用聚类增加文本的标签属性
    机器学习入门-文本特征-使用LDA主题模型构造标签 1.LatentDirichletAllocation(LDA用于构建主题模型) 2.LDA.components(输出各个词向量的权重值)
    机器学习入门-文本特征-word2vec词向量模型 1.word2vec(进行word2vec映射编码)2.model.wv['sky']输出这个词的向量映射 3.model.wv.index2vec(输出经过映射的词名称)
    机器学习入门-数值特征-对数据进行log变化
    python中datetime.strptime(),strftime()的应用
    css中的','、'>'、'+'、'~'
    js中const,var,let区别
    css的#和.的区别
    js实现拖放
    [Usaco2005]Part Acquisition
  • 原文地址:https://www.cnblogs.com/leezj/p/4238838.html
Copyright © 2020-2023  润新知