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