开放数据域点击事件坐标有问题

minigame-canvas-engine中Layout的updateViewPort函数坐标原点为屏幕左上角。
https://wechat-miniprogram.github.io/minigame-canvas-engine/api/api.html#updateviewport

而我看SubContextView中的_updateSubContextView计算y坐标时是以屏幕左下角为原点的,只要SubContextView所在节点Y坐标不是0,点击就会不准。

修改前的代码:
// update viewport in subContextView
const viewportRect = view.getViewportRect();
const box = contentTrans.getBoundingBoxToWorld();
const visibleSize = view.getVisibleSize();
const dpr = screenAdapter.devicePixelRatio;

    // TODO: the visibleSize need to be the size of Canvas node where the content node is.
    const x = (viewportRect.width * (box.x / visibleSize.width) + viewportRect.x) / dpr;
    const y = (viewportRect.height * (box.y / visibleSize.height) + viewportRect.y) / dpr;
    ......

修改后的代码:
const y = (viewportRect.height * ((visibleSize.height - box.height - box.y) / visibleSize.height) + viewportRect.y) / dpr;

尝试修改之后点击正常了。

3赞

这问题,3.6.2了官方都还没修复

感谢楼主,楼主好人,发现问题解决了还分享出来,不然这坑真够踩的

宽高计算不一致有人遇到过吗

除了考虑坐标系的问题, 还得考虑锚点问题
原点: ccc左下, 微信左上
锚点: ccc中心, wx在左
我试了后发现些差异, 具体为什么建议扒源码看看.


	    let sysInfo = wxSysInfo
		const wxScreenWidth = sysInfo?.screenWidth ?? 10;
		const wxScreenHeight = sysInfo?.screenHeight ?? 10;
		const widthScaleRatio = wxScreenWidth / app.winSize.width;
		const heightScaleRatio = wxScreenHeight / app.winSize.height;
		const size = transform.size;
		const WIDTH = size?.width;
		const HEIGHT = size?.height;
		const wxWidth = WIDTH * widthScaleRatio;
		const wxHeight = (HEIGHT * 0.8) * heightScaleRatio;  // 这个我暂时不知道为什么.........
		const worldPos = transform.getWorldPosition();
		const wxPosX = (worldPos.x - (WIDTH / 2)) * widthScaleRatio;	// wx锚点在左, ccc 在中心 , 世界坐标还要减去节点一半宽度. 还要减去适配的偏移
		const wxPosY = (app.winSize.height - worldPos.y - (HEIGHT / 2)) * heightScaleRatio;	// ccc 世界坐标系是右手坐标系, 原点在左下角, wx 是左上, 需要做个翻转计算
	

最后传给子域
				width: wxWidth,
				height: wxHeight,
				x: wxPosX,
				y: wxPosY

1赞