cocos 3.8.1 jsb chipmunk 在android 以及 ios上的区别
来源:互联网 发布:pid算法实例讲解 编辑:程序博客网 时间:2024/05/18 06:51
不知为何,chipmunk的 native版本 在 ios及 android上的 表现会不一样.
我用的是 cocos3.8.1
这个函数 在 mac与 ios 的 native平台,调用了以后 没有任何效果.
/// Set a collision handler to be used whenever the two shapes with the given collision types collide./// You can pass null for any function you don't want to implement.Space.prototype.addCollisionHandler = function(a, b, begin, preSolve, postSolve, separate){ assertSpaceUnlocked(this); // Remove any old function so the new one will get added. this.removeCollisionHandler(a, b); var handler = new CollisionHandler(); handler.a = a; handler.b = b; if(begin) handler.begin = begin; if(preSolve) handler.preSolve = preSolve; if(postSolve) handler.postSolve = postSolve; if(separate) handler.separate = separate; this.collisionHandlers[hashPair(a, b)] = handler;};
以下是我的碰撞检测函数.在 android及其它平台上,效果都是正常的.并且表现形式也一样.
space.addCollisionHandler(1, 5,self._collisionWallBegin.bind(this),null,null,null); _collisionWallBegin = function(arbiter, space){ //子弹与 墙碰撞 var self = this; var shapes = arbiter.getShapes(); var collTypeA = shapes[0].collision_type; var collTypeB = shapes[1].collision_type; var p = arbiter.getPoint(0); var notfire = false; if(p.x-22>=cc.winSize.width || p.y>=350){ notfire = true; } if(!notfire){ //检查是什么类型子弹.别和墙碰撞 if(!shapes[0]._bulletsprite.isCollisionBottomWall()){ return false; } } console.log( 'Collision Type A:' + collTypeA ); console.log( 'Collision Type B:' + collTypeB + ' nofire:'+notfire + ' x:'+ p.x); if(shapes[0]._bulletsprite.clearBulletPartial(notfire?0.1:0.03,notfire)){ return false; } self.space.addPostStepCallback(function(){ self._fightLogic.attackMiss(myconfig.controlconfig.collisiontype_wall); }); return false; }
这样的代码 在 mac 及 ios上 无法工作..视觉上的确已经发生了碰撞,但是这段碰撞检测代码根本就不调用
于是就想办法解决.
后来尝试添加了一下 默认的 碰撞检测
/// Set a default collision handler for this space./// The default collision handler is invoked for each colliding pair of shapes/// that isn't explicitly handled by a specific collision handler./// You can pass null for any function you don't want to implement.Space.prototype.setDefaultCollisionHandler = function(begin, preSolve, postSolve, separate){ assertSpaceUnlocked(this); var handler = new CollisionHandler(); if(begin) handler.begin = begin; if(preSolve) handler.preSolve = preSolve; if(postSolve) handler.postSolve = postSolve; if(separate) handler.separate = separate; this.defaultHandler = handler;};
也就是调用这个函数添加默认碰撞检测.
this.space.setDefaultCollisionHandler(function(arbiter, space){ // console.log('default collision begin'); var self = this; var shapes = arbiter.getShapes(); var collTypeA = shapes[0].collision_type; var collTypeB = shapes[1].collision_type;},null,null,null);
结果很兴奋,这个检测函数可以工作了.(为什么兴奋?工作不是才是正常的么? :( 要是你也碰到这种奇葩问题 也会很兴奋的.)
既然可以检测碰撞了.那么 就可以解决问题了.
为了与 其它平台能用.就做了个以下的特殊处理.问题得以解决
if(cc.sys.os == cc.sys.OS_OSX ||cc.sys.os == cc.sys.OS_IOS ) {//特殊处理 var collisions = {}; this.space.addCollisionHandler = function(typea,typeb,fun){ if(!collisions[typea]){ collisions[typea] = {}; } collisions[typea][typeb] = fun; }; this.space.setDefaultCollisionHandler(function(arbiter, space){ // console.log('default collision begin'); var self = this; var shapes = arbiter.getShapes(); var collTypeA = shapes[0].collision_type; var collTypeB = shapes[1].collision_type; // console.log( 'Collision Type A:' + collTypeA ); // console.log( 'Collision Type B:' + collTypeB ); var coll = collisions[collTypeA]; if(coll && coll[collTypeB]){ return coll[collTypeB](arbiter,space); //特殊处理 }else if(collisions[collTypeB] && collisions[collTypeB][collTypeA]){ //颠倒的.``` var p = arbiter.getPoint(0); var myarb = { getShapes:function(){ return [shapes[1],shapes[0]]; }, getPoint:function(x){ return p; } }; return collisions[collTypeB][collTypeA](myarb,space); } },null,null,null); }
大功告成!
我后来想想 也有可能 我使用 addCollisionHandler
这个函数的 姿势不对?..希望有大牛帮忙解惑.
1 0
- cocos 3.8.1 jsb chipmunk 在android 以及 ios上的区别
- cocos js 在android ios 打开网页
- cocos2d-html5 和 cocos2d-jsb的区别
- Cocos在android studio下的开发
- 在 Android 和 iOS 手机上模拟触屏点击的区别
- 在交互细节上,Android 与 iOS 有哪些区别?
- Cocos-js 之 使用Chipmunk实现碰撞 和 碰撞的监听
- COCOS-HTML5-3.9版本学习(四)chipmunk物理引擎的测试
- XML在Android-iOS上的应用
- Cocos从入门到精通--《Cocos引擎在mac平台上的搭建》
- Cocos从入门到精通--《Cocos引擎在Windows平台上的搭建》
- 在 Ios下编译cocos
- ionic 在mac上的环境搭建以及在iOS模拟器上测试
- android cocos ios文本复制
- Helper::seekWidgetByName 在JSB环境下的优化
- c++的类在jsb中的内存管理
- cocos中tinyxml在android下的问题
- 在cocos界面中添加android的view
- 第十四周 项目二 二叉树排序树中查找的路径
- C 单词首字母大写&统计单词个数
- 十五周 项目一 验证哈希表实施查找的相关算法
- mmseg分词算法
- 14.5.7 Limits on InnoDB Tables InnoDB 表的限制
- cocos 3.8.1 jsb chipmunk 在android 以及 ios上的区别
- 推荐10个很棒的AngularJS学习指南
- 逆袭指数
- 深入分析 Java 中的中文编码问题
- 缓动动画的实现
- 研究 UIActivityViewController
- UIButton之自定义button
- Longest Substring Without Repeating Characters
- Theharvester+Hydra批量扫弱口令账户