lufy's legend

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖
楼主: panda
打印 上一主题 下一主题

sprite点击事件问题

[复制链接]

1

主题

0

好友

41

积分

士兵

Rank: 1

11#
发表于 2016-10-13 09:11:43 |只看该作者
lufy 发表于 2016-10-13 08:58
如果非全屏的话,canvas的部分需要在页面顶端,否则鼠标事件会有问题,当然如果没有鼠标交互的话是没有问 ...

还有想请教下,为什么我用鼠标单击游戏区域,会点一下卡一下
回复

使用道具 举报

37

主题

8

好友

9313

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

12#
发表于 2016-10-13 09:48:13 |只看该作者
panda 发表于 2016-10-13 09:11
还有想请教下,为什么我用鼠标单击游戏区域,会点一下卡一下

如果是chrome模拟器的话,可以无视
如果是真机测试的话,加上addChild(new PFS());观察一下FPS,看看点击的时候,FPS有无明显的下降,
如果有,就是鼠标事件监听的对象有些复杂,需要通过addShape来设定鼠标点击区域来降低引擎的判断的压力
如果FPS没有明显的下降,那就是你鼠标事件的逻辑有问题了
不回答与技术和引擎不相关的问题
回复

使用道具 举报

1

主题

0

好友

41

积分

士兵

Rank: 1

13#
发表于 2016-10-13 13:39:32 |只看该作者
lufy 发表于 2016-10-13 09:48
如果是chrome模拟器的话,可以无视
如果是真机测试的话,加上addChild(new PFS());观察一下FPS,看看点击 ...

http://ycan.me/activity/nextproject/index.html

可以帮忙看下这个吗,里面逻辑很简单,但真机和模拟器都一样会卡顿,通过鼠标点击的时候
回复

使用道具 举报

37

主题

8

好友

9313

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

14#
发表于 2016-10-14 11:19:06 |只看该作者
panda 发表于 2016-10-13 13:39
http://ycan.me/activity/nextproject/index.html

可以帮忙看下这个吗,里面逻辑很简单,但真机和模拟器 ...

你按照我说的方法试了吗?已经确定是逻辑问题了?
不回答与技术和引擎不相关的问题
回复

使用道具 举报

1

主题

0

好友

41

积分

士兵

Rank: 1

15#
发表于 2016-10-18 14:18:09 |只看该作者
lufy 发表于 2016-10-14 11:19
你按照我说的方法试了吗?已经确定是逻辑问题了?

确定不是逻辑问题
回复

使用道具 举报

37

主题

8

好友

9313

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

16#
发表于 2016-10-19 13:58:58 |只看该作者
panda 发表于 2016-10-18 14:18
确定不是逻辑问题

经过我反复验证,这可能是chrome的一个bug,无论东西多简单,只要注册touch事件,就会导致卡顿一下
我给你看两个demo就明白了,这两个demo都非常简单,所以不用考虑效率问题

下面这个demo是我注册了一个空的touch事件,注意是空事件,没有任何逻辑处理,所以不会存在效率问题
http://lufylegend.com/demo/test/143.html

下面这个demo是没有touch事件的
http://lufylegend.com/demo/test/144.html

注册了touch事件,哪怕是空事件也会导致卡顿一下
另外,这个不是所有手机,我的一个比较旧的安卓手机却没有这个问题出现,所以我只能猜测是移动版chrome的问题
不回答与技术和引擎不相关的问题
回复

使用道具 举报

37

主题

8

好友

9313

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

17#
发表于 2016-10-20 08:44:49 |只看该作者
又研究了一下,利用requestAnimationFrame可以解决这个问题
在引擎初始化的时候,传入LInit的第一个参数用下面这样就行了
  1. window._requestAF = (function() {
  2.   return window.requestAnimationFrame ||
  3.          window.webkitRequestAnimationFrame ||
  4.          window.mozRequestAnimationFrame ||
  5.          window.oRequestAnimationFrame ||
  6.          window.msRequestAnimationFrame ||
  7.          function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
  8.            window.setTimeout(callback, 1000/60);
  9.          };
  10. })();
  11. LInit(window._requestAF, id, width, height, main);
复制代码
不回答与技术和引擎不相关的问题
回复

使用道具 举报

1

主题

0

好友

41

积分

士兵

Rank: 1

18#
发表于 2016-10-21 15:27:29 |只看该作者
lufy 发表于 2016-10-20 08:44
又研究了一下,利用requestAnimationFrame可以解决这个问题
在引擎初始化的时候,传入LInit的第一个参数用 ...

多谢老大指点,不过你上面那两个例子怎么看起来没那么明显
回复

使用道具 举报

37

主题

8

好友

9313

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

19#
发表于 2016-10-21 15:34:01 |只看该作者
panda 发表于 2016-10-21 15:27
多谢老大指点,不过你上面那两个例子怎么看起来没那么明显

跟手机有关系的,我手机上非常明显
总之,用requestAnimationFrame刷新的话,就可以解决了
原因在这里
http://lufylegend.com/forum/foru ... &extra=page%3D1
不回答与技术和引擎不相关的问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

防止垃圾广告,请填写任意字符

Archiver|lufy's legend

GMT+8, 2024-5-18 21:05 , Processed in 0.050787 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部