zoukankan      html  css  js  c++  java
  • cocos2d-x js在web和jsb环境下的兼容性差异

    最近一个项目,web下测试正常,在jsb环境下bug多多,记录解决方案以备后查

    一、cc.PhysicsSprite创建的物理精灵在添加到layer后,移动layer,在jsb环境下贴图不随着layer移动而移动

    解决方案:将创建PhysicsSprite的精灵贴图整合进一张大图中,使用SpriteBatchNode加载,将创建的sprite添加进SpriteBatchNode中

    this.spriteSheet = new cc.SpriteBatchNode(res.sltq0_png);

    var ballSprite = new cc.PhysicsSprite(resTexture.ball_png);

    this.spriteSheet.addChild(ballSprite,100);

    二、cc.PhysicsSprite创建的物理精灵在jsb下无法通过runAction的方式进行moveTo、moveBy、rotateXX等

    解决方案:PhysicsSprite物理精灵貌似无法直接通过runAction的方式位移或是旋转(不涉及位置改变的cc.flipX等操作是可以的)。如果是无法旋转,可以通过设置

    body的角速度解决body.setAngVel(10)。涉及改变位置的action可以通过定时器的方式折中实现

    三、cc.PhysicsSprite创建的物理精灵在jsb下无法通过setPositionX或setPositionY修改位置

    解决方案:(吐血的bug)物理精灵无法单一的修改某一个轴的坐标即通过setPositionX或setPositionY修改位置,不理解为何会出现这样低级的bug,可以通过

    sprite.setPosition(cc.p(newX,newY))或是直接设置body修改body.setPos(cc.p(newX,newY));

    四、按照官方API:schedule(callback, interval, repeat, delay, key)设置定时器,5个参数全传入时在web下没问题,传入第5个参数key时在jsb下定时器不生效。

    解决方案:尼玛吐血三升啊,废话一下,之前参照《Cocos2d-js开发之旅》这本书关于定时器的章节做了一个不变慢的定时器,当时按照书中的例子所有的定时器都没有传key这个参数,

    我当时将这个不变慢的无限执行的定时器附加在gameLayer上,因为业务需要又在gameLayer上用了一个scheduleOnce的定时器,结果scheduleOnce执行完后直接把我的无限执行定时器也给

    取消了(web环境会出现,jsb环境不存在这个现象),最后参照API传入了key这个参数解决问题,但是在jsb下,传入key参数会让定时器失效,所以,如果在web环境下,最好传入key参数,jsb环境不要传入key参数。

    本文地址:http://www.cnblogs.com/wangjiajun/p/4737232.html 

  • 相关阅读:
    03 JVM 从入门到实战 | 简述垃圾回收算法
    02 JVM 从入门到实战 | 什么样的对象需要被 GC
    01 JVM 从入门到实战 | 什么是 JVM
    从一道面试题探究 Integer 的实现
    程序员如何写一份更好的简历
    自己动手实现分布式任务调度框架(续)
    一个excel(20M)就能干趴你的poi,你信吗?
    一个普通类就能干趴你的springboot,你信吗?
    自己动手实现springboot配置(非)中心
    自己动手实现分布式任务调度框架
  • 原文地址:https://www.cnblogs.com/wangjiajun/p/4737232.html
Copyright © 2011-2022 走看看