微信小游戏 sharedCanvas设置长宽后 排行榜滑动 主域子域触摸位置不对应问题

目前我已成功用http://docs.cocos.com/creator/manual/zh/publish/publish-wechatgame-sub-domain.html的方法对子域排行榜UI进行绘制(用的cocos),但是改动sharedcanvas宽长为1080*1920后,微信IDE和实机都无法滑动排行榜
主域画布 宽1080,长1920
子域画布 宽1080,长1920,有一个小于画布大小的scroll view。

如果我不改动sharedcanvas 长宽,模拟器内触摸sharedcanvas范围能正常滑动排行榜,但sharedCanvas为手机window长宽(渲染后看起来像缩小图一样)。如下图情况1。

如果我改动sharedCanvas长宽成720*1280,能滑动sharedCanvas的区域往右上移动了一部分。如下图情况2。

如果我改动sharedCanvas长宽成1080*1920。排行榜就完全无法滑动了(触摸区域移动出了边界?)。

以下示意图为微信IDE游戏画面:

我尝试过http://forum.cocos.com/t/cocos-creator-1-9-1/58971 4楼的解决办法,但是没有成功。
请问有大佬碰到一样问题并解决的吗?

编辑:
我今天做了个测试,在子域Canvas,子域scrollview和主域画布log了触摸的位置,使用真机和微信IDE,NEXUS 5为例,结果如下:

  1. 不赋值sharedCanvas 长宽时(默认值360*640):


    (子域画布触摸位置正确,但是画布渲染出来的大小约为正常的1/3)

  2. sharedCanvas 720*1280时:


    (子域触摸位置为主域的1/2,画布渲染出来的大小约为正常1/2)

  3. sharedCanvas 1080*1920时:


    (子域触摸位置为主域的1/3,画布渲染大小正常)

(我的scroll view节点左下角约在260,560地方)

也许更改子域触摸位置可以解决问题?有哪位大佬知道如何更改子域触摸位置的?

1赞

问题解决了,也许能帮助后来的人:
display 节点一定要加对其挂件!

2赞

兄弟怎么做的?还需要在主域设置 openContextCanvas 的大小么?

不用设置,用来显示子域的节点要加一个对齐挂件

我加了对齐,还是不行,总是 scrollview 的下半部分可以滑动 上半部分没反应。
我尝试过 去掉在主域里设置 sharedCanvas 的大小,滑动没问题,但是子域的分辨率不对。。

对齐一次不要打勾

2赞

@a1187522 大哥,问题解决了吗,子域的尺寸是否要设置跟主域一样呢?

我的项目表现是 有的手机正常滑动,有的手机只有屏幕下边可滑动,有的手机完全无法滑动.之前认为是cocos 的坑. 存在兼容性问题.不知道楼主的方法能不能奏效.试一下.

请问解决了吗?我同样遇到了这个问题

请问解决了吗?我同样遇到了这个问题。。

请问解决了吗?我同样遇到了这个问题。。
。。。

经验。不要设置 sharedCanvas 的大小。
子域的 Canvas 大小设置的和主域一致,主域用来绘制 sharedCanvas 的 Sprite 也铺满整个主域的 Canvas。这样绘制出来的不会有位置不对的问题。

至于有些需要在主域上显示的节点,例如按钮什么的,直接盖在 Sprite 上就行。相当于两个域叠加在一起显示。

如果设置了sharedcanvas的大小跟主域不是1:1的话,需要在子域的_convertPointWithScale,_convertTouchesWithScale方法把scale对应的变化比例。

1赞

这样对其的话 Android手机掉帧起不来 怎么释放

不过对于子域排行是需要嵌套到主域排行的话 那就不好做了

我也被这个问题困扰很久,不过貌似在1.9.2中解决了一半,基本表现是OK了,不同尺寸设备上还是有部分区域存在问题,希望更新的版本中能彻底解决。

楼主方便加个QQ吗?我这增加了你说的方法,但是还是不行

那不设置 sharedCanvas 的大小,滑动没问题,但是子域的分辨率不对的问题怎么解决啊,感觉还是要设置大小的吧

分辨率不对 是因为主域和子域的 canvas 分辨率没设置成一致的。
不要在代码里设置 sharedCanvas 的大小。

分辨率肯定是一致的啊 就是一致的还是会出现这种问题