很不好意思,但真的只能求助了,关于鼠标点击移动

  • Creator 版本:2.20

  • 目标平台: pc

请问这样到底是哪里出错,必须要点击到主角身上才会移动,而且是点到他身上,他就出现在鼠标之前停留过的位置。但我们一般要的是点一个空白处,主角就出现在那里才对吧
onLoad() {
this.node.on(cc.Node.EventType.MOUSE_DOWN,this.onMouseDown,this);
this.node.on(cc.Node.EventType.MOUSE_UP,this.onMouseUp,this);
},
start() {

},
onMouseDown: function(event) { 
    var pos = event.getLocation();
    var pos1 = this.node.convertToNodeSpaceAR(pos);
    this.node.setPosition(pos1); 
},

很抱歉打扰各位大大了,我知道这个问题是基础中的基础,但实在没办法,我官方教程学了,论坛搜索了,网上搜索了,已经困了两天,但键盘移动我会了,网上大多教程都是触摸移动,仅有的一些鼠标移动,也大多是早期版本,实在没辙

必须要点击到主角身上才会移动,而且是点到他身上

感觉是你注册事件的时候,注册在主角身上了,所以你只能点击在主角身上才会移动。

你应该把鼠标事件注册在canvas上

嗯,从 2.0 开始,Canvas 是一个铺满全屏的节点,所以注册在 canvas 上就能接收到所有消息

太感谢您了,我将脚本改挂到canvas,同时调用了主角节点,确实可以鼠标点击移动了。但又出现了问题,就是移动不到位,主角只会向着鼠标点击的位置移动大概到中间点而已。很抱歉,我实在菜鸟,只能再麻烦您了:joy:
properties: {
player: {
default: null,
type: cc.Node
},
speed: 0
},
onLoad() {
this.node.on(cc.Node.EventType.MOUSE_DOWN,this.onMouseDown,this);
},
start() {

},
onMouseDown: function(event) { 
    var mouseType = event.getButton();
    if(mouseType === cc.Event.EventMouse.BUTTON_LEFT) {
        var pos = event.getLocation();
        var pos1 = this.node.convertToNodeSpaceAR(pos);
        this.player.setPosition(pos1);
    } 
},

你设置主角的位置,设置的是主角锚点的位置,是不是你主角锚点就是大概在主角中间点

或者你 this.player 的父节点不是 Canvas 的话,你这个 pos1 的坐标就不是 this.player 所在的坐标系
为了确保坐标系是正确,你应该用下面的写法
var pos1 = this.player.parent.convertToNodeSpaceAR(pos);
this.player.setPosition(pos1);

谢谢您帮助,我的主角锚点是默认的,也就是中间没有错。
节点设置如图,确实不是直接挂在canvas下面,但this.player.parent的目的是要定为到canvas坐标系,而我本身就把脚本挂在canvas上,this.node就等于canvas坐标系,没有区别的,我试了一下,确实没有改变

这说明你的 canvas 和 map 的锚点时重合的,两个原点重合的坐标系当然就是一个坐标系

var pos = event.getLocation();
var pos1 = this.player.convertToNodeSpaceAR(pos);
this.player.setPosition(pos1);

你试试,这个,我没验证。
节点局部与空间坐标转换多练习几次就好了。
新手的话API文档、API功能介绍先看看,就会避免这些小问题

好的,谢谢,我再试试:blush:

要是你的主角节点有缩放的话也要调整代码

感谢,终于解决了,是因为我的map节点坐标没有跟canvas坐标一致

感谢,找到原因了,是因为我的map节点坐标没有跟canvas坐标一致

谢谢您,终于解决了