文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何在CocosCreator中使用游戏手柄

2023-06-14 13:24

关注

这篇文章主要介绍了如何在CocosCreator中使用游戏手柄,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

1.场景布置

如何在CocosCreator中使用游戏手柄

如何在CocosCreator中使用游戏手柄

2. 添加手柄监听器

1.监听事件的变化

由原先的mouse系列的转换为touch系列的

如何在CocosCreator中使用游戏手柄

  1. touchstart 触摸按下,相当于 mousedown

  2. touchmove 触摸移动,相当于 mousemove

  3. touchend 触摸抬起,相当于 mouseup

  4. touchcancel 触摸取消,被其他事件终止,相当于按下了ESC键

2.坐标设定

当触摸按下随推动位置变化(要用世界坐标转换),触摸抬起后回归原位(直接设定0,0坐标默认相对坐标)。
setPosition()设定的为相对父节点的坐标

  onTouchMove(e:cc.Event.EventTouch){         // e.getLocation() 为点击的位置,是世界坐标        // 需要把世界坐标转换为本地坐标                let parent=this.node.parent;// 父节点 (圆形底盘)        let pos:cc.Vec2=parent.convertToNodeSpaceAR(e.getLocation());        this.node.setPosition(pos);    }    onTouchCancel(){      this.node.setPosition(cc.v3(0,0,0));    }

如何在CocosCreator中使用游戏手柄

3. 将手柄限制在托盘内

使用方位角来定位边缘位置。pos.normalize()方法返回该点相对于(0,0)的(cos, sin),返回Vec2对象。

let parent=this.node.parent;// 父节点 (圆形底盘)let pos:cc.Vec2=parent.convertToNodeSpaceAR(e.getLocation());// 该点所在的方位 (cos, sin)let direction:cc.Vec2=pos.normalize();// 限制在边界之内let maxR = 100-20;   //点击的点到托盘中央的距离let r : number = cc.Vec2.distance(pos, cc.v2(0,0));if( r > maxR){pos.x = maxR * direction.x; pos.y = maxR * direction.y;}// cc.log("相对位置: " + pos.x + ", " + pos.y);this.node.setPosition( pos);

如何在CocosCreator中使用游戏手柄

3. 添加小车的控制

1. 小车的旋转

cc.Node.angle
表示旋转的角度,逆时针为正
官方建议不要使用 cc.Node.rotationa.signAngle( b)
a和b为两个向量,返回值是一a,b的夹角 (弧度值)
radian = a.signAngle(b)
(1) a位于b的顺时针方向:角度为正
(2) a位于b的逆时针方向:角度为负

旋转实现:
添加属性 car :cc.Node=null;获取小车节点。
cc.find()注意参数用"/"除号的斜杠,否则识别不到

onLoad () {     this.car=cc.find("Canvas/小车");}
let radian=pos.signAngle(cc.v2(1,0));//计算点击位置与水平的夹角let ang=radian/Math.PI*180;//弧度制转换为角度值this.car.angle=-ang;//逆时针为正,所以这里要调整至顺时针

如何在CocosCreator中使用游戏手柄

2. 小车的移动 .

  1. 在小车的脚本中添加前进的动画,update(dt)方法中让x和y每帧加对应的速度在x和y轴的分量。

  2. 在手柄控制脚本中获取小车节点下的脚本。通过上面获取的direction的方向角,传入小车脚本中。通过控制direction来控制小车的移动。

小车运动脚本

direction: cc.Vec2 = null;speed: number = 3;onLoad() {}start() {}update(dt) {if (this.direction == null) return; //静止let dx = this.speed * this.direction.x;let dy = this.speed * this.direction.y;let pos = this.node.getPosition();pos.x += dx;pos.y += dy;this.node.setPosition(pos);}

手柄控制脚本

car: cc.Node = null;carscript: cc.Component = null;// LIFE-CYCLE CALLBACKS:onLoad() {this.car = cc.find("Canvas/小车");this.carscript = this.car.getComponent("CarMove");}start() {this.node.on('touchstart', this.onTouchStart, this);this.node.on('touchmove', this.onTouchMove, this);this.node.on('touchend', this.onTouchCancel, this);this.node.on('touchcancel', this.onTouchCancel, this);}onTouchStart() {}onTouchMove(e: cc.Event.EventTouch) {// e.getLocation() 为点击的位置,是世界坐标// 需要把世界坐标转换为本地坐标// let parent=this.node.parent;// 父节点 (圆形底盘)// let pos:cc.Vec2=parent.convertToNodeSpaceAR(e.getLocation());// this.node.setPosition(pos);let parent = this.node.parent; // 父节点 (圆形底盘)let pos: cc.Vec2 = parent.convertToNodeSpaceAR(e.getLocation());// 该点所在的方位 (cos, sin)let direction: cc.Vec2 = pos.normalize();// 限制在边界之内let maxR = 100 - 20;let r: number = cc.Vec2.distance(pos, cc.v2(0, 0));if (r > maxR) {pos.x = maxR * direction.x;pos.y = maxR * direction.y;}// cc.log("相对位置: " + pos.x + ", " + pos.y);this.node.setPosition(pos);let radian = pos.signAngle(cc.v2(1, 0)); //计算点击位置与水平的夹角let ang = radian / Math.PI * 180; //弧度制转换为角度值this.car.angle = -ang; //逆时针为正,所以这里要调整至顺时针this.carscript.direction = direction;}onTouchCancel() {this.node.setPosition(cc.v3(0, 0, 0));//将方向置空,使汽车停止this.carscript.direction = null;}// update (dt) {}

最终效果

如何在CocosCreator中使用游戏手柄

感谢你能够认真阅读完这篇文章,希望小编分享的“如何在CocosCreator中使用游戏手柄”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯