使用PreListener与InteractionListener的一个小发现

本文介绍如何在物理引擎中使用PreListener忽略碰撞,并通过InteractionListener仍然能够侦听到刚体之间的碰撞事件。通过创建矩形和圆形刚体,设置监听器并提供示例代码,演示了即使PreListener已忽略碰撞,InteractionListener仍能捕获碰撞事件。

 如果两个刚体使用PreListener忽略了它的碰撞时,如果这时你使用InteractionListener来侦听它们的碰撞还是可以侦听到的:

 1 package  {
 2     import com.bit101.components.TextArea;
 3     import nape.callbacks.CbEvent;
 4     import nape.callbacks.CbType;
 5     import nape.callbacks.InteractionCallback;
 6     import nape.callbacks.InteractionListener;
 7     import nape.callbacks.InteractionType;
 8     import nape.callbacks.PreCallback;
 9     import nape.callbacks.PreFlag;
10     import nape.callbacks.PreListener;
11     import nape.phys.Body;
12     /**
13      * ...
14      * @author kingBook
15      * 2015-02-01 21:18
16      */
17     public class Main extends BaseMain {
18         
19         public function Main() {
20             super({gravity:{x:0,y:0}});
21             
22         }
23         
24         private var _box:Body;
25         private var _circle:Body;
26         private var _boxCbType:CbType=new CbType();
27         private var _circleCbType:CbType=new CbType();
28         private var _textArea:TextArea;
29         override protected function createBodies():void {
30             //矩形刚体
31             _box=createBox(50,50,100,200);
32             _box.cbTypes.add(_boxCbType);
33             _box.space=_space;
34             
35             //圆形刚体
36             _circle=createCircle(30,250,200);
37             _circle.cbTypes.add(_circleCbType);
38             _circle.space=_space;
39             
40             _space.listeners.add(new PreListener(InteractionType.COLLISION,_boxCbType,_circleCbType,ignoreHandler));
41             _space.listeners.add(new InteractionListener(CbEvent.BEGIN,InteractionType.COLLISION,_boxCbType,_circleCbType,onHitBegin));
42             
43             //文本域
44             _textArea=new TextArea(this,5,5);
45         }
46         
47         private function ignoreHandler(cb:PreCallback):PreFlag{
48             return PreFlag.IGNORE;
49         }
50         
51         private function onHitBegin(cb:InteractionCallback):void{
52             _textArea.text += "hit\n"
53         }
54         
55     }
56     
57 }

 拖动矩形刚体与圆形刚体相碰依然可以看到输出: hit

源码下载:http://yunpan.cn/cKBwzyNkfJN7P  访问密码 5883

转载于:https://www.cnblogs.com/kingBook/p/4266103.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值