NodeTouch.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. const PlayerStateStatic = require('PlayerState');
  2. cc.Class({
  3. extends: cc.Component,
  4. properties: {
  5. Hero: {
  6. default: null,
  7. type: cc.Node
  8. },
  9. StayInFrontLongAccelerationBand:null,
  10. IsPlayingAudio:false,
  11. YellowLinePrefab:null,
  12. HeroOldPositionX:0,
  13. CanCreateYellowArea:false
  14. },
  15. onLoad:function () {
  16. //todo 开始不能点击
  17. var Hero = cc.find('Hero');
  18. var PlayerStateScript = Hero.getComponent("PlayerState");
  19. PlayerStateScript.TouchControlEnableTouch = false;
  20. this.HeroControlScript = this.Hero.getComponent("HeroControl");
  21. this.YellowLinePrefab = null;
  22. },
  23. start : function () {
  24. cc.director.getCollisionManager().enabled = true;
  25. this.touchClick(true);
  26. },
  27. DrawBox : function () {
  28. //刚体包围盒
  29. cc.director.getPhysicsManager().debugDrawFlags = cc.PhysicsManager.DrawBits.e_aabbBit |
  30. cc.PhysicsManager.DrawBits.e_pairBit |
  31. cc.PhysicsManager.DrawBits.e_centerOfMassBit |
  32. cc.PhysicsManager.DrawBits.e_jointBit |
  33. cc.PhysicsManager.DrawBits.e_shapeBit
  34. ;
  35. },
  36. touchClick : function (b) {
  37. // cc.log("按屏幕了",this.enableTouch,this.TouchControlEnableTouch);
  38. var TouchLayout = cc.find("TouchLayout");
  39. var self = this;
  40. if (b) {
  41. TouchLayout.on(cc.Node.EventType.TOUCH_START, function (event) {
  42. this.TOUCH_START(true);
  43. }.bind(this), self.node);
  44. self.node.on(cc.Node.EventType.TOUCH_MOVE, function (event) {
  45. }.bind(this), self.node);
  46. self.node.on(cc.Node.EventType.TOUCH_END, function (event) {
  47. this.TOUCH_END(true);
  48. }.bind(this), self.node);
  49. }else{
  50. TouchLayout.off(cc.Node.EventType.TOUCH_START, function (event) {
  51. this.TOUCH_START(true);
  52. }.bind(this), self.node);
  53. self.node.off(cc.Node.EventType.TOUCH_MOVE, function (event) {
  54. }.bind(this), self.node);
  55. self.node.off(cc.Node.EventType.TOUCH_END, function (event) {
  56. this.TOUCH_END(true);
  57. }.bind(this), self.node);
  58. }
  59. },
  60. TOUCH_START:function()
  61. {
  62. var Hero = cc.find('Hero');
  63. var scene = cc.director.getScene();
  64. var Level = scene.getChildByName("Level");
  65. var HeroControlScript = Hero.getComponent("HeroControl");
  66. var PlayerStateScript = Hero.getComponent("PlayerState");
  67. // var player = Hero.getChildByName('Player');
  68. // cc.log(PlayerStateScript.enableTouch+'+++++++PlayerStateScript.enableTouch');
  69. // cc.log(PlayerStateScript.TouchControlEnableTouch+'+++++++PlayerStateScript.TouchControlEnableTouch');
  70. // cc.log("按下去 判断",PlayerStateScript.enableTouch,PlayerStateScript.TouchControlEnableTouch);
  71. if(!PlayerStateScript.enableTouch) return;
  72. if(!PlayerStateScript.TouchControlEnableTouch) return;
  73. var HeroControlPositionX = HeroControlScript.node.position.x -360;
  74. //setLine
  75. if(PlayerStateScript.CurrentInZoneType!=PlayerStateStatic.ZoneType.FrontLongAccelerationBand
  76. && PlayerStateScript.CurrentInZoneType!=PlayerStateStatic.ZoneType.CenterLongAccelerationBand
  77. && HeroControlScript.PlayerStateScript.BStagger == false)
  78. {
  79. var PlayerCollisionLinePosition = cc.p(HeroControlPositionX+4, 3);
  80. Level.getComponent('LevelControl').SetLocationLine(PlayerCollisionLinePosition);
  81. // cc.log("出来线吗",PlayerCollisionLinePosition);
  82. }
  83. // else{
  84. // cc.log(PlayerStateScript.CurrentInZoneType+'+++++++'+HeroControlScript.PlayerStateScript.BStagger);
  85. // cc.log(PlayerStateStatic.ZoneType.FrontLongAccelerationBand+'+++++++'+PlayerStateStatic.ZoneType.CenterLongAccelerationBand);
  86. // }
  87. if(PlayerStateScript.CurrentInZoneType===PlayerStateStatic.ZoneType.FrontLongAccelerationBand)
  88. {
  89. HeroControlScript.SpeedUp(PlayerStateStatic.ColliderSpeedUpPoint.FrontLongAccelerationBand);
  90. PlayerStateScript.BTouchedScreenInTheZone = true;
  91. var self = this;
  92. PlayerStateScript.StayInFrontLongAccelerationBand = function()
  93. {
  94. self.CanCreateYellowArea = true;
  95. self.FillLongAccelerationArea();
  96. }
  97. PlayerStateScript.schedule(PlayerStateScript.StayInFrontLongAccelerationBand, 0.01, cc.REPEAT_FOREVER);
  98. }
  99. else if(PlayerStateScript.CurrentInZoneType===PlayerStateStatic.ZoneType.CenterLongAccelerationBand)
  100. {
  101. PlayerStateScript.BDrawYellowLine = !PlayerStateScript.BDrawYellowLine;
  102. PlayerStateScript.BTouchedScreenInTheZone = true;
  103. var self = this;
  104. PlayerStateScript.StayInFrontLongAccelerationBand = function()
  105. {
  106. self.CanCreateYellowArea = true;
  107. self.FillLongAccelerationArea();
  108. }
  109. PlayerStateScript.schedule(PlayerStateScript.StayInFrontLongAccelerationBand, 0.01, cc.REPEAT_FOREVER);
  110. }
  111. else if(PlayerStateScript.CurrentInZoneType===PlayerStateStatic.ZoneType.BehindLongAccelerationBand)
  112. {
  113. HeroControlScript.Stagger();
  114. }
  115. },
  116. TOUCH_END:function()
  117. {
  118. var PlayerStateScript = cc.find('Hero').getComponent("PlayerState");
  119. if(PlayerStateScript.CurrentInZoneType===PlayerStateStatic.ZoneType.CenterLongAccelerationBand||
  120. PlayerStateScript.CurrentInZoneType===PlayerStateStatic.ZoneType.FrontLongAccelerationBand)
  121. {
  122. cc.find('Hero').getComponent('HeroControl').stopAudioByName("LongAccelerationStart");
  123. cc.find('Hero').getComponent('HeroControl').playAudioByName("LongAccelerationFinish");
  124. this.scheduleOnce(function() {
  125. this.IsPlayingAudio = false;
  126. }, 0.287);
  127. PlayerStateScript.unschedule(PlayerStateScript.StayInFrontLongAccelerationBand);
  128. PlayerStateScript.StayInFrontLongAccelerationBand = null;
  129. this.CanCreateYellowArea = false;
  130. //cc.log("*************************************************************************************************");
  131. }
  132. this.YellowLinePrefab = null;
  133. this.HeroOldPositionX = 0;
  134. },
  135. FillLongAccelerationArea:function() //这个大概18-25毫秒执行一次
  136. {
  137. // cc.log("");
  138. // cc.log(this.CanCreateYellowArea+'*********');
  139. if(!this.CanCreateYellowArea)return;
  140. var HeroControlScript = cc.find('Hero').getComponent("HeroControl");
  141. var PlayerStateScript = cc.find('Hero').getComponent("PlayerState");
  142. if (cc.find("Shade").getComponent('Shade').FadeTag) {
  143. return;
  144. }
  145. if(PlayerStateScript.CurrentInZoneType===PlayerStateStatic.ZoneType.BehindLongAccelerationBand)
  146. {
  147. PlayerStateScript.unschedule(PlayerStateScript.StayInFrontLongAccelerationBand);
  148. HeroControlScript.Stagger();
  149. cc.find('Hero').getComponent('HeroControl').stopAudioByName("LongAccelerationStart");
  150. cc.find('Hero').getComponent('HeroControl').playAudioByName("LongAccelerationFinish");
  151. this.IsPlayingAudio = false;
  152. return;
  153. }
  154. if(this.IsPlayingAudio == false){
  155. this.IsPlayingAudio = true;
  156. cc.find('Hero').getComponent('HeroControl').playAudioByName("LongAccelerationStart");
  157. }
  158. // var HeroControlPosition = HeroControlScript.node.getPosition();
  159. // cc.log(this.HeroOldPositionX+"==HeroOldPositionX");
  160. if(this.HeroOldPositionX == 0){
  161. this.HeroOldPositionX = HeroControlScript.node.x;
  162. return;
  163. }
  164. var SubPositionX = HeroControlScript.node.x - this.HeroOldPositionX;
  165. var YellowLinePosition = cc.p(HeroControlScript.node.x+50,HeroControlScript.node.y-641-55);
  166. // var YellowLinePosition = cc.p(HeroControlScript.node.x,HeroControlScript.node.y-641);
  167. if(this.YellowLinePrefab == null){
  168. this.YellowLinePrefab = cc.find('Level').getComponent('LevelControl').CreateYellowBG(YellowLinePosition);
  169. }
  170. if (this.YellowLinePrefab.getChildByName('Mask') !=null) {
  171. if (this.YellowLinePrefab.getChildByName('Mask').getChildByName('YellowBG')!=null) {
  172. this.YellowLinePrefab.getChildByName('Mask').getChildByName('YellowBG').x+=SubPositionX;
  173. }
  174. }
  175. this.HeroOldPositionX = HeroControlScript.node.x;
  176. HeroControlScript.SpeedUp(PlayerStateStatic.ColliderSpeedUpPoint.CenterLongAccelerationBand);
  177. // cc.log("我在加速带上面 我 设置了什么 type",HeroControlScript.CharactorScript.type);
  178. var NetworkSocket = cc.find('Hero').getComponent('NetworkSocket');
  179. var data = { FunctionName: 'LongAccelerationBandSpeedUp'};
  180. NetworkSocket.sendSyncData(JSON.stringify(data));
  181. },
  182. PrintCurrentState:function(PlayerStateScript)
  183. {
  184. switch (PlayerStateScript.CurrentInZoneType)
  185. {
  186. case 0 :
  187. cc.log('None');
  188. break;
  189. case 1 :
  190. cc.log('FrontAccelerationBand');
  191. break;
  192. case 2 :
  193. cc.log('AccelerationBandCenter');
  194. break;
  195. case 3 :
  196. cc.log('BehindAccelerationBand');
  197. break;
  198. case 4 :
  199. cc.log('PreHurdleBand');
  200. break;
  201. case 5 :
  202. cc.log('PerfectHurdleBand');
  203. break;
  204. case 6 :
  205. cc.log('FrontLongAccelerationBand');
  206. break;
  207. case 7 :
  208. cc.log('CenterLongAccelerationBand');
  209. break;
  210. case 8 :
  211. cc.log('BehindLongAccelerationBand');
  212. break;
  213. case 9 :
  214. cc.log('FrontLongJumpBand');
  215. break;
  216. case 10 :
  217. cc.log('PerfectLongJumpBand');
  218. break;
  219. }
  220. },
  221. update:function(dt)
  222. {
  223. // cc.log('***'+cc.find('Hero').getComponent("HeroControl").PlayerStateScript.BStagger);
  224. var Rivel = cc.find('Rivel');
  225. var Hero = cc.find('Hero');
  226. // cc.log(Math.abs(Rivel.position.x-Hero.position.x));
  227. // if(Math.abs(Rivel.position.x-Hero.position.x)>3000 && this.distanceX<3000)
  228. // {
  229. // cc.log('distance>3000')
  230. // }
  231. //
  232. // if(Math.abs(Rivel.position.x-Hero.position.x)<3000 && this.distanceX>3000)
  233. // {
  234. // cc.log('distance<3000')
  235. // }
  236. // this.distanceX=Math.abs(Rivel.position.x-Hero.position.x);
  237. }
  238. });
  239. //todo 多点触碰 制裁
  240. cc.Node.maxTouchNum = 1;
  241. cc.Node.touchNum = 0;
  242. var __dispatchEvent__ = cc.Node.prototype.dispatchEvent;
  243. cc.Node.prototype.dispatchEvent = function (event) {
  244. switch (event.type) {
  245. case 'touchstart':
  246. if (cc.Node.touchNum < cc.Node.maxTouchNum) {
  247. cc.Node.touchNum++;
  248. this._canTouch = true;
  249. __dispatchEvent__.call(this, event);
  250. }
  251. break;
  252. case 'touchmove':
  253. if (!this._canTouch && cc.Node.touchNum < cc.Node.maxTouchNum) {
  254. this._canTouch = true;
  255. cc.Node.touchNum++;
  256. }
  257. if (this._canTouch) {
  258. __dispatchEvent__.call(this, event);
  259. }
  260. break;
  261. case 'touchend':
  262. if (this._canTouch) {
  263. this._canTouch = false;
  264. cc.Node.touchNum--;
  265. __dispatchEvent__.call(this, event);
  266. }
  267. break;
  268. case 'touchcancel':
  269. if (this._canTouch) {
  270. this._canTouch = false;
  271. cc.Node.touchNum--;
  272. __dispatchEvent__.call(this, event);
  273. }
  274. break;
  275. default:
  276. __dispatchEvent__.call(this, event);
  277. }
  278. };