ball.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649
  1. // 对手削球,从右侧到右侧
  2. cc.Class({
  3. extends: cc.Component,
  4. properties: {
  5. },
  6. // LIFE-CYCLE CALLBACKS:
  7. onLoad () {
  8. this.initValues();
  9. this.initNodes();
  10. },
  11. // start () {
  12. // this.rivalPeelLtoR_01();
  13. // this.ballAction();
  14. // },
  15. // update() {
  16. // var beginPos = cc.v2(-95, 264);
  17. // var centerPos = cc.v2(30, 5);
  18. // var endPos = cc.v2(163, -140);
  19. // this.g.lineWidth = 4;
  20. // this.g.moveTo(beginPos.x, beginPos.y);
  21. // this.g.bezierCurveTo(beginPos.x, beginPos.y, -270, 440, centerPos.x, centerPos.y);
  22. // this.g.bezierCurveTo(centerPos.x, centerPos.y, 110, 20, endPos.x, endPos.y);
  23. // this.g.stroke();
  24. // },
  25. // 初始化
  26. initValues:function () {
  27. // 配置绘制的数据
  28. // 从配置中心获取数据
  29. this.gameconfig = require ("gameconfig")
  30. // 配置绘制组件
  31. this.g = this.getComponent(cc.Graphics);
  32. // 球的状态
  33. this.ballconfig = require("ballconfig");
  34. // 记录下节点
  35. this.poses = new Array();
  36. // 记录是否需要撞击的效果
  37. this.showBump = false;
  38. },
  39. // 初始化子节点
  40. initNodes:function() {
  41. this.head = new cc.Node("");
  42. this.head.setPosition(cc.v2(0, 0));
  43. this.head.parent = this.node;
  44. },
  45. // 外部调用
  46. // 球的运动停止
  47. ballStop:function() {
  48. // 首先停止所有动作
  49. this.head.stopAllActions();
  50. // 清空节点数组
  51. this.poses = [];
  52. this.g.clear();
  53. },
  54. // 全部停止
  55. ballEnd:function() {
  56. this.unschedule(this.ballUpdate);
  57. // 首先停止所有动作
  58. this.head.stopAllActions();
  59. // 清空节点数组
  60. this.poses = [];
  61. this.g.clear();
  62. },
  63. // 球开始运动,开始刷新帧
  64. ballAction:function() {
  65. this.schedule(this.ballUpdate, 1 / 60);
  66. },
  67. // 我方接球,从左到左
  68. minePatLToL_01:function() {
  69. if(this.stateCallback != null) {
  70. this.stateCallback(this.ballconfig.BALL_STATE_FLYING);
  71. }
  72. var beginPos = cc.v2(-103, -110);
  73. var dropPos = cc.v2(-64, 144);
  74. var endPos = cc.v2(-53, 313);
  75. // 将节点移动到指定位置
  76. this.head.setPosition(beginPos);
  77. var bezier_01 = [beginPos, cc.v2(-82, 20), dropPos];
  78. var bezier_02 = [dropPos, cc.v2(-68, 220), endPos];
  79. var move_01 = cc.bezierTo(0.5, bezier_01);
  80. var self = this;
  81. var move_01_end = cc.callFunc(function() {
  82. self.bump(dropPos);
  83. });
  84. var move_02 = cc.bezierTo(0.75, bezier_02);
  85. // 在第二条路线后开始的一段时间,需要通知控制器改变状态
  86. var delay = cc.delayTime(0.25);
  87. var change = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_RIVAL_LEFT_PAT);
  88. var spawn = cc.spawn(move_02, cc.sequence(delay, change));
  89. var move_02_end = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_DROP_IN_RIVAL);
  90. var jump = cc.jumpBy(1, cc.v2(50, 40), 30, 2);
  91. this.head.runAction(cc.sequence(move_01, move_01_end, spawn, move_02_end, jump));
  92. },
  93. // 我方接球,从右到右
  94. minePatRToR_01:function() {
  95. if(this.stateCallback != null) {
  96. this.stateCallback(this.ballconfig.BALL_STATE_FLYING);
  97. }
  98. var beginPos = cc.v2(52, -109);
  99. var dropPos = cc.v2(71, 141);
  100. var endPos = cc.v2(131, 309);
  101. // 将节点移动到指定位置
  102. this.head.setPosition(beginPos);
  103. var bezier_01 = [beginPos, cc.v2(61, 16), dropPos];
  104. var bezier_02 = [dropPos, cc.v2(40, 289), endPos];
  105. var move_01 = cc.bezierTo(0.5, bezier_01);
  106. var self = this;
  107. var move_01_end = cc.callFunc(function() {
  108. self.bump(dropPos);
  109. });
  110. var move_02 = cc.bezierTo(0.75, bezier_02);
  111. // 在第二条路线后开始的一段时间,需要通知控制器改变状态
  112. var delay = cc.delayTime(0.25);
  113. var change = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_RIVAL_RIGHT_PAT);
  114. var spawn = cc.spawn(move_02, cc.sequence(delay, change));
  115. var move_02_end = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_DROP_IN_RIVAL);
  116. var jump = cc.jumpBy(1, cc.v2(50, 40), 30, 2);
  117. this.head.runAction(cc.sequence(move_01, move_01_end, spawn, move_02_end, jump));
  118. },
  119. // 我方接球,从左到右
  120. minePatLToR_01:function() {
  121. if(this.stateCallback != null) {
  122. this.stateCallback(this.ballconfig.BALL_STATE_FLYING);
  123. }
  124. var beginPos = cc.v2(-103, -76);
  125. var dropPos = cc.v2(47, 140);
  126. var endPos = cc.v2(221, 346);
  127. // 将节点移动到指定位置
  128. this.head.setPosition(beginPos);
  129. var bezier_01 = [beginPos, cc.v2(-52, 20), dropPos];
  130. var bezier_02 = [dropPos, cc.v2(22, 340), endPos];
  131. var move_01 = cc.bezierTo(0.5, bezier_01);
  132. var self = this;
  133. var move_01_end = cc.callFunc(function() {
  134. self.bump(dropPos);
  135. });
  136. var move_02 = cc.bezierTo(0.75, bezier_02);
  137. // 在第二条路线后开始的一段时间,需要通知控制器改变状态
  138. var delay = cc.delayTime(0.25);
  139. var change = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_RIVAL_RIGHT_PAT);
  140. var spawn = cc.spawn(move_02, cc.sequence(delay, change));
  141. var move_02_end = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_DROP_IN_RIVAL);
  142. var jump = cc.jumpBy(1, cc.v2(50, 40), 30, 2);
  143. this.head.runAction(cc.sequence(move_01, move_01_end, spawn, move_02_end, jump));
  144. },
  145. // 我方削球,从右到左
  146. minePeelRToL_01:function() {
  147. if(this.stateCallback != null) {
  148. this.stateCallback(this.ballconfig.BALL_STATE_FLYING);
  149. }
  150. var beginPos = cc.v2(128, -117);
  151. var dropPos = cc.v2(-66, 143);
  152. var endPos = cc.v2(-134, 308);
  153. // 将节点移动到指定位置
  154. this.head.setPosition(beginPos);
  155. var bezier_01 = [beginPos, cc.v2(31, 15), dropPos];
  156. var bezier_02 = [dropPos, cc.v2(-75, 300), endPos];
  157. var move_01 = cc.bezierTo(0.5, bezier_01);
  158. var self = this;
  159. var move_01_end = cc.callFunc(function() {
  160. self.bump(dropPos);
  161. });
  162. var move_02 = cc.bezierTo(0.75, bezier_02);
  163. // 在第二条路线后开始的一段时间,需要通知控制器改变状态
  164. var delay = cc.delayTime(0.25);
  165. var change = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_RIVAL_LEFT_PEEL);
  166. var spawn = cc.spawn(move_02, cc.sequence(delay, change));
  167. var move_02_end = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_DROP_IN_RIVAL);
  168. var jump = cc.jumpBy(1, cc.v2(-50, 40), 30, 2);
  169. this.head.runAction(cc.sequence(move_01, move_01_end, spawn, move_02_end, jump));
  170. },
  171. // 我方削球,从右到右
  172. minePeelRToR_01:function() {
  173. if(this.stateCallback != null) {
  174. this.stateCallback(this.ballconfig.BALL_STATE_FLYING);
  175. }
  176. var beginPos = cc.v2(148, -176);
  177. var dropPos = cc.v2(79, 99);
  178. var endPos = cc.v2(104, 319);
  179. // 将节点移动到指定位置
  180. this.head.setPosition(beginPos);
  181. var bezier_01 = [beginPos, cc.v2(180, -20), dropPos];
  182. var bezier_02 = [dropPos, cc.v2(92, 210), endPos];
  183. var move_01 = cc.bezierTo(0.5, bezier_01);
  184. var self = this;
  185. var move_01_end = cc.callFunc(function() {
  186. self.bump(dropPos);
  187. });
  188. var move_02 = cc.bezierTo(0.75, bezier_02);
  189. // 在第二条路线后开始的一段时间,需要通知控制器改变状态
  190. var delay = cc.delayTime(0.25);
  191. var change = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_RIVAL_RIGHT_PAT);
  192. var spawn = cc.spawn(move_02, cc.sequence(delay, change));
  193. var move_02_end = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_DROP_IN_RIVAL);
  194. var jump = cc.jumpBy(1, cc.v2(50, 40), 30, 2);
  195. this.head.runAction(cc.sequence(move_01, move_01_end, spawn, move_02_end, jump));
  196. },
  197. // 对手发球
  198. rivalServer:function() {
  199. if(this.stateCallback != null) {
  200. this.stateCallback(this.ballconfig.BALL_STATE_FLYING);
  201. }
  202. var serverBegin = cc.v2(166, 290);
  203. var beatPos = cc.v2(96, 274);
  204. var dropPos = cc.v2(28, 144);
  205. var jumpPos = cc.v2(-14, 21);
  206. var endPos = cc.v2(-147, -161);
  207. // 将节点移动到指定位置
  208. this.head.setPosition(serverBegin);
  209. // 4条贝塞尔曲线
  210. var bezier_01 = [serverBegin, cc.v2(125, 400), beatPos];
  211. var bezier_02 = [beatPos, cc.v2(45, 250), dropPos];
  212. var bezier_03 = [dropPos, cc.v2(0, 56), jumpPos];
  213. var bezier_04 = [jumpPos, cc.v2(-80, 10), endPos];
  214. // 四条路线
  215. var move_01 = cc.bezierTo(1.2, bezier_01);
  216. var move_02 = cc.bezierTo(0.1, bezier_02);
  217. var move_03 = cc.bezierTo(0.1, bezier_03);
  218. var self = this;
  219. var move_03_end = cc.callFunc(function() {
  220. self.bump(jumpPos);
  221. });
  222. var move_04 = cc.bezierTo(0.3, bezier_04);
  223. // 在第四条路线后开始的一段时间,需要通知控制器改变状态
  224. var delay = cc.delayTime(0.15);
  225. var change = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_MINE_LEFT_PAT);
  226. var spawn = cc.spawn(move_04, cc.sequence(delay, change));
  227. var move_04_end = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_DROP_IN_MINE);
  228. var jump = cc.jumpBy(1, cc.v2(-100, -40), 30, 4);
  229. this.head.runAction(cc.sequence(move_01, move_02, move_03, move_03_end, spawn, move_04_end, jump));
  230. },
  231. // 对手接球,从右到左
  232. rivalPatRToL_01:function() {
  233. if(this.stateCallback != null) {
  234. this.stateCallback(this.ballconfig.BALL_STATE_FLYING);
  235. }
  236. var beginPos = cc.v2(112, 328);
  237. var dropPos = cc.v2(-22, 16);
  238. var endPos = cc.v2(-122, -182);
  239. // 将节点移动到指定位置
  240. this.head.setPosition(beginPos);
  241. // 贝塞尔曲线的关键点
  242. var bezier_01 = [beginPos, cc.v2(45, 172), dropPos];
  243. var bezier_02 = [dropPos, cc.v2(-120, -10), endPos];
  244. // 第一条路线
  245. var move_01 = cc.bezierTo(0.5, bezier_01);
  246. var self = this;
  247. // 中间碰到了桌面
  248. var move_01_end = cc.callFunc(function() {
  249. self.bump(dropPos);
  250. });
  251. var move_02 = cc.bezierTo(0.75, bezier_02);
  252. // 在第二条路线后开始的一段时间,需要通知控制器改变状态
  253. var delay = cc.delayTime(0.25);
  254. var change = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_MINE_LEFT_PAT);
  255. var spawn = cc.spawn(move_02, cc.sequence(delay, change));
  256. var move_02_end = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_DROP_IN_MINE);
  257. var jump = cc.jumpBy(1, cc.v2(-100, -40), 30, 3);
  258. this.head.runAction(cc.sequence(move_01, move_01_end, spawn, move_02_end, jump));
  259. },
  260. // 对手接球,第二种从右到左
  261. rivalPatRToL_02:function() {
  262. if(this.stateCallback != null) {
  263. this.stateCallback(this.ballconfig.BALL_STATE_FLYING);
  264. }
  265. var beginPos = cc.v2(103, 272);
  266. var dropPos = cc.v2(-15, 23);
  267. var endPos = cc.v2(-135, -123);
  268. // 将节点移动到指定位置
  269. this.head.setPosition(beginPos);
  270. // 贝塞尔曲线的关键点
  271. var bezier_01 = [beginPos, cc.v2(-15, 350), dropPos];
  272. var bezier_02 = [dropPos, cc.v2(-85, 65), endPos];
  273. // 第一条路线
  274. var move_01 = cc.bezierTo(0.5, bezier_01);
  275. var self = this;
  276. // 中间碰到了桌面
  277. var move_01_end = cc.callFunc(function() {
  278. self.bump(dropPos);
  279. });
  280. var move_02 = cc.bezierTo(0.75, bezier_02);
  281. // 在第二条路线后开始的一段时间,需要通知控制器改变状态
  282. var delay = cc.delayTime(0.25);
  283. var change = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_MINE_LEFT_PAT);
  284. var spawn = cc.spawn(move_02, cc.sequence(delay, change));
  285. var move_02_end = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_DROP_IN_MINE);
  286. var jump = cc.jumpBy(1, cc.v2(-100, -40), 30, 3);
  287. this.head.runAction(cc.sequence(move_01, move_01_end, spawn, move_02_end, jump));
  288. },
  289. // 对手接球,从左到左
  290. rivalPatLToL_01:function() {
  291. if(this.stateCallback != null) {
  292. this.stateCallback(this.ballconfig.BALL_STATE_FLYING);
  293. }
  294. var beginPos = cc.v2(-53, 272);
  295. var dropPos = cc.v2(-73, 10);
  296. var endPos = cc.v2(-127, -171);
  297. // 将节点移动到指定位置
  298. this.head.setPosition(beginPos);
  299. // 贝塞尔曲线的关键点
  300. var bezier_01 = [beginPos, cc.v2(-63, 149), dropPos];
  301. var bezier_02 = [dropPos, cc.v2(-95, -40), endPos];
  302. // 第一条路线
  303. var move_01 = cc.bezierTo(0.5, bezier_01);
  304. var self = this;
  305. // 中间碰到了桌面
  306. var move_01_end = cc.callFunc(function() {
  307. self.bump(dropPos);
  308. });
  309. var move_02 = cc.bezierTo(0.75, bezier_02);
  310. // 在第二条路线后开始的一段时间,需要通知控制器改变状态
  311. var delay = cc.delayTime(0.25);
  312. var change = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_MINE_LEFT_PAT);
  313. var spawn = cc.spawn(move_02, cc.sequence(delay, change));
  314. var move_02_end = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_DROP_IN_MINE);
  315. var jump = cc.jumpBy(1, cc.v2(-40, -40), 30, 2);
  316. this.head.runAction(cc.sequence(move_01, move_01_end, spawn, move_02_end, jump));
  317. },
  318. // 对手接球,从左到右
  319. rivalPatLToR_01:function() {
  320. if(this.stateCallback != null) {
  321. this.stateCallback(this.ballconfig.BALL_STATE_FLYING);
  322. }
  323. var beginPos = cc.v2(-56, 298);
  324. var dropPos = cc.v2(25, 13);
  325. var endPos = cc.v2(95, -115);
  326. // 将节点移动到指定位置
  327. this.head.setPosition(beginPos);
  328. // 贝塞尔曲线的关键点
  329. var bezier_01 = [beginPos, cc.v2(4, 145), dropPos];
  330. var bezier_02 = [dropPos, cc.v2(95, -35), endPos];
  331. // 第一条路线
  332. var move_01 = cc.bezierTo(0.5, bezier_01);
  333. var self = this;
  334. // 中间碰到了桌面
  335. var move_01_end = cc.callFunc(function() {
  336. self.bump(dropPos);
  337. });
  338. var move_02 = cc.bezierTo(0.75, bezier_02);
  339. // 在第二条路线后开始的一段时间,需要通知控制器改变状态
  340. var delay = cc.delayTime(0.25);
  341. var change = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_MINE_RIGHT_PEEL);
  342. var spawn = cc.spawn(move_02, cc.sequence(delay, change));
  343. var move_02_end = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_DROP_IN_MINE);
  344. var jump = cc.jumpBy(1, cc.v2(40, -40), 30, 2);
  345. this.head.runAction(cc.sequence(move_01, move_01_end, spawn, move_02_end, jump));
  346. },
  347. // 对手接球,从右到右
  348. rivalPatRToR_01:function() {
  349. if(this.stateCallback != null) {
  350. this.stateCallback(this.ballconfig.BALL_STATE_FLYING);
  351. }
  352. var beginPos = cc.v2(101, 271);
  353. var dropPos = cc.v2(49, 29);
  354. var endPos = cc.v2(24, -171);
  355. // 将节点移动到指定位置
  356. this.head.setPosition(beginPos);
  357. // 贝塞尔曲线的关键点
  358. var bezier_01 = [beginPos, cc.v2(50, 450), dropPos];
  359. var bezier_02 = [dropPos, cc.v2(15, 95), endPos];
  360. // 第一条路线
  361. var move_01 = cc.bezierTo(0.5, bezier_01);
  362. var self = this;
  363. // 中间碰到了桌面
  364. var move_01_end = cc.callFunc(function() {
  365. self.bump(dropPos);
  366. });
  367. var move_02 = cc.bezierTo(0.75, bezier_02);
  368. // 在第二条路线后开始的一段时间,需要通知控制器改变状态
  369. var delay = cc.delayTime(0.25);
  370. var change = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_MINE_RIGHT_PAT);
  371. var spawn = cc.spawn(move_02, cc.sequence(delay, change));
  372. var move_02_end = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_DROP_IN_MINE);
  373. var jump = cc.jumpBy(1, cc.v2(-40, -40), 30, 2);
  374. this.head.runAction(cc.sequence(move_01, move_01_end, spawn, move_02_end, jump));
  375. },
  376. // 对手接球,第二种从右到右
  377. rivalPatRToR_02:function() {
  378. if(this.stateCallback != null) {
  379. this.stateCallback(this.ballconfig.BALL_STATE_FLYING);
  380. }
  381. var beginPos = cc.v2(98, 273);
  382. var dropPos = cc.v2(49, 21);
  383. var endPos = cc.v2(28, -130);
  384. // 将节点移动到指定位置
  385. this.head.setPosition(beginPos);
  386. // 贝塞尔曲线的关键点
  387. var bezier_01 = [beginPos, cc.v2(68, 147), dropPos];
  388. var bezier_02 = [dropPos, cc.v2(15, -20), endPos];
  389. // 第一条路线
  390. var move_01 = cc.bezierTo(0.5, bezier_01);
  391. var self = this;
  392. // 中间碰到了桌面
  393. var move_01_end = cc.callFunc(function() {
  394. self.bump(dropPos);
  395. });
  396. var move_02 = cc.bezierTo(0.75, bezier_02);
  397. // 在第二条路线后开始的一段时间,需要通知控制器改变状态
  398. var delay = cc.delayTime(0.25);
  399. var change = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_MINE_RIGHT_PAT);
  400. var spawn = cc.spawn(move_02, cc.sequence(delay, change));
  401. var move_02_end = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_DROP_IN_MINE);
  402. var jump = cc.jumpBy(1, cc.v2(-40, -40), 30, 2);
  403. this.head.runAction(cc.sequence(move_01, move_01_end, spawn, move_02_end, jump));
  404. },
  405. // 对手削球,从左到左
  406. rivalPeelLtoL_01:function() {
  407. if(this.stateCallback != null) {
  408. this.stateCallback(this.ballconfig.BALL_STATE_FLYING);
  409. }
  410. var beginPos = cc.v2(-95, 263);
  411. var centerPos = cc.v2(-75, 58);
  412. var endPos = cc.v2(-66, -163);
  413. // 将节点移动到指定位置
  414. this.head.setPosition(beginPos);
  415. var bezier_01 = [beginPos, cc.v2(-230, 410), centerPos];
  416. var move_01 = cc.bezierTo(1, bezier_01);
  417. var move_01_end = cc.callFunc(function() {
  418. cc.log ("动作 1 结束 ... ");
  419. this.bump(centerPos);
  420. }, this);
  421. var bezier_02 = [centerPos, cc.v2(-125, 40), endPos];
  422. var move_02 = cc.bezierTo(1, bezier_02);
  423. // 在第二条路线后开始的一段时间,需要通知控制器改变状态
  424. var delay = cc.delayTime(0.25);
  425. var change = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_MINE_LEFT_PAT);
  426. var spawn = cc.spawn(move_02, cc.sequence(delay, change));
  427. var move_02_end = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_DROP_IN_MINE);
  428. var jump = cc.jumpBy(1, cc.v2(-40, -40), 30, 2);
  429. this.head.runAction(cc.sequence(move_01, move_01_end, spawn, move_02_end, jump));
  430. },
  431. // 对手削球,从左到右
  432. rivalPeelLtoR_01:function() {
  433. if(this.stateCallback != null) {
  434. this.stateCallback(this.ballconfig.BALL_STATE_FLYING);
  435. }
  436. var beginPos = cc.v2(-95, 264);
  437. var centerPos = cc.v2(30, 5);
  438. var endPos = cc.v2(163, -140);
  439. // 将节点移动到指定位置
  440. this.head.setPosition(beginPos);
  441. var bezier_01 = [beginPos, cc.v2(-270, 440), centerPos];
  442. var move_01 = cc.bezierTo(1, bezier_01);
  443. var move_01_end = cc.callFunc(function() {
  444. cc.log ("动作 1 结束 ... ");
  445. this.bump(centerPos);
  446. }, this);
  447. var bezier_02 = [centerPos, cc.v2(110, 20), endPos];
  448. var move_02 = cc.bezierTo(1, bezier_02);
  449. // 在第二条路线后开始的一段时间,需要通知控制器改变状态
  450. var delay = cc.delayTime(0.25);
  451. var change = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_MINE_RIGHT_PEEL);
  452. var spawn = cc.spawn(move_02, cc.sequence(delay, change));
  453. var move_02_end = cc.callFunc(this.changeState, this, this.ballconfig.BALL_STATE_DROP_IN_MINE);
  454. var jump = cc.jumpBy(1, cc.v2(40, -40), 30, 2);
  455. this.head.runAction(cc.sequence(move_01, move_01_end, spawn, move_02_end, jump));
  456. },
  457. // 球磕碰
  458. bump:function(loc) {
  459. this.bumpLoc = loc;
  460. this.bumpTime = 0;
  461. this.showBump = true;
  462. },
  463. // 更改状态
  464. changeState:function(node, state) {
  465. cc.log ("改变状态 ... " + state);
  466. if(this.stateCallback != null) {
  467. this.stateCallback(state);
  468. }
  469. },
  470. // 绘图
  471. draw:function(delay) {
  472. this.g.clear();
  473. // 画脑袋和身体
  474. this.g.lineWidth = this.gameconfig.CIRCLE_WIDTH
  475. // 画个头部
  476. this.g.fillColor.fromHEX('#ff00000');
  477. this.g.circle(this.head.x, this.head.y, this.gameconfig.HEAD_SIZE);
  478. this.g.close();
  479. this.g.stroke();
  480. this.g.fill();
  481. var pos = this.poses[0];
  482. this.g.lineWidth = 3;
  483. this.g.moveTo(pos.x, pos.y)
  484. for (var i = 0; i < this.poses.length; i++) {
  485. var getPos = this.poses[i];
  486. this.g.lineTo(getPos.x, getPos.y);
  487. }
  488. this.g.stroke();
  489. // 当需要绘制撞击点时
  490. if (this.showBump) {
  491. this.bumpTime += delay;
  492. var timeScale = 15;
  493. var space = 1;
  494. var low = 2.5;
  495. var high = 10;
  496. // 右上
  497. this.g.lineWidth = 3;
  498. this.g.moveTo(this.bumpLoc.x + space + this.bumpTime * timeScale * low, this.bumpLoc.y + space + this.bumpTime * timeScale * low);
  499. this.g.lineTo(this.bumpLoc.x + space + this.bumpTime * timeScale * high, this.bumpLoc.y + space + this.bumpTime * timeScale * high)
  500. this.g.stroke();
  501. // 右下
  502. this.g.lineWidth = 3;
  503. this.g.moveTo(this.bumpLoc.x + space + this.bumpTime * timeScale * low, this.bumpLoc.y - space - this.bumpTime * timeScale * low);
  504. this.g.lineTo(this.bumpLoc.x + space + this.bumpTime * timeScale * high, this.bumpLoc.y - space - this.bumpTime * timeScale * high)
  505. this.g.stroke();
  506. // 左上
  507. this.g.lineWidth = 3;
  508. this.g.moveTo(this.bumpLoc.x - space - this.bumpTime * timeScale * low, this.bumpLoc.y + space + this.bumpTime * timeScale * low);
  509. this.g.lineTo(this.bumpLoc.x - space - this.bumpTime * timeScale * high, this.bumpLoc.y + space + this.bumpTime * timeScale * high)
  510. this.g.stroke();
  511. // 右下
  512. this.g.lineWidth = 3;
  513. this.g.moveTo(this.bumpLoc.x - space - this.bumpTime * timeScale * low, this.bumpLoc.y - space - this.bumpTime * timeScale * low);
  514. this.g.lineTo(this.bumpLoc.x - space - this.bumpTime * timeScale * high, this.bumpLoc.y - space - this.bumpTime * timeScale * high)
  515. this.g.stroke();
  516. if (this.bumpTime > 0.1) {
  517. this.showBump = false;
  518. }
  519. }
  520. },
  521. // 帧更新
  522. ballUpdate:function (dt) {
  523. // 记录当前的位置
  524. var news = [this.head.position];
  525. // 在结合当前的数组
  526. this.poses = news.concat(this.poses);
  527. // 如果数组长度大于20,则将最后一个删除
  528. if (this.poses.length > 10) {
  529. this.poses.pop();
  530. }
  531. this.draw(dt);
  532. },
  533. });