PlayerController.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. // Learn TypeScript:
  2. // - https://docs.cocos.com/creator/manual/en/scripting/typescript.html
  3. // Learn Attribute:
  4. // - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
  5. // Learn life-cycle callbacks:
  6. // - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html
  7. import ConfigManager from "../../../engines/configs/ConfigManager";
  8. import MathUtils from "../../../engines/utils/MathUtils";
  9. import ConfigKeys from "../../models/ConfigKeys";
  10. import GameModel from "../../models/GameModel";
  11. import GameController from "./GameController";
  12. const {ccclass, property} = cc._decorator;
  13. @ccclass
  14. export default class PlayerController extends cc.Component {
  15. width:number=0;
  16. height:number=0;
  17. isLeft:boolean=false;
  18. isRight:boolean=false;
  19. private __isSprint:boolean=false;
  20. speed:cc.Vec3;
  21. leftSpeed:cc.Vec3;
  22. rightSpeed:cc.Vec3;
  23. dropSpeed:cc.Vec3;
  24. sprintSpeed:cc.Vec3;
  25. private helfWidth:number;
  26. private helfHeight:number;
  27. /**
  28. * 起始点
  29. */
  30. private startPos:cc.Vec3;
  31. /**
  32. * 喷气粒子
  33. */
  34. particle:cc.Node;
  35. onLoad () {
  36. }
  37. set isSprint(value:boolean){
  38. this.__isSprint=value;
  39. if(this.particle!=null){
  40. this.particle.active=this.__isSprint;
  41. }
  42. }
  43. get isSprint():boolean{
  44. return this.__isSprint;
  45. }
  46. start () {
  47. this.width=GameController.single.carConfig.width;
  48. this.height=GameController.single.carConfig.height;
  49. this.startPos=new cc.Vec3();
  50. this.startPos.x=5;
  51. this.startPos.y=3;
  52. this.startPos.z=GameController.single.levelConfig.startPos;
  53. this.helfWidth=this.width*0.5;
  54. this.helfHeight=this.height*0,5;
  55. this.speed=new cc.Vec3();
  56. this.speed.z=GameController.single.carConfig.speed;
  57. this.leftSpeed=new cc.Vec3();
  58. this.leftSpeed.x=-GameController.single.carConfig.turnSpeed;
  59. this.rightSpeed=new cc.Vec3();
  60. this.rightSpeed.x=GameController.single.carConfig.turnSpeed;
  61. this.sprintSpeed=new cc.Vec3();
  62. this.sprintSpeed.z=GameController.single.carConfig.sprintSpeed;
  63. this.dropSpeed=new cc.Vec3(0,-60,0);
  64. }
  65. update (dt:number) {
  66. let currentPos:cc.Vec3=this.node.position;
  67. currentPos.x=this.__logicPosition.x;
  68. currentPos.y=this.__logicPosition.y;
  69. currentPos.z=-this.__logicPosition.z;
  70. this.node.position=currentPos;
  71. }
  72. private __logicPosition:cc.Vec3=new cc.Vec3();
  73. get logicPosition():cc.Vec3{
  74. return this.__logicPosition;
  75. }
  76. set logicPosition(value:cc.Vec3){
  77. this.__logicPosition=value;
  78. }
  79. private __rect:cc.Rect=new cc.Rect();
  80. /**
  81. * 矩形
  82. */
  83. get rect():cc.Rect{
  84. this.__rect.x=this.logicPosition.x-this.helfWidth;
  85. this.__rect.y=this.logicPosition.z-this.helfHeight;
  86. this.__rect.width=this.width;
  87. this.__rect.height=this.height;
  88. return this.__rect;
  89. }
  90. private __gridView:cc.Vec3[];
  91. /**
  92. * 将碰撞盒子化为九宫格九个点
  93. */
  94. get gridView():cc.Vec3[]{
  95. let point:cc.Vec3;
  96. if(this.__gridView==null){
  97. this.__gridView=[];
  98. for (let index = 0; index < 9; index++) {
  99. point=new cc.Vec3();
  100. this.__gridView.push(point);
  101. }
  102. }
  103. let rt:cc.Rect=this.rect;
  104. let w1:number=rt.width/3;
  105. let h1:number=rt.height/3;
  106. let index:number=0;
  107. for (let xIndex = 0; xIndex < 3; xIndex++) {
  108. for (let yIndex = 0; yIndex < 3; yIndex++) {
  109. index=xIndex*3+yIndex;
  110. point=this.__gridView[index];
  111. point.x=rt.x+w1*xIndex;
  112. point.y=0;
  113. point.z=rt.y+h1*yIndex;
  114. }
  115. }
  116. return this.__gridView;
  117. }
  118. Reset():void{
  119. this.logicPosition.x=this.startPos.x;
  120. this.logicPosition.y=this.startPos.y;
  121. this.logicPosition.z=this.startPos.z;
  122. this.isLeft=false;
  123. this.isRight=false;
  124. this.isSprint=false;
  125. }
  126. }