cocoscreator之KUOKUO分享碰撞演算法(2)
阿新 • • 發佈:2018-11-12
很多簡單的2D小遊戲只需要監聽碰撞即可,那就不用新增物理元件什麼的,直接函式搞定。
cc.Class({ extends: cc.Component, properties: { one:cc.Node, two:cc.Node, }, isGet(node_1 , node_2 , r){ //簡單的勾股定理 let dy = node_2.y - node_1.y ; let dx = node_2.x - node_1.x ; if( r*r >= (dy*dy + dx*dx)) { console.log("Get!"); } }, start () { //給一物體(紅)監聽拖動 this.one.on(cc.Node.EventType.TOUCH_MOVE, function(event){ var delta =event.getDelta(); this.one.x +=delta.x; this.one.y +=delta.y; }, this); }, update (dt) { //每幀檢測 this.isGet(this.one,this.two,100); }, });
這是對應圖;
如果在範圍內打印出優惠!
啊哈,演算法是不是太簡單了呢。
貼個高階但一樣功能的:
isGet(node_1 , node_2 , r){ //let dy = node_2.y - node_1.y ; //let dx = node_2.x - node_1.x ; //使用了向量 let v1 = new cc.Vec2(node_2.x,node_2.y); let v2 = new cc.Vec2(node_1.x,node_1.y); //向量減法再求模 if(v2.sub(v1).mag() <= r ) { console.log("Get!"); } },
O(∩_∩)O~