文章中心 -> 软件使用

文章正文

如何使用青瓷引擎官方插件的Arcade物理系统呢?详细教程哪里有?绿盟这里有~ 青瓷引擎目前使用了Arcade物理系统,并对其进行了一些优化以获得更好的性能:

  • 开启物理系统

    物理系统目前已经作为一个内置插件集成在了青瓷引擎编辑器中,通过菜单 Plugins->PluginManager 打开插件管理面板,并勾选 Arcade Physics 即可。


  • 刚体

    要使一个物体受物理系统的影响,只需要为其添加一个刚体组件(RigidBody),之后该物体便可受到诸如重力、碰撞、阻力等物理效果的影响。目前仅UIImage和Sprite可以指定为刚体。
    注意:我们对刚体进行了一些限制,在使用刚体时需要注意以下几点,否则物理效果可能无法正常表现:

    所有刚体节点及父节点均不能设置旋转
    所有刚体节点的父节点均不能移动



    mass:

    刚体的质量,与 Bounce 属性共同决定了刚体碰撞后的速度变化,质量越大碰撞后的速度变化越小

    var rigidbody = self.sprite1.getScript("qc.arcade.RigidBody");

    // 设定刚体质量
    rigidbody1.mass = 100;

    moves:

    是否由物理来决定刚体的位置信息

    // 刚体位置由物理决定
    rigidbody.moves = true;

    immovable:

    刚体是否固定不动(即位置不受其他刚体的影响)

    // 刚体的位置固定不变
    rigidbody.immovable = true;

    collideWorldBounds:

    碰到游戏世界的边界是否反弹

    // 碰到游戏世界的边界后反弹
    rigidbody.collideWorldBounds = true;

    allowGravity:

    是否允许重力,开启后物理将受到重力的影响

    gravity:

    重力加速度,需要先将 allowGravity 属性设置为true才能生效

    // 刚体受重力影响
    rigidbody.allowGravity = true;

    rigidbody.gravity.y = 200;

    bounce:

    反弹力,与 Mass 属性共同决定了两个物体碰撞后的速度变化,反弹力越大物体碰撞后的速度变化越大

    // 设定刚体的反弹力
    rigidbody.bounce.x = 0.5;
    rigidbody.bounce.y = 0.5;

    vilocity:

    移动速度

    acceleration:

    加速度

    drag:

    空气阻力,当阻力大于0时,在移动的过程中会产生速度衰减

    // 设定刚体的移动速度
    rigidbody.vilocity.x = 100;
    rigidbody.vilocity.y = 50;

    // 设定刚体的加速度
    rigidbody.acceleration.x = 10;
    rigidbody.acceleration.y = 5;

    // 设定刚体受到的空气阻力
    rigidbody.drag.x = 5;
    rigidbody.drag.y = 5;

    allowRotation:

    是否允许刚体旋转

    angularVelocity:

    角速度,需要先将 allowRotation 设置为true才能生效

    angularAcceleration:

    角加速度

    angularDrag:

    角阻力,当角阻力大于0时,在旋转的过程中将会产生角速度衰减

    // 允许刚体旋转
    rigidbody.allowRotation = true;

    // 设定刚体的角速度
    rigidbody.angularVelocity = 20;

    // 设定刚体的角加速度
    rigidbody.angularAcceleration = 5;

    // 设定刚体受到的角阻力
    rigidbody.angularDrag = 1;

    checkCollision:

    当物体向某个方向移动时,是否检查碰撞,包含上下左右四个方向

    rigidbody.checkCollision.up = true;
    rigidbody.checkCollision.down = true;
    rigidbody.checkCollision.left = true;
    rigidbody.checkCollision.right = true;

    ccdIterations:

    碰撞检测时的离散点数量(0或-1表示不检测离散点),用于解决由于移动速度过快而产生的穿透问题。注意:此值越大开销越大,但碰撞检测的效果越好
  • 添加碰撞检测的方式

    可以通过如下两种方式,指定两个刚体需要进行碰撞:

    通过编辑器指定

    通过指定collides数组,将其他刚体拖拽进来,表示本刚体将与collides里的所有刚体做碰撞检测

    通过代码动态指定
    rigidbody.addCollide(node2);

    碰撞时的事件(回调):
    在需要关注碰撞结果的刚体节点,挂载逻辑脚本并实现onCollide接口,例如:

    var OnCollide = qc.defineBehaviour('qc.demo.OnCollide', qc.Behaviour, function() {
    this.clue = null;
    }, {
    clue: qc.Serializer.NODE
    });

    OnCollide.prototype.onCollide = function(o1, o2) {
    // o1和o2节点发生了碰撞
    };

文章来自绿盟(xDowns.com)转载请注明来路。



上一篇文章:青瓷引擎怎么启用脏矩形 脏矩形怎么使用 []