1. 程式人生 > >cocos-Lua 捕魚碰撞檢測方法

cocos-Lua 捕魚碰撞檢測方法

在Lua中不用物理引擎的檢測碰撞會很卡,Lua的for迴圈的效率比C++的低幾十倍

那樣的話,怎麼處理呢?我在想能不能把碰撞檢測的過程扔到C++中處理呢

後來發現cocos2dx中有一個物理世界,可以進行碰撞檢測,於是把碰撞檢測的處理扔到那去處理,發現在玩時就沒有那麼卡了

首先先繫結一個碰撞檢測的事件,然後建立每個魚的PhysicsBody,還有就是設定物理掩碼,都設定為無碰撞效果,只需要檢測是否碰撞到了

   local box = cc.PhysicsBody:createCircle(self._sp:getContentSize().width/3)
   box:setDynamic(true)
   box:setCategoryBitmask(1)  
   box:setContactTestBitmask(1)  
   box:setCollisionBitmask(2)
   self._sp:setPhysicsBody(box)

因為我們只是需要檢測子彈與魚是否碰撞到,不需要顯示碰撞效果,所以掩碼都一樣

新增的碰撞檢測事件

    local conListener=cc.EventListenerPhysicsContact:create()
    conListener:registerScriptHandler(function(contact)  
        local node1=contact:getShapeA():getBody():getNode()  
        local node2=contact:getShapeB():getBody():getNode()
        if not node1 or not node2 then return end 
        if node1:getName() ~= node2:getName() then
            local fish = nil
            local vB = nil
            if node1:getName() == "Bullet" then
                vB = node1:getParent()
                fish = node2:getParent()
            else
                vB = node2:getParent()
                fish = node1:getParent()
            end
            if not vB._isAlive then
                return
            end
            if vB._isLockFishID ~= 0 and fish._id~=vB._isLockFishID then
                return
            end
            --播放魚被擊中的效果
            self:showHitFish(fish)
            --播放撒網動作
            local vBPos = cc.p(vB._sp:getPositionX(),vB._sp:getPositionY())
            self:FallingNet(vBPos, vB)
            local info = 
            {
                chairId = self._deskNum,
                fishId = fish._id,
                bulletKind = vB._buttleMultiplePicNum,
                bulletId = vB._id,
                bulletMulriple = vB._buttleMultiple,
                eventType = LKPY_NOTIFY_AssistantID.SUB_C_CATCH_FISH,
            }
            self._callback(info)
            for k,v in pairs(self._bulletList) do
                if v._id == vB._id or v._isKnockBall == 0 then
                    table.remove(self._bulletList,k)
                    v:disappear()
                    break
                end
            end 
        end
        return true  
    end,cc.Handler.EVENT_PHYSICS_CONTACT_BEGIN)  
    cc.Director:getInstance():getEventDispatcher():addEventListenerWithSceneGraphPriority(conListener,self)


 其實就一個思路,採用物理世界的碰撞檢測就行

相關推薦

cocos-Lua 捕魚碰撞檢測方法

在Lua中不用物理引擎的檢測碰撞會很卡,Lua的for迴圈的效率比C++的低幾十倍 那樣的話,怎麼處理呢?我在想能不能把碰撞檢測的過程扔到C++中處理呢 後來發現cocos2dx中有一個物理世界,可以進行碰撞檢測,於是把碰撞檢測的處理扔到那去處理,發現在玩時就沒有那麼卡了

lua實現cocos多邊形碰撞檢測

定義幾個資料型別和函式 function vec(x, y)     return {x, y} end v = vec -- shortcut function dot(v1, v2)     return v1[1]*v2[1] + v1[2]*v2[2] end fu

unity碰撞檢測和觸發器的方法函式

碰撞檢測涉及三個函式: 當與物體碰撞的一瞬間:OnCollisionEnter(Collision  collision),collisionInfo是撞到的物體的碰撞資訊; 當在與物體持續碰撞接觸期間:OnCollisionStay(Collision collisio

cocos creator 碰撞檢測 拾取道具小案列

前言:creator有碰撞檢測系統 +物理碰撞系統,這個是兩個獨立的模組;demo:知識點:程式碼開啟碰撞檢測系統(預設是關閉碰撞檢測),開啟和關閉碰撞檢測的除錯:        var manager = cc.director.getCollisionManager();

cocos creator學習11——碰撞檢測系統

碰撞分組 cocos creator中新版本中的碰撞分組功能,能夠使開發者更方便地管理碰撞檢測 這次我使用飛機大戰的專案進行詳細介紹 點選編輯可以管理碰撞元件的檢測 cocos引擎會根據碰撞分組配對,進行相應的檢測 如上圖,子彈組會與enemy組

cocos Creator碰撞檢測

properties: {directionX:0, //根據元件上設定的數字來進行方向移動 directionY:0,}, // use this for initialization onLoad: function () {

Cocos2d-x 精靈碰撞檢測方法一)

宣告函式碰撞檢測函式,兩個精靈和重寫update bool isCollision( CCPoint p1,CCPoint p2,int w1,int h1,int w2,int h2 ); CCSprite *sp2; CCSprite *sp1; virtua

Unity 使用物理射線(Physics.Raycast),實現扇形區域碰撞檢測三種方法

Unity 使用物理射線(Physics.Raycast),實現扇形(Fan-Shaped)區域碰撞檢測。   網上已經很多實現扇形檢測的方法。大部分都是用MeshCollider實現的。而據說MeshCollider這東西很耗效能(沒有親測),所以就用射

Lua中“.”調用方法與“:”調用方法的區別

-- name obj oca -s fun str member elf Lua中“.”調用方法與“:”調用方法的區別:

實例介紹Cocos2d-x中Box2D物理引擎:碰撞檢測

函數實現 pda creates pty blank oid rtu and 重構 在Box2D中碰撞事件通過實現b2ContactListener類函數實現,b2ContactListener是Box2D提供的抽象類,它的抽象函數:virtual void BeginC

“等一下,我碰!”——常見的2D碰撞檢測

數量 實現 情況 解決 app mes poi html5 測試 轉自:https://aotu.io/notes/2017/02/16/2d-collision-detection/ 在 2D 環境下,常見的碰撞檢測方法如下: 外接圖形判別法 軸對稱包圍盒(

四叉樹優化碰撞檢測

level 需要 quadtree 存在 保持 是我 node fun str 轉自:http://blog.csdn.net/qq276592716/article/details/45999831 遊戲中碰撞檢測分為兩個階段:broad phase 和 narrow

Cocos2d-x 3.0中 物理碰撞檢測中onContactBegin回調函數不響應問題

track 後來 which compare mar details egl def trac 好吧,事實上這篇也是暫時冒出來的,近期朋友要做個物理遊戲,曾經做物理還是用box2d,呃。確實要花些功夫才幹搞懂當中的精髓,可是聽講這套引擎又一次封裝了一次。要easy非

7, 碰撞檢測, 精確非精確

graphics ner c const 檢測 16px nds extend objectc private import tr = egret.sys.tr; class Main extends egret.DisplayObjectContainer {

cocos-lua

elseif rec position func stat dsp art unit height function YZMGame33:initAnimate(path,row, col, width, height, delay)   local perWidth =

CSMA/CD協議(載波偵聽多路訪問/碰撞檢測) 最小幀長理解

ges 傳輸 分享 png 理解 時延 cnblogs mage csma/cd 以下的幀長有的是指幀的時間長度,幀的時間長度= 幀長/傳輸時延 CSMA/CD協議(載波偵聽多路訪問/碰撞檢測) 最小幀長理解

canvas遊戲和動畫中的碰撞檢測

底部 bsp rect circle 進行 eight nbsp odi word 碰撞檢測關鍵步驟 碰撞檢測需要處理經歷下面兩個關鍵的步驟: 計算判斷兩個物體是否發生碰撞 發生碰撞後,兩個物體的狀態和動畫效果的處理 計算碰撞 只要兩個物體相互接觸,它們就會發生碰撞

cocos-Lua中的class與require機制

繼承 manager 包含 logic str src 傳參數 loaded 全局變量 cocos-Lua中的class與require機制 local layer = require("PaiGow.src.GamePlayerListLayer")local Gam

利用jsplumb和碰撞檢測自動生成流程圖

for ans ont != 500px cat clone tran tex 使用jsplumb構建流程圖模型時,有一個需求要求,選項可以從選項表中拖拽到指定容器,並且兩個選項要接觸到的時候才能連接起來,不接觸不能連接。效果圖如下 略醜~ 因為這裏用到了拖拽,拖放功

碰撞檢測

fun posit z-index pan col htm tle capture client html代碼: 1 <div id="div1"></div> 2 <img src="img/1.jpg" id="img1"> cs