CocosCreator计算夹角

在这里插入图片描述
在这里插入图片描述

export default class TestAngle extends cc.Component {
    @property(cc.Node)
    root: cc.Node;
    @property(cc.Graphics)
    graph: cc.Graphics;
    @property(cc.Node)
    target: cc.Node;
    @property(cc.Label)
    angleDes: cc.Label;

    start() {         
        this.node.on(cc.Node.EventType.TOUCH_MOVE,this.onTouchMove,this);
    }

    onTouchMove(event: cc.Event.EventTouch): void {
        let startPos: cc.Vec2 = this.target.convertToWorldSpaceAR(new cc.Vec2(0, 0));
        let endPos: cc.Vec2 = event.getLocation();

        let dirVec = endPos.sub(startPos);//获得从startPos指向endPos的方向向量
        let comVec = new cc.Vec2(1, 0);//计算夹角的参考方向,这里选择x轴正方向
        let radian = dirVec.signAngle(comVec);//获得带方向的夹角弧度值(参考方向顺时针为正值,逆时针为负值)
        let degree = Math.floor(cc.misc.radiansToDegrees(radian));
        console.log("x角度:" + degree)

        this.angleDes.node.position = this.root.convertToNodeSpaceAR(endPos);
        this.angleDes.string = degree + "°";

        let comEnd = new cc.Vec2(startPos.x + 200, startPos.y);
        this.drawAngle(startPos, endPos, comEnd);
    }

    /**
     * 
     * @param startPos 起始点
     * @param endPos 终点(对应鼠标点击的点)
     * @param comEnd 参照向量的终点
     */
    private drawAngle(startPos: cc.Vec2, endPos: cc.Vec2, comEnd: cc.Vec2) {
        this.graph.clear();

        this.graph.lineWidth = 1;
        this.graph.strokeColor = cc.Color.WHITE;
        this.graph.moveTo(startPos.x, startPos.y);
        this.graph.lineTo(endPos.x, endPos.y);
        this.graph.stroke();

        this.graph.strokeColor = cc.Color.GREEN;
        this.graph.moveTo(startPos.x, startPos.y);
        this.graph.lineTo(comEnd.x, comEnd.y);
        this.graph.stroke();
    }
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Cocos Creator是一个游戏开发引擎,可以用于创建各种类型的游戏,包括桌球游戏。在Cocos Creator中实现桌球游戏需要考虑几个方面。首先是可碰撞物体的设置,包括白球、其他球、球袋、球杆和球桌。可以使用Cocos Creator内置的操作设置来创建可产生碰撞的节,并添加刚体组件来选择节的形状和类型。例如,球袋需要设置为sensor类型,以便只产生碰撞监测而不产生碰撞效果。\[1\] 其次是球杆的移动和拉伸。球杆需要随着白球为中心移动,并设置最小距离以避免接触白球。可以通过获取和白球中心的向量来实现球杆的移动和拉伸,并根据向量的长度改变球杆的冲量,以及根据向量和水平轴的夹角来旋转球杆。\[1\] 另外,白球需要监听击球事件,并根据击球力度和坐标计算出白球被击打后的线速度。当白球停止运动时,即刚体的awake状态为false时,可以发送事件通知球杆节显示并可以击球。\[2\] 最后,可以通过可视化编辑来方便地创建桌球游戏。在Cocos Creator中,可以勾选Active开启物理系统,并设置Gravity重力为(0,0),以确保小球不受重力影响向下坠落。同时,可以创建桌面节来放置球桌和其他游戏元素。\[3\] 综上所述,使用Cocos Creator可以实现桌球游戏,并通过设置碰撞物体、球杆的移动和拉伸、白球的击球事件监听以及可视化编辑来完成游戏的开发。 #### 引用[.reference_title] - *1* [cocos creator 台球小游戏](https://blog.csdn.net/sinat_40943484/article/details/82686425)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Cocos Creator入门实战:桌球小游戏](https://blog.csdn.net/zzx023/article/details/90035153)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [​Cocos Creator入门实战:桌球小游戏](https://blog.csdn.net/6346289/article/details/100037342)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iningwei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值