zoukankan      html  css  js  c++  java
  • 关于移动设备几种屏幕输入方式的小结

      移动设备和的输入和电脑端的输入有一定的差别,移动设备的输入并没有电脑输入那么灵活,但是移动屏幕的

    触屏缺给了我们针对一些事件的处理方式,在此小结了几种常见的移动输入的种类,同时也作为学习的一个进度的一个

    小结。

    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    public class InputEventMangner : MonoBehaviour
    {
    
    
    
        public delegate bool InputManager();
        public static event InputManager OnSlider;
        public static event InputManager OnClick;
        public static event InputManager OnDoubleClick;
        public static event InputManager OnStayTouch;
        public static event InputManager OnScaleTouch;
    
    
        //定义的变量
        Vector2 vecDeltaArea;//滑动的区域
        float StayTime;//手指停留时间
        bool isSecondTouch;
        float firstTouchTime = 0f;
        float secondTouchTime = 0f;
    
        // 处理缩放的变量
        Vector2 firstFinger = Vector2.zero;
        Vector2 secendFinger = Vector2.zero;
        float DistanceTwoFinger = 0f;
        List<float> DistanceTwoFingerList;
    
        void Start()
        {
            vecDeltaArea = Vector2.zero;
            StayTime = 0f;
            isSecondTouch = false;
            DistanceTwoFingerList = new List<float>();
        }
    
        void OnEnable()
        {
            //事件注册
            OnSlider += Slider;
            OnClick += Click;
            OnDoubleClick += DoubleClick;
            OnStayTouch += StayTouch;
            OnScaleTouch += ScaleTouch;
        }
    
        void OnDisable()
        {
            //事件的取消
            OnSlider -= Slider;
            OnClick -= Click;
            OnDoubleClick -= DoubleClick;
            OnStayTouch -= StayTouch;
            OnScaleTouch -= ScaleTouch;
        }
       
        //用到Update函数来检测事件的触发
    
        void Update()
        {
            //检测手指滑动
            if(Input.touchCount==1&&(Input.GetTouch(0).phase==TouchPhase.Moved))
            {
                if(OnSlider!=null)
                {
                    OnSlider();
                }
                vecDeltaArea.x += Input.GetTouch(0).deltaPosition.x;
                vecDeltaArea.y += Input.GetTouch(0).deltaPosition.y;
    
                if(vecDeltaArea.x>100)
                {
                    //左滑动
                }
    
                else if(vecDeltaArea.x<-100)
                {
                    //右滑动
                }
    
                if(vecDeltaArea.y>100)
                {
                    //上滑动
                }
    
                else if(vecDeltaArea.y<-100)
                {
                    //下滑动
                }
            }
    
            //双击操作||这里有两种方法,
            //方法一:
            if (Input.GetTouch(0).tapCount == 2)
            {
                if (OnDoubleClick != null)
                {
                    OnDoubleClick();
                }
            }
    
    
            //方法二:
            if(Input.touchCount==1&&(Input.GetTouch(0).phase==TouchPhase.Began))
            {
                if(isSecondTouch)
                {
                    secondTouchTime = Time.time;
                    if(secondTouchTime-firstTouchTime>0.02f&&secondTouchTime-firstTouchTime<0.3f)
                    {
                        //发现双击事件
                    }
                }
                isSecondTouch = true;
                firstTouchTime = Time.time;
            }
    
    
            //检测停留识别
            if(Input.touchCount==1&&(Input.GetTouch(0).phase==TouchPhase.Stationary))
            {
                StayTime += Input.GetTouch(0).deltaTime;
                if(StayTime>1&&OnStayTouch!=null)
                {
                    //发现停留
                }
            }
    
    
            //检测双手指的缩放操作
            if(Input.touchCount==2&&(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved))
            {
                if(OnScaleTouch!=null)
                {
                    firstFinger = Input.GetTouch(0).position;
                    secendFinger = Input.GetTouch(1).position;
                    DistanceTwoFinger = Vector2.Distance(firstFinger,secendFinger);
                    DistanceTwoFingerList.Add(DistanceTwoFinger);
    
                    //
                    if(DistanceTwoFingerList.Count>=10)
                    {
                        if(DistanceTwoFingerList[0]>DistanceTwoFingerList[9])
                        {
                            //缩小的操作
                        }
    
                        else
                        {
                           //放大的操作
                        }
    
                        DistanceTwoFingerList.Clear();
                    }
                }
            }
        }
    
    
    
        //当手指在屏幕滑动的时候
        bool Slider()
        {
            //定义一个变量储存bool
            bool IsSlider = false;
    
            //要触发的操作,将值值为true
            IsSlider = true;
    
            return IsSlider;
        }
    
    
        //当手指单击操作的时候
        bool Click()
        {
            bool isClick = false;
            //触发的操作
    
            isClick = true;
    
            return isClick;
        }
    
        //当手指双击的时候
        bool DoubleClick()
        {
            bool isDoubleClick = false;
    
            //触发的操作
            isDoubleClick = true;
    
            return isDoubleClick;
        }
    
        //当手指停留在屏幕上的时候
        bool StayTouch()
        {
            bool isStayTouch = false;
            //触发了操作
            isStayTouch = true;
    
            return isStayTouch;
        }
    
        //当手指缩放的时候
        bool ScaleTouch()
        {
            bool isScaleTouch = false;
            
            //触发了操作
            isScaleTouch = true;
            return isScaleTouch;
        }
    }

      以上便是我此次小结的全部内容,希望以后能不断学习,有一个系统的完善

  • 相关阅读:
    继承—泛型
    单例模式
    继承 4—Monkey
    继承 3—A B E
    继承 2—people
    继承 1—Mucic
    面向对象—汽车
    面向对象—封装—汽车
    Linux下查看CPU型号,内存大小,硬盘空间的命令
    redis源码——数据结构与对象
  • 原文地址:https://www.cnblogs.com/springword/p/5978838.html
Copyright © 2011-2022 走看看