安卓手机外接鼠标,识别不了鼠标事件

发布apk后手机连接鼠标无法识别点击,已测试多种事件注册方式。各位大大有没什么办法能解决这个问题

同求解决方案

正好遇到这里回复下:


第一行是手机触屏的事件类型是TOOL_TYPE_FINGER
第二行是原生鼠标事件类型是TOOL_TYPE_MOUSE

通知到ts层
安卓外接鼠标返回的是KEY_DOWN,和KEY_UP事件,不触发button

有解决方案吗

不知道key_up,key_down的event有没位置数据。我这个没测。可以测一下看看。看上图的MotionEvent,安卓端位置数据是拿到的。

处理过pc游戏遥控器按键响应和云端按键响应,上下左右确定的key是不一样的,有的判断了五个标记

找到一个简单粗暴的方法 修改浏览器的UA 在main.js 加上以下代码 (会不会引起其他bug待验证)
Object.defineProperty(navigator, ‘userAgent’, {
value: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36”,
writable: false
});

增加一个ts文件 在逻辑代码里执行 supportMouse()

function supportMouse() {
if(!cc.sys.isMobile || cc.sys.os !== cc.sys.OS_ANDROID)return
var selfPointer = cc.internal.inputManager
var eventManager = cc.internal.eventManager
window.addEventListener('mousedown', function () {
    selfPointer._mousePressed = true;
}, false);
let canvasBoundingRect = selfPointer._canvasBoundingRect;
window.addEventListener('mouseup', function (event) {
    if (!selfPointer._mousePressed)
        return;

    selfPointer._mousePressed = false;

    let location = selfPointer.getPointByEvent(event, canvasBoundingRect);
    if (!cc.rect(canvasBoundingRect.left, canvasBoundingRect.top, canvasBoundingRect.width, canvasBoundingRect.height).contains(location)) {
        selfPointer.handleTouchesEnd([selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect)]);

        let mouseEvent = selfPointer.getMouseEvent(location, canvasBoundingRect, cc.Event.EventMouse.UP);
        mouseEvent.setButton(event.button);
        cc.internal.eventManager.dispatchEvent(mouseEvent);
    }
}, false);
// register canvas mouse event
var element = document.documentElement;
let EventMouse = cc.Event.EventMouse;
let _mouseEventsOnElement = [
    ["mousedown", EventMouse.DOWN, function (event, mouseEvent, location, canvasBoundingRect) {
        selfPointer._mousePressed = true;
        selfPointer.handleTouchesBegin([selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect)]);
        element.focus();
    }],
    ["mouseup", EventMouse.UP, function (event, mouseEvent, location, canvasBoundingRect) {
        selfPointer._mousePressed = false;
        selfPointer.handleTouchesEnd([selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect)]);
    }],
    ["mousemove", EventMouse.MOVE, function (event, mouseEvent, location, canvasBoundingRect) {
        selfPointer.handleTouchesMove([selfPointer.getTouchByXY(location.x, location.y, canvasBoundingRect)]);
        if (!selfPointer._mousePressed) {
            mouseEvent.setButton(null);
        }
    }],
    ["mousewheel", EventMouse.SCROLL, function (event, mouseEvent) {
        mouseEvent.setScrollData(0, event.wheelDelta);
    }],
    /* firefox fix */
    ["DOMMouseScroll", EventMouse.SCROLL, function (event, mouseEvent) {
        mouseEvent.setScrollData(0, event.detail * -120);
    }]
];
for (let i = 0; i < _mouseEventsOnElement.length; ++i) {
    let entry = _mouseEventsOnElement[i];
    if (entry) {
        let name = entry[0];
        let type = entry[1];
        let handler = entry[2];
        element.addEventListener(name, function (event) {
            let location = selfPointer.getPointByEvent(event, canvasBoundingRect);
            let mouseEvent = selfPointer.getMouseEvent(location, canvasBoundingRect, type);
            mouseEvent.setButton(event.button);

            handler(event, mouseEvent, location, canvasBoundingRect);

            eventManager.dispatchEvent(mouseEvent);
            event.stopPropagation();
            event.preventDefault();
        }, false);
     }
 }
}
export default supportMouse

感觉大家的回复,目前已换成发布网页端,然后再通过网页端加个壳再打包安卓就支持鼠标了