Exemplo n.º 1
0
    protected void checkHoverWindow(ref Vector3 mousePos, bool mouseDown)
    {
        IMouseEventCollect newWindow = null;

        // 模拟触摸状态下,如果鼠标未按下,则不会悬停在任何窗口上
        if (mouseDown || !mSimulateTouch)
        {
            // 计算鼠标当前所在最前端的窗口
            newWindow = getHoverWindow(ref mousePos);
        }
        // 判断鼠标是否还在当前窗口内
        if (mHoverWindow != null)
        {
            // 鼠标已经移动到了其他窗口中,发送鼠标离开的事件
            if (newWindow != mHoverWindow)
            {
                // 不过也许此时悬停窗口已经不接收输入事件了或者碰撞盒子被禁用了,需要判断一下
                if (mHoverWindow.isActive() && mHoverWindow.isHandleInput())
                {
                    mHoverWindow.onMouseLeave();
                }
                // 找到鼠标所在的新的窗口,给该窗口发送鼠标进入的事件
                newWindow?.onMouseEnter();
            }
        }
        // 如果上一帧鼠标没有在任何窗口内,则计算这一帧鼠标所在的窗口
        else
        {
            // 发送鼠标进入的事件
            newWindow?.onMouseEnter();
        }
        mHoverWindow = newWindow;
    }