bug提交:cc.Touch.getLocation()并不返回cc.Vec2,而是返回一个object

  • Creator 版本:1.9.1

  • 目标平台:

  • 详细报错信息,包含调用堆栈:
    旋转 {x: 360, y: 154.33333587646484} {x: 360, y: 154.33333587646484}
    GamePlay.js:63 Uncaught TypeError: event.getLocation(…).equals is not a function
    at cc_Node. (GamePlay.js:63)
    at EventListeners.111.EventListeners.invoke (event-listeners.js:48)
    at _doDispatchEvent (event-target.js:70)
    at cc_Node.112.proto.dispatchEvent (event-target.js:403)
    at TheClass._touchEndHandler [as onTouchEnded] (CCNode.js:200)
    at _onTouchEventCallback (CCEventManager.js:506)
    at Object._dispatchEventToListeners (CCEventManager.js:630)
    at Object._dispatchTouchEvent (CCEventManager.js:552)
    at Object.dispatchEvent (CCEventManager.js:1059)
    at Object.handleTouchesEnd (CCInputManager.js:172)

  • 重现方式:
    this.new_cube.on(cc.Node.EventType.TOUCH_END, /** @param {cc.Touch} event */ (event) => { if (event.getDelta().equals(cc.Vec2.ZERO)) { // 旋转 cc.log("旋转", event.getLocation(), event.getStartLocation()) cc.log(event.getLocation().equals(event.getStartLocation())) Cube.ins.rotate() } } )

  • 之前哪个版本是正常的 :

  • 手机型号 :

  • 手机浏览器 :

  • 编辑器操作系统 :

  • 编辑器之前是否有其它报错 :
    文字缩进4格

  • 出现概率:100%

  • 额外线索:

附加说明:

不知道是编辑器的bug还是设定如此,文档上cc.Touch.getLocation()上写的返回值是cc.Vec2格式,但是我在使用中发现其返回格式是一个object格式数据。


然后我进行了额外测试,测试代码如如下:
this.new_cube.on(cc.Node.EventType.TOUCH_END, /** @param {cc.Touch} event */ (event) => { if (event.getDelta().equals(cc.Vec2.ZERO)) { // 旋转 cc.log("旋转", event.getType()) cc.log("getLocation", event.getLocation()) cc.log("getPreviousLocation", event.getPreviousLocation()) cc.log("getStartLocation", event.getStartLocation()) cc.log("getDelta", event.getDelta()) cc.log("getLocationInView", event.getLocationInView()) cc.log("getPreviousLocationInView", event.getPreviousLocationInView()) cc.log("getStartLocationInView", event.getStartLocationInView()) Cube.ins.rotate() } } )
运行截图是:

测试结果是:

  1. 除了getDelta()方法返回的是cc.Vec2格式以外,其余方法均返回的是一个object
  2. getPreviousLocationInView()getStartLocationInView()方法的前缀为event时,无法获取,需要加上event.touch。但是文档中并未说明。

接下来我去看了官方Github库的相关源码,发现除了getDelta()方法外,其余方法均返回object。源码参考如下:


希望官方:

  1. 这个是bug还是设定,以后会不会修改。
  2. 希望能完善这一块的文档,特别是eventCustom类型。