补充1:
有时,有的游戏需要第三种模式的摇杆,即摇杆可以全屏跟随点击点移动,同时,要求点击屏幕任意处可以调用普通攻击的输入。因为拖拽也会产生一次点击,但是拖拽的时候我们并不想产生普通的效果。这是就需要进行额外的处理。
using UnityEngine;
using System;
/// <summary>
/// 副本人物移动控制
/// </summary>
public class CharTouchInput : TouchEvtsHandlerBase
{
private Vector2 currentDir;
private bool isNormalAtk = true;
protected override void Start()
{
base.Start();
Action acClick = ActionClick;
Action acDown = ActionClickDown;
Action acClickUp = ActionClickUp;
Action<Vector2> acDrag = ActionDrag;
base.RegisterTouchEvts(acClick, acDown, acClickUp, acDrag);
}
private void ActionClick()
{
}
private void ActionClickDown()
{
}
private void ActionClickUp()
{
//Debug.Log("ActionClickUp");
currentDir = Vector2.zero;
//BattleSys.Instance.SetMoveDir(Vector2.zero);
EventManager.DispatchEvent(EventTypeList.TouchCtlEvt, currentDir.normalized);
//因为每次拖拽结束时也会产生一次ActionClickUp,所以需要进行一下判断
if (isNormalAtk)
{
//EventManager.DispatchEvent(EventTypeList.TouchClickUp);
//Debug.Log("普攻");
}
isNormalAtk = true;
}
private void ActionDrag(Vector2 dir)
{
//Debug.Log("ActionDrag : " + dir);
currentDir = dir.normalized;
//BattleSys.Instance.SetMoveDir(dir);
EventManager.DispatchEvent(EventTypeList.TouchCtlEvt, dir);
isNormalAtk = false;
}
}
如上代码所示,在点击ClickUp时,进行是否是普攻判断,在拖拽时ActionDrag比ActionClickUp先执行,所以ActionDrag时对isNormalAtk 进行标记,排除是普通攻击,在ActionClickUp的最后再进行恢复。
补充2:
有时需要在摇杆处实现,双击的响应,比如双击实现闪烁技能。
private void ActionClick()
{
if (Time.time - lastClickTime < 0.2)
{
EventManager.DispatchEvent(EventTypeList.TouchDoubleClick);
}
lastClickTime = Time.time;
}
如上,在ActionClick里进行一个时间上的间隔判断即可实现。
网友评论