Cocos Creator CollisionManager碰撞效率測試


版本:2.3.4

 

CollisionMananger源碼

源碼位置cocos2d/core/collider/CCCollisionManager.js

collisonMananger默認會檢查所有collider的碰撞,計算還是相當復雜的。

 

 

 

 

 

BoxCollider測試

在pc上寫一段簡單測試代碼

const {ccclass, property} = cc._decorator;

@ccclass
export default class ColliderTest extends cc.Component {

    @property(cc.Canvas)
    canvas:cc.Canvas = null;

    start () {
        let manange:cc.CollisionManager = cc.director.getCollisionManager();
        manange.enabled = true;
        manange.enabledDebugDraw = true;

        this.boxColliderTest();
    }
    public boxColliderTest(){
        for(let i=0;i<1000;i++){
            let node:cc.Node = new cc.Node();
            node.width = 100;
            node.height = 100;
            node.x = i*100;
            node.y = i*100;
            let box:cc.BoxCollider = node.addComponent(cc.BoxCollider);
            this.canvas.node.addChild(node);
        }  
    }

    onCollisionEnter(other,self) {
        console.log(other, self);
    } 
}

 

自寫碰撞測試

const {ccclass, property} = cc._decorator;

@ccclass
export default class ColliderTest extends cc.Component {

    @property(cc.Canvas)
    canvas:cc.Canvas = null;

    start () {
        this.rectColliderTest();
    }

    private boxList= [];
    public rectColliderTest(){
        for(let i=0;i<2000;i++){
            let node:cc.Node = new cc.Node();
            node.width = 100;
            node.height = 100;
            node.x = i*100;
            node.y = i*100;
            let box:cc.BoxCollider = node.addComponent(cc.BoxCollider);
            this.canvas.node.addChild(node);
            this.boxList.push(box);
        }
    }

    update(){
        let len = this.boxList.length;
        for(let i=0;i<len;i++){
            for(let j=i+1;j<len;j++){
                cc.Intersection.rectRect(this.boxList[i].world.aabb, this.boxList[j].world.aabb);
            }
        }
    } 
}

  

BoxCollider測試結果

碰撞體數量    pc消耗時間     華為mate9消耗時間   iphone6s消耗時間

500                4-4.5ms          27-29ms                      7-8ms

1000              12-13ms        85-87ms                       30-32ms

1500             29-30ms        178-180ms                     70-75ms

 

自寫碰撞類結果

碰撞體數量    pc消耗時間     mate9消耗時間   iphone6消耗時間

500                1.7-1.8ms       8-10ms                5-6ms

1000              4.9-5ms          32-43ms              9-10ms

1500             10-10.8ms       56-58ms               28-30ms

 

如果碰撞體都是一些矩形,例如一些瓦片地圖的游戲。可以看到不使用BoxCollider的話,碰撞檢測要快3倍左右。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM