关于CocosCreator3.X 2d游戏学习中遇到的问题(摇杆位置与实际手指触碰位置不符)。
这里的摇杆我是要做成生成在手指点击屏幕位置,然后再根据手指的移动对摇杆的位置进行改变。
最开始我是用的触碰事件中Touch里的getLocation()这个方法,在浏览器中运行时也能成功达到我所要的效果,但是仅仅只有在默认(cocoscreator中设置的屏幕比例中)能实现,切换成其他比例是不能实现。不仅如此,在手机上也无法达成效果。
后来看了手册里的其他方法,看到了有这么一个方法‘getLocationInView()’。根据描述,这是一个用于获取当前事件在游戏窗口中的位置的方法,方法返回值是一个二维坐标,也就是说用法和getLocation()差不多(至少我是则么认为,手动滑稽)。但是当我是用的时候,最终所呈现的确实和getLocation()差不多(总之就是没有实现我想要的效果的)。
于是当我继续向下浏览官方源码时,看到了又一个方法——getUILocation()。不错,这个方法对于当时的我来说宛如救命的最后一棵稻草,怀着忐忑的心情,进行了尝试。最终。。。是的,没错,终究还是实现我要的效果了(非常nice,手动滑稽 )。
以下是部分原码(仅供参考):
//触摸屏幕并移动
OnTouchMove(touch :Touch,event :EventTouch){
const touchPosition = new Vec3(touch.getUILocationX(),touch.getUILocationY(),0);
// console.log("点击位置(移动):" + touchPosition);
// console.log("摇杆坐标(移动):" + this.node.position + ",摇杆世界坐标(移动):" + this.node.getWorldPosition());
if(touchPosition.x <= 980 && touchPosition.y <= 800){
// this.node.setWorldPosition(touchPosition);
this.node.setWorldPosition(touchPosition);
}
else{
this.node.setPosition(new Vec3(0,0,0));
}
}
写在后面:
不论是对于cocoscreator还是typescript我是还是小白,而且是直接从项目开始,很多东西饿没有系统学习,大都是用什么查什么。无奈现在与creator3.x相关的内容网上能查到的不多(或许是我没查到的问题),官方文档给的注释也只是很简单的描述了一下,甚至有些没注释,原谅我脑子不好使,很多东西饿真的理解不了,只有一点点的尝试,总之撞了很多墙。希望我的文能给其他人避一些坑吧。
最后,希望有大佬能看见我这卑微的求助:
请问一下getLocation()、getUILocation()、getLocationInView()分别都有什么用、适用于哪些地方?