监听触碰事件,触碰的位置没有办法传出到外部参数

大家好,本人菜鸟一名。最近在跟着教程学习使用cocos creator。软件版本为2.4.0。做到监听屏幕触碰时遇到了问题,代码如下:
addEventHandler(){
this.background.on(‘touchstart’,(event)=>{
this.startPoint=event.getLocation();
});
this.background.on(‘touchend’,(event)=>{
this.endPoint=event.getLocation();
});
//后面省略,有关于startPoint 和endPoint向量的计算判定
}
在测试时发现,startPoint 和endPoint在后面使用时为undefined,仅仅在程序块中可以访问,教程中也特地提到这个问题,说用箭头函数可以解决this指向的问题,但是显然不成功。我尝试了API文档中的函数调用形式,也不成功。我想着将startPoint 和endPoint定义为全局变量,结果显示两个值为null,没能够取到坐标。想向大家请教一下这是什么原因造成的,如何解决?

如果可以的话,贴出完整代码,我帮你解决this指向问题。

1赞

谢谢您的解答,其实并没有完整代码,因为做到这里我就卡住做不下去了 :sweat_smile: :sweat_smile:,之前的代码也和这个部分相对独立,所以有问题的就是这段。addEventHandler()是自定义的函数,用来监听事件取得用户滑动时候的行为并进行相应的计算,startPoint 和endPoint也是自定义的变量,分别获取触碰开始和结束时候的坐标,现在就是坐标取不出来,我也可以把整个已经做到的项目发来,不知道是不是有必要?

你可以打断点调试一下,看下event对象,我记得event对象下有touch属性,touch对象调用获取当前触摸点和上一个触摸点的坐标这些

this.background.on(cc.Node.EventType.TOUCH_START, (e) => {//do somthing}, this); ,试试在这个on方法,传入第三个参数this。

看了你的代码。。你是在监听回调外面执行向量计算吗?如果是这样就有问题。。向量计算应该在监听函数体内执行

谢谢,这个调用方法我之前也试过,一样的报错 :thinking:

是的,就是需要在函数体之外执行相应的操作,这个里面的参数没有办法传出来吗?

不好意思,能再具体点吗,我尝试了下,好像还是不可以,不知道是不是我理解错了 :laughing:


image
没理解错的话是这样?

1赞

谢谢您的解答,用这个方法确实可以取出事件的起始位置 :star_struck: :star_struck:,请问是什么原理呢?因为我在后面用endPoint和startPoint计算两者之间向量时又遇到了问题,定义的向量再次出现undefined现象,不知道哪里又出了问题?所以想知道这种实现方式背后的原理好对下一步进行检查。。。。

怎么计算的? 你上边贴出来的是this指向问题

昨天晚上调试的,今天早上调试没问题了,不好意思哈。请问具体是怎么解决这个this指向问题的,能把思路讲一讲吗?为社么之前包括其他朋友的解答,是按照API文档上的方式来做的,反而出错了呢?


https://docs.cocos.com/creator/manual/zh/scripting/events.html

谢谢,我研究研究哦

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。