[CreatorCocos]自定义线条 + 物理引擎

>  - 引擎:CreatorCocos2.0.5
>  - 系统:Windows

今天花了几个小时时间,在思考如何去实现自定义线条,并且具有物理性质
大概实现了这么个效果在这里插入图片描述
线条是根据触摸点移动位置去画的,上面带了刚体,球也具有物理性质,所以不会掉下去,产生碰撞以后球会沿着线的路径移动

实现
因为引擎本身不具备自定义线条并且富于物理性质的功能,所以此功能只能手动实现

我的想法是把手移动过得地方看成一个一个被拆分开的线段,无限细分之后,根据一段距离去生成一小节线段,一点一点连起来,形成一整条(表述可能有点问题,具体看代码)

  1. 创建预制体
    在这里插入图片描述line预制体的节点
    注意 如果需要线条下降,那么Type就不要是Static
    在这里插入图片描述
  2. 代码
    这里是核心代码
/**
     * 触摸开始时
     */
    touchScreenStart(ev) {
    // 记录第一个点的位置
        this._recordPos = ev.getLocation()
        cc.log('开始', this._recordPos)
    },
    /**
     * 触摸移动时
     */
    touchScreenMove(ev) {
    	// 记录当前手移动到的点
        this._currentPos = ev.getLocation()
        //求两点之间的距离
        let subV = this._currentPos.subSelf(this._recordPos)
        let lenV = subV.mag() + 5
        // cc.log('长度2', lenV)
        // 如果距离大于一定值,这里的25是预制体的width
        if(lenV >= 25) {
        	// 给定方向向量
            let tempVec = cc.v2(0, 10)
            // 求两点的方向角度
            let rotateV = subV.signAngle(tempVec) / Math.PI * 180 - 90
            // 创建预制体,这里使用了对象池,getPool()是拉取对象池的节点
            let PoolData = this.getPool()
            PoolData.rotation = rotateV
            PoolData.parent = this.node
            // 这一步是为了防止两个线段之间出现空隙,动态改变预制体的长度
            PoolData.setPosition(ev.getLocation().x, ev.getLocation().y)
            PoolData.width = lenV
            PoolData.getComponent(cc.PhysicsBoxCollider).offset.x = -PoolData.width / 2
            // cc.log(PoolData.getComponent(cc.PhysicsBoxCollider).size)
            cc.log(PoolData.getComponent(cc.PhysicsBoxCollider).size.width, PoolData.width)
            PoolData.getComponent(cc.PhysicsBoxCollider).size.width = PoolData.width
            PoolData.getComponent(cc.PhysicsBoxCollider).apply()
            // 将此时的触摸点设为记录点
            this._recordPos = ev.getLocation()
        }
    },

大概就是这些

若有错误,欢迎指出。

开源万岁
Mr.YingS

aji@fristd.com

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值