日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [CreatorCocos]自定义线条 + 物理引擎 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
> - 引擎:CreatorCocos2.0.5 > - 系統(tǒng):Windows

今天花了幾個(gè)小時(shí)時(shí)間,在思考如何去實(shí)現(xiàn)自定義線條,并且具有物理性質(zhì)
大概實(shí)現(xiàn)了這么個(gè)效果
線條是根據(jù)觸摸點(diǎn)移動(dòng)位置去畫的,上面帶了剛體,球也具有物理性質(zhì),所以不會(huì)掉下去,產(chǎn)生碰撞以后球會(huì)沿著線的路徑移動(dòng)

實(shí)現(xiàn)
因?yàn)橐姹旧聿痪邆渥远x線條并且富于物理性質(zhì)的功能,所以此功能只能手動(dòng)實(shí)現(xiàn)

我的想法是把手移動(dòng)過(guò)得地方看成一個(gè)一個(gè)被拆分開的線段,無(wú)限細(xì)分之后,根據(jù)一段距離去生成一小節(jié)線段,一點(diǎn)一點(diǎn)連起來(lái),形成一整條(表述可能有點(diǎn)問題,具體看代碼)

  • 創(chuàng)建預(yù)制體
    line預(yù)制體的節(jié)點(diǎn)
    注意 如果需要線條下降,那么Type就不要是Static
  • 代碼
    這里是核心代碼
  • /*** 觸摸開始時(shí)*/touchScreenStart(ev) {// 記錄第一個(gè)點(diǎn)的位置this._recordPos = ev.getLocation()cc.log('開始', this._recordPos)},/*** 觸摸移動(dòng)時(shí)*/touchScreenMove(ev) {// 記錄當(dāng)前手移動(dòng)到的點(diǎn)this._currentPos = ev.getLocation()//求兩點(diǎn)之間的距離let subV = this._currentPos.subSelf(this._recordPos)let lenV = subV.mag() + 5// cc.log('長(zhǎng)度2', lenV)// 如果距離大于一定值,這里的25是預(yù)制體的widthif(lenV >= 25) {// 給定方向向量let tempVec = cc.v2(0, 10)// 求兩點(diǎn)的方向角度let rotateV = subV.signAngle(tempVec) / Math.PI * 180 - 90// 創(chuàng)建預(yù)制體,這里使用了對(duì)象池,getPool()是拉取對(duì)象池的節(jié)點(diǎn)let PoolData = this.getPool()PoolData.rotation = rotateVPoolData.parent = this.node// 這一步是為了防止兩個(gè)線段之間出現(xiàn)空隙,動(dòng)態(tài)改變預(yù)制體的長(zhǎng)度PoolData.setPosition(ev.getLocation().x, ev.getLocation().y)PoolData.width = lenVPoolData.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.widthPoolData.getComponent(cc.PhysicsBoxCollider).apply()// 將此時(shí)的觸摸點(diǎn)設(shè)為記錄點(diǎn)this._recordPos = ev.getLocation()}},

    大概就是這些

    若有錯(cuò)誤,歡迎指出。

    開源萬(wàn)歲
    Mr.YingS

    aji@fristd.com

    總結(jié)

    以上是生活随笔為你收集整理的[CreatorCocos]自定义线条 + 物理引擎的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。