PhysicsManager.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /*
  2. * @Author: your name
  3. * @Date: 2021-09-22 10:36:41
  4. * @LastEditTime: 2021-09-26 20:37:09
  5. * @LastEditors: Please set LastEditors
  6. * @Description: In User Settings Edit
  7. * @FilePath: \zombie-food\assets\script\manager\PhysicsManager.js
  8. */
  9. /**
  10. * 物理引擎管理组件
  11. */
  12. cc.Class({
  13. extends: Script,
  14. properties: {
  15. active: {
  16. default: true,
  17. tooltip: '是否启用物理引擎',
  18. },
  19. aabb: {
  20. default: true,
  21. tooltip: '是否显示包围盒',
  22. },
  23. pair: {
  24. default: true,
  25. },
  26. centerOfMass: {
  27. default: true,
  28. tooltip: '是否显示中心点'
  29. },
  30. joint: {
  31. default: true,
  32. tooltip: '是否显示关节连接线'
  33. },
  34. shape: {
  35. default: true,
  36. tooltip: '是否填充形状'
  37. },
  38. gravity: {
  39. default: cc.v2(0, -960),
  40. tooltip: '重力'
  41. }
  42. },
  43. onLoad() {
  44. window.PhysicsManager = this;
  45. // 物理步长,默认 FIXED_TIME_STEP 是 1/60
  46. cc.PhysicsManager.FIXED_TIME_STEP = 1 / 2;
  47. // 位移计算迭代次数 迭代的次数越多,解决刚体重叠的速度越快
  48. cc.PhysicsManager.POSITION_ITERATIONS = 8;
  49. // 速度计算迭代次数 迭代的次数越多,碰撞传导的速度越快
  50. cc.PhysicsManager.VELOCITY_ITERATIONS = 2;
  51. },
  52. open() {
  53. this.active = true;
  54. this.onEnable();
  55. },
  56. close() {
  57. this.active = false;
  58. this.onDisable();
  59. },
  60. onEnable() {
  61. //开启或关闭物理系统
  62. let physicsManager = cc.director.getPhysicsManager();
  63. if (physicsManager.enabled && this.active) {
  64. cc.warn('The physical system is enabled!');
  65. }
  66. physicsManager.enabled = this.active;
  67. // Get the collision manager.
  68. let manager = cc.director.getCollisionManager();
  69. // Enabled the colider manager.
  70. manager.enabled = true;
  71. if (!this.active) {
  72. return;
  73. }
  74. //设置物理系统的重力属性
  75. physicsManager.gravity = this.gravity;
  76. //设置调试标志
  77. let drawBits = cc.PhysicsManager.DrawBits;
  78. if (CC_PREVIEW) {
  79. physicsManager.debugDrawFlags =
  80. (this.aabb && drawBits.e_aabbBit) |
  81. (this.pair && drawBits.e_pairBit) |
  82. (this.centerOfMass && drawBits.e_centerOfMassBit) |
  83. (this.joint && drawBits.e_jointBit) |
  84. (this.shape && drawBits.e_shapeBit);
  85. } else {
  86. physicsManager.debugDrawFlags = 0;
  87. }
  88. },
  89. onDisable() {
  90. let physicsManager = cc.director.getPhysicsManager();
  91. physicsManager.debugDrawFlags = 0;
  92. physicsManager.enabled = false;
  93. }
  94. });