Esempio n. 1
0
 // 注册按钮的拖拽监听,拖拽结束时丢弃物品
 private void addDragAndDrop(GButton btn)
 {
     btn.onTouchBegin.Add((EventContext evenContext) => {
         if (touchID == -1)
         {
             InputEvent inputEvent = (InputEvent)evenContext.data;
             touchID          = inputEvent.touchId;
             Vector2 localPos = GRoot.inst.GlobalToLocal(new Vector2(inputEvent.x, inputEvent.y));
             float posX       = localPos.x;
             float posY       = localPos.y;
             startX           = posX;
             startY           = posY;
             dragIcon.url     = btn.icon;
             dragIcon.SetXY(posX - dragIcon.width / 2, posY - dragIcon.height / 2);
             dragIcon.visible = true;
             evenContext.CaptureTouch();
         }
     });
     btn.onTouchMove.Add((EventContext evenContext) =>
     {
         InputEvent inputEven = (InputEvent)evenContext.data;
         if (touchID != -1 && inputEven.touchId == touchID)
         {
             Vector2 localPos = GRoot.inst.GlobalToLocal(new Vector2(inputEven.x, inputEven.y));
             float posX       = localPos.x;
             float posY       = localPos.y;
             dragIcon.SetXY(posX - dragIcon.width / 2, posY - dragIcon.height / 2);
         }
     });
     btn.onTouchEnd.Add((EventContext evenContext) => {
         InputEvent inputEvent = (InputEvent)evenContext.data;
         if (touchID != -1 && touchID == inputEvent.touchId)
         {
             Vector2 localPos = GRoot.inst.GlobalToLocal(new Vector2(inputEvent.x, inputEvent.y));
             // 计算偏移量,判断为点击还是丢弃
             float deltaX = Mathf.Abs(startX - localPos.x);
             float deltaY = Mathf.Abs(startY - localPos.y);
             float redio  = Mathf.Sqrt(deltaX * deltaX + deltaY * deltaY);
             // 在一个固定圆弧内
             if (redio < useRedio)
             {
                 Debug.Log("使用");
                 useGoods(btn);
             }
             else
             {
                 Debug.Log("丢弃");
                 dropGoods(btn);
             }
             touchID = -1;
         }
     });
 }
    public void StartDrag(GObject source, string icon, object sourceData, int touchPointID = -1)
    {
        if (_agent.parent != null)
        {
            return;
        }

        _sourceData = sourceData;
        _agent.url  = icon;
        GRoot.inst.AddChild(_agent);
        Vector2 pt = source.LocalToGlobal(new Vector2(0, 0));

        _agent.SetXY(pt.x, pt.y);
        _agent.StartDrag(null, touchPointID);
    }