cocos 实现遥杆移动角色
用到数学知识:1°=π/180°,1rad=180°/π。相似三角形。
1.先实现移动杆的移动
2.限制杆移动的范围,松手回到原来位置(相似三角形定律)
3.通过杆控制人物的移动
4.增加相机跟随
完整工程 https://github.com/nidekunji/cocos-yaogan
如果对你有用请给我个star thank you
start () {
//初始化位置。
this.stick.x = 0;
this.stick.y = 0;
//鼠标松手后回到原点
this.dir = cc.p(0, 0);
//鼠标按下
this.stick.on(cc.Node.EventType.TOUCH_START, function (e) {
}, this);
// e: 底层传给我们的触摸信息对象
this.stick.on(cc.Node.EventType.TOUCH_MOVE, function (e) {
// 获取触摸的位置
var w_pos = e.getLocation();//是世界坐标,左下角
var pos = this.node.convertToNodeSpaceAR(w_pos);//屏幕坐标转到相对坐标
var len = cc.pLength(pos);//半径
this.dir.x = pos.x * 1/ len;//只要就只得出半径为1的点,还是相似三角形定理
this.dir.y = pos.y * 1/ len;
/* 好处
归一化,一个方向,只有一个值;
this.dir.x = cos(r);
this.dir.y = sin(r);
// -1, 1 范围。
*/
if (len > this.max_r) {//如果大于最大半径,就设置为最大半径的那个点
pos.x = this.max_r * pos.x / len;
pos.y = this.max_r * pos.y / len;
}
this.stick.setPosition(pos);
}, this);
// 在stick的范围内弹起
this.stick.on(cc.Node.EventType.TOUCH_END, function (e) {
this.stick.setPosition(cc.p(0, 0))
this.dir = cc.p(0, 0);
}, this);
// 在stick的范围外弹起
this.stick.on(cc.Node.EventType.TOUCH_CANCEL, function (e) {
this.stick.setPosition(cc.p(0, 0))
this.dir = cc.p(0, 0);
}, this);
},