CocosEditor-java onContactBegin无反应
来源:互联网 发布:ssr软件 编辑:程序博客网 时间:2024/06/02 09:01
打印了CategoryBitMask和ContactTestBitMask。应该是没错的。
参照http://www.tuicool.com/articles/nAZbuy(我还没看)
调试了一天,发现怎么都没法触发onContactBegin,于是仔细看看有什么可以调试的tool。发现了下面这个配置,把Debug打开为shape,就可以看见了
打开后,发现小鸟没有Shape。
原因是我Shape参数设置错了。如下,大小是1*1
貌似Contact和物理碰撞模拟不能同时显现,只取其一。下面的例子设置Contact时,就不会碰撞了。
另外一个实例中发现,当给physicsBody设置偏移时,编辑窗口没显示位移,而实际上是有位移的,当我打开Debug选项,才发现这致命Bug!
如下图,无怪乎不会碰撞!娘的,搞了一整天,幸亏还有调试选项可以打开,不然怎么都想不到。
实践例子:
1.优先Contact,当Contact条件不满足,才会Collision,如下面例子,因为满足Contact条件,会产生onContactBegin()事件,就不会碰撞了。
<span style="font-size:18px;">PhysicsBody body = birdSprite.getPhysicsBody();body.setCategoryBitmask(0x2); //010body.setContactTestBitmask(0x8); //100body.setCollisionBitmask(0x2); //100PhysicsBody body2 = groundSprite.getPhysicsBody();body2.setCategoryBitmask(0x8); //100body2.setContactTestBitmask(0x2);//010body.setCollisionBitmask(0x8); //100</span>
2.两个物体碰撞——移动柱子撞向小鸟:
这时,只要让Contact条件不满足,即不设置setContactTestBitmask
就会碰撞——默认Collision是0xFFFF FFFF(不记得多少位)
如果要设置CollisionBitMast,而不用默认值0xFFFFFFFF,那就要遵循规则,下面的例子,groundSprite取CollisionBitMask为0x8——和自己Category一样时,可以和birdSprite碰撞,而取其它值就无效。
CollisionBitMask是被撞Mask,从这个实验看来,这个mask要和自己的category一致(相与不为0),与被撞的birdSprite的Mask无关
<span style="font-size:18px;"> PhysicsBody body = birdSprite.getPhysicsBody(); body.setCategoryBitmask(0x2); //010 PhysicsBody body2 = groundSprite.getPhysicsBody(); body2.setCategoryBitmask(0x8); //100// body2.setContactTestBitmask(0x2);//010 body.setCollisionBitmask(0x8); //100</span>下面是调试代码:<span style="font-size:18px;">package org.cce.game.hello;import org.ccj.Director;import org.ccj.Scene;import org.ccj.base.Ref;import org.ccj.d2.Sprite;import org.ccj.d2.action.CallFunc;import org.ccj.d2.action.MoveTo;import org.ccj.d2.action.ScaleTo;import org.ccj.d2.action.Sequence;import org.ccj.editor.cce.Action;import org.ccj.editor.cce.Bind;import org.ccj.editor.cce.NodeController;import org.ccj.editor.cce.NodeReader;import org.ccj.math.Vec2;import org.ccj.physics.PhysicsBody;import org.ccj.physics.PhysicsContact;import org.ccj.physics.PhysicsContactListener;import org.ccj.physics.PhysicsWorld;/** */public class SceneController extends NodeController { @Bind() public Sprite bgSprite; @Bind() public Sprite birdSprite; @Bind() public Scene playScene; @Override public void onEnter() { super.onEnter(); PhysicsWorld wolrd = playScene.getPhysicsWorld(); wolrd.setGravity(new Vec2(0,-100)); initContactTest(); createPipeBarrier(); // groundSprite.runAction(MoveTo.create(3,new Vec2(0,groundSprite.getPositionY()))); } private void initContactTest() { setContact(); } private void setContact() { PhysicsBody body = birdSprite.getPhysicsBody(); body.setCategoryBitmask(0x2); //010 body.setContactTestBitmask(0x8); //100 System.out.println("setContact"); birdSprite.addPhysicsContactListener(new BirdAndPipeContact()); } public class BirdAndPipeContact extends PhysicsContactListener { { regContactBegin(); } @Override public boolean onContactBegin(PhysicsContact contact) { System.out.println("onContactBegin"); //Node birdNode = contact.getNode(1111); //birdNode.stopAllActions(); birdSprite.stopAllActions(); System.out.println("contact"); return false; } } public void createPipeBarrier() { final Sprite pipeBar = NodeReader.create().readSprite("layouts/pipeBarrierPhysics.cce"); PhysicsBody bodyUpPipe = pipeBar.getChildByName("upPipe").getPhysicsBody(); bodyUpPipe.setCategoryBitmask(0x8); bodyUpPipe.setContactTestBitmask(0x2); //bodyUpPipe.setCollisionBitmask(0x0); PhysicsBody bodyDownPipe = pipeBar.getChildByName("downPipe").getPhysicsBody(); bodyDownPipe.setCategoryBitmask(0x8); bodyDownPipe.setContactTestBitmask(0x2); // bodyDownPipe.setCollisionBitmask(0x0); pipeBar.setPositionX(720); //pipeBar长1800原因:屏幕长度设计为1280,整体pipeBar还要下沉450,所以至少大于1280+450 //down_pipe和up_pipe位置不便 pipeBar.setPositionY(-450f); pipeBar.runAction(Sequence.create( MoveTo.create(3, new Vec2(-140, pipeBar.getPositionY())) )); owner.addChild(pipeBar); } @Override public void onExit() { super.onExit(); } @Override public void onUpdate(float delta) { super.onUpdate(delta); } }</span>
0 0
- CocosEditor-java onContactBegin无反应
- CocosEditor-java
- CocosEditor-java ListView显示
- java连接hbase长时间无反应问题
- CocosEditor-java 图层问题
- CocosEditor-java 之PolygonShape错误
- CocosEditor-java点击事件出现信息:releassHandler80765691774323352
- CocosEditor-java 切换场景后触摸失灵
- ajax无反应
- url无反应
- resin 服务器无反应
- iPhone6Plus 屏幕无反应
- push无反应
- gradle download 无反应
- seekbar拖动无反应
- mouseup 无反应
- cordova编译无反应
- NPM指令无反应
- 八款你不得不知的开源前端JS框架
- Linux 下串口USB等设备通信编程入门2
- 新人报道下
- Android 零碎知识点汇总
- centos6.4 python beautifulsoup安装
- CocosEditor-java onContactBegin无反应
- RegexQuery正则表达式源代码
- ‘close’ was not declared in this scope
- 委托和事件的区别
- 问,LINUX AS 6能对一个LV进行动态的增加空间吗?
- GCC源码分析(3):Tree-SSA优化框架
- 虚拟现实技术实现理论之梦境论述
- 软件质量之道:PCLint之一
- 尴尬者的求职指南