app.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674
  1. /**
  2. * Created by quanchen on 2014/12/1.
  3. */
  4. function appObj()
  5. {
  6. this.init=function()
  7. {
  8. window.onresize=resizeCanvas;
  9. }
  10. this.startGame=function()
  11. {
  12. if(!bg) bg=new lib.BG();
  13. if(!ball) ball=new lib.Ball();
  14. if(!bar) bar=new lib.Bar();
  15. if(!hitMc) hitMc=new createjs.MovieClip();
  16. if(!exp) exp=new lib.Exp();
  17. if(!numMc) numMc=new createjs.MovieClip();
  18. if(!heartMc) heartMc=new createjs.MovieClip();
  19. stage.addChild(mc);
  20. mc.addChild(bg);
  21. mc.addChild(hitMc);
  22. mc.addChild(ball);
  23. mc.addChild(bar);
  24. mc.addChild(numMc);
  25. mc.addChild(heartMc);
  26. ball.gotoAndStop(0);
  27. bar.gotoAndStop(0);
  28. bar.x=320;
  29. bar.y=50;
  30. hitMc.removeAllChildren();
  31. hitNum=HEARTNUM;
  32. addHeart(heartMc,hitNum);
  33. heartMc.y=100;
  34. ball.x=438;
  35. ball.y=820;
  36. ball.scaleX=ball.scaleY=1;
  37. numMc.x=500;
  38. numMc.y=20;
  39. isAddSpeed=false;
  40. resizeCanvas();
  41. canvas.addEventListener('touchstart',onTouchStart,true);
  42. canvas.addEventListener('touchmove',onTouchMove,true);
  43. canvas.addEventListener('touchend',onTouchEnd,true);
  44. stage.addEventListener('tick',onTickHandler);
  45. loadNum=0;
  46. gold=0;
  47. speed=15;
  48. moveObjArr=[];
  49. moveTime=setInterval(addMoveObj,moveTimeNum);
  50. treeObjArr=[];
  51. treeTime=setInterval(addTree,1000);
  52. addTree();
  53. ballXId=1;
  54. //360-170; 城堡
  55. //345-215; 山;
  56. //227-242; 草
  57. bg.house_mc.y=360;
  58. bg.hill_mc.y=345;
  59. bg.grass_mc.y=272;
  60. if(isNeedTeach)//第一次游戏显示新手教程;
  61. {
  62. showTeach();
  63. }
  64. else
  65. {
  66. rndTime=setInterval(addRnd,1000);
  67. console.log('rndTime');
  68. addRnd();
  69. }
  70. setTimeout(function () {
  71. resizeCanvas();
  72. //alert('resizeCanvas')
  73. },100)
  74. }
  75. function showTeach()
  76. {
  77. teach=new lib.Teach();
  78. teach.x=133;
  79. mc.addChild(teach);
  80. }
  81. function teachComplete()//新手教程完成;
  82. {
  83. mc.removeChild(teach);
  84. rndTime=setInterval(addRnd,1000);
  85. console.log('rndTime teachComplete');
  86. addRnd();
  87. }
  88. function addRnd()
  89. {
  90. hitId=Math.floor(Math.random()*hitObjArr.length);
  91. roundId=Math.floor(Math.random()*3);
  92. currentHitObj=hitObjArr[hitId];
  93. currentHitObj.show=true;
  94. }
  95. function addTree()
  96. {
  97. var roundArr=[450-90,450+90];
  98. var roundAng=[Math.PI/2+Math.PI/5,Math.PI/2-Math.PI/5];
  99. var tmp=new lib.Tree();
  100. bg.addChild(tmp);
  101. treeObjArr.push(tmp);
  102. tmp.x=roundArr[0];
  103. tmp.y=260;
  104. tmp.ang=roundAng[0];
  105. tmp=new lib.Tree();
  106. bg.addChild(tmp);
  107. treeObjArr.push(tmp);
  108. tmp.x=roundArr[1];
  109. tmp.y=260;
  110. tmp.ang=roundAng[1];
  111. }
  112. function addMoveObj()
  113. {
  114. if(!currentHitObj) return;
  115. if(!currentHitObj.show) return;
  116. if(currentHitObj.type=='one')
  117. {
  118. if(currentHitObj.show) currentHitObj.show=false;
  119. }
  120. var roundArr=[450-40,450,450+40];
  121. var roundAng=[Math.PI/2+Math.PI/8.2,Math.PI/2,Math.PI/2-Math.PI/8.2];
  122. //console.log(hitId,roundId);
  123. var roundIdArr=[0,1,2];
  124. var num;
  125. if(currentHitObj.type=='one')
  126. {
  127. num=1+Math.floor(Math.random()*2);
  128. //num=2;
  129. }
  130. else
  131. {
  132. num=1;
  133. }
  134. var tmp;
  135. var tmpId;
  136. for(var i=0;i<num;i++)
  137. {
  138. if(currentHitObj.type=='one')
  139. {
  140. tmpId=Math.floor(Math.random()*roundIdArr.length);
  141. roundId=roundIdArr[tmpId];
  142. roundIdArr.splice(tmpId,1);
  143. }
  144. tmp=new currentHitObj.obj();
  145. tmp.roundId=roundId;
  146. tmp.ang=roundAng[roundId];
  147. tmp.add=currentHitObj.add;
  148. moveObjArr.push(tmp);
  149. hitMc.addChild(tmp);
  150. //tmp.scaleX=tmp.scaleY=(tmp.y-180)/400;
  151. tmp.x=roundArr[roundId];
  152. if(roundId==1)
  153. {
  154. tmp.y=240;
  155. }
  156. else
  157. {
  158. tmp.y=240;
  159. }
  160. }
  161. //roundId=0;
  162. //hitId=3;
  163. /*
  164. if(hitId==3)
  165. {
  166. for(var i=0;i<5;i++)
  167. {
  168. tmp=new hitObjArr[hitId].obj();
  169. tmp.roundId=roundId;
  170. tmp.ang=roundAng[roundId];
  171. tmp.add=hitObjArr[hitId].add;
  172. moveObjArr.push(tmp);
  173. hitMc.addChild(tmp);
  174. tmp.x=roundArr[roundId];
  175. tmp.y=240-i*10-10;
  176. }
  177. }
  178. */
  179. }
  180. function onTickHandler(e)
  181. {
  182. onEnterFrame();
  183. }
  184. function onEnterFrame()
  185. {
  186. var hit;
  187. for(var i=0;i<moveObjArr.length;i++)
  188. {
  189. hit=moveObjArr[i];
  190. hit.x+=Math.cos(hit.ang)*speed*hit.scaleX;
  191. //hit.y+=Math.sin(hit.ang)*speed*hit.scaleX;
  192. hit.y+=speed*hit.scaleX;
  193. hit.scaleX=hit.scaleY=(hit.y-180)/400;
  194. if(hit.scaleX>1.4&&hit.scaleX<1.6)
  195. {
  196. if(hit.roundId==ballXId)
  197. {
  198. //console.log(ball.currentFrame);
  199. if(ball.currentFrame==0||(ball.currentFrame==1&&ball.getChildAt(0).currentFrame>12))//正常滚动
  200. {
  201. if(hit.add==0)
  202. {
  203. if(hitBallObj!=hit)
  204. {
  205. hitBallObj=hit;
  206. hitNum-=1;
  207. setHeartNum(hitNum);
  208. console.log('hitNum:',hitNum);
  209. }
  210. //gameOver();
  211. }
  212. else
  213. {
  214. mc.addChild(exp);
  215. exp.scaleX= exp.scaleY=ball.scaleX;
  216. exp.gotoAndPlay(0);
  217. exp.x=hit.x;
  218. exp.y=hit.y;
  219. hitMc.removeChild(hit);
  220. moveObjArr.splice(i,1);
  221. i-=1;
  222. loadNum+=100;
  223. addGold();
  224. }
  225. }
  226. else if(ball.currentFrame==2)//加速;
  227. {
  228. mc.addChild(exp);
  229. exp.gotoAndPlay(0);
  230. exp.scaleX= exp.scaleY=ball.scaleX;
  231. exp.x=hit.x;
  232. exp.y=hit.y-50;
  233. hitMc.removeChild(hit);
  234. moveObjArr.splice(i,1);
  235. i-=1;
  236. loadNum+=100;
  237. addGold();
  238. }
  239. else if(ball.currentFrame==1)//跳跃;
  240. {
  241. }
  242. }
  243. }
  244. if(hit.y>1100)
  245. {
  246. hitMc.removeChild(hit);
  247. moveObjArr.splice(i,1);
  248. i-=1;
  249. //console.log('hit miss');
  250. }
  251. }
  252. if(hitBallObj)
  253. {
  254. ball.y=hitBallObj.y+60;
  255. if(hitBallObj.y>1100)
  256. {
  257. createjs.Tween.get(ball, {loop: false}).to({y:820}, 200,createjs.Ease.circOut);
  258. hitBallObj=undefined;
  259. }
  260. }
  261. var tree;
  262. for(var j=0;j<treeObjArr.length;j++)
  263. {
  264. tree=treeObjArr[j];
  265. tree.x+=Math.cos(tree.ang)*speed*tree.scaleX;
  266. tree.y+=Math.sin(tree.ang)*speed*tree.scaleX;
  267. tree.scaleX=tree.scaleY=(tree.y-150)/400;
  268. if(tree.y>1100)
  269. {
  270. bg.removeChild(tree);
  271. treeObjArr.splice(j,1);
  272. j-=1;
  273. //console.log('tree miss');
  274. }
  275. }
  276. bg.house_mc.y-=0.05;
  277. //bg.house_mc.y-=0.02;
  278. bg.hill_mc.y-=0.05;
  279. bg.grass_mc.y-=0.02;
  280. if(bg.house_mc.y<=170)
  281. {
  282. bg.house_mc.y=170;
  283. //gameOver();
  284. }
  285. if(bg.hill_mc.y<=215) bg.hill_mc.y=215;
  286. if(bg.grass_mc.y<=242) bg.grass_mc.y=242;
  287. if(!isNeedTeach)
  288. {
  289. loadNum+=speed;
  290. addNum(numMc,loadNum);
  291. }
  292. }
  293. function addGold()
  294. {
  295. gold+=5;
  296. if(gold>=99) gold=99;
  297. bar.gotoAndStop(gold);
  298. if(gold==99)
  299. {
  300. addSpeed();
  301. }
  302. }
  303. function addSpeed()
  304. {
  305. if(!isAddSpeed)
  306. {
  307. isAddSpeed=true;
  308. }
  309. else
  310. {
  311. return;
  312. }
  313. speed=35;
  314. ball.scaleX=ball.scaleY=1.5;
  315. ball.gotoAndStop(2);
  316. clearTimeout(addSpeedTime);
  317. clearInterval(moveTime);
  318. moveTime=setInterval(addMoveObj,moveTimeNum*(15/35));
  319. clearInterval(treeTime);
  320. treeTime=setInterval(addTree,800*(15/35));
  321. addSpeedTime=setTimeout(function(){
  322. speed=15;
  323. ball.scaleX=ball.scaleY=1;
  324. gold=0;
  325. bar.gotoAndStop(0);
  326. ball.gotoAndStop(0);
  327. clearInterval(moveTime);
  328. moveTime=setInterval(addMoveObj,moveTimeNum);
  329. clearInterval(treeTime);
  330. treeTime=setInterval(addTree,800);
  331. isAddSpeed=false;
  332. },6000)
  333. }
  334. //添加分值;
  335. function addNum(arg,num)
  336. {
  337. var numClassArr=[lib.Num0,lib.Num1,lib.Num2,lib.Num3,lib.Num4,lib.Num5,lib.Num6,lib.Num7,lib.Num8,lib.Num9];
  338. var numClass;
  339. var tmp;
  340. arg.removeAllChildren();
  341. for(var i=0;i<num.toString().length;i++)
  342. {
  343. tmp=num.toString().substr(i,1);
  344. numClass=new numClassArr[tmp]();
  345. numClass.scaleX=numClass.scaleY=0.8;
  346. arg.addChild(numClass);
  347. numClass.x=40*i*0.8;
  348. }
  349. arg.x=900-180-40*i*0.8;
  350. }
  351. //heart
  352. function addHeart(arg,num)
  353. {
  354. var tmp;
  355. for(var i=0;i<num;i++)
  356. {
  357. tmp=new lib.Heart();
  358. tmp.name='mc'+ i.toString();
  359. arg.addChild(tmp);
  360. tmp.x=210+i*40;
  361. }
  362. }
  363. function setHeartNum(num)
  364. {
  365. var tmp;
  366. tmp=heartMc.getChildByName('mc'+String(num));
  367. heartMc.removeChild(tmp);
  368. if(num==0)
  369. {
  370. gameOver();
  371. }
  372. }
  373. function gameOver()
  374. {
  375. clearInterval(moveTime);
  376. clearInterval(rndTime);
  377. clearInterval(treeTime);
  378. clearTimeout(addSpeedTime);
  379. stage.removeEventListener('tick',onTickHandler);
  380. canvas.removeEventListener('touchstart',onTouchStart,true);
  381. canvas.removeEventListener('touchmove',onTouchMove,true);
  382. canvas.removeEventListener('touchend',onTouchEnd,true);
  383. ball.gotoAndStop(3);
  384. ball.getChildAt(0).gotoAndPlay(0);
  385. score=loadNum;
  386. setTimeout(function(){
  387. removeTree();
  388. stage.removeChild(mc);
  389. screenPanel.showPanel(1);
  390. },1000);
  391. }
  392. function removeTree()
  393. {
  394. var tree;
  395. for(var i=0;i<treeObjArr.length;i++)
  396. {
  397. tree=treeObjArr[i];
  398. bg.removeChild(tree);
  399. }
  400. }
  401. function onTouchStart(e)
  402. {
  403. e.preventDefault();
  404. var touch= e.touches[0];
  405. touchX=touch.pageX;
  406. touchY=touch.pageY;
  407. //console.log(e);
  408. }
  409. function onTouchMove(e)
  410. {
  411. e.preventDefault();
  412. var touch= e.touches[0];
  413. touchMoveX=touch.pageX;
  414. touchMoveY=touch.pageY;
  415. }
  416. function onTouchEnd(e)
  417. {
  418. //console.log(touchX>>0,touchMoveX>>0);
  419. if((touchX-touchMoveX)>60)
  420. {
  421. ballMove('left');
  422. }
  423. else if((touchX-touchMoveX)<(-60))
  424. {
  425. ballMove('right');
  426. }
  427. else if((touchY-touchMoveY)>60)
  428. {
  429. ballMove('up');
  430. }
  431. }
  432. var mc=new createjs.MovieClip();
  433. var hitMc;//碰撞容器;
  434. var numMc;//分值容器;
  435. var heartMc;//
  436. var target=this;
  437. var bg;//背景;
  438. var ball;//滚蛋球;
  439. var bar;//金币条;
  440. var touchX;
  441. var touchMoveX;
  442. var touchY;
  443. var touchMoveY;
  444. var ballXId=1;//球的位置,0,1,2;
  445. var ballXPosArr=[438-250,438,438+250];//球对应的具体位置;
  446. var speed=15;//场景移动速度;
  447. var hitObjArr=[
  448. {name:'hit0',obj:lib.Hit0,type:'one',show:true,add:0},
  449. {name:'hit1',obj:lib.Hit1,type:'one',show:true,add:0},
  450. {name:'hit2',obj:lib.Hit2,type:'one',show:true,add:0},
  451. {name:'hit3',obj:lib.Hit3,type:'all',show:true,add:100},
  452. {name:'hit3',obj:lib.Hit3,type:'all',show:true,add:100},
  453. {name:'hit3',obj:lib.Hit3,type:'all',show:true,add:100}
  454. ];//障碍物属性;
  455. var moveTime;//添加障碍物间隔时间;
  456. var moveTimeNum=350;//
  457. var treeTime;//添加树木间隔时间;
  458. var rndTime;//随机参数,是出现金币还是障碍物;
  459. var addSpeedTime;//加速持续时间;
  460. var moveObjArr;//障碍物数组;
  461. var treeObjArr;//树木数组;
  462. var loadNum;//路程记录;
  463. var gold;//金币数量;
  464. var hitBallObj;//碰撞到滚蛋球的障碍物对象;
  465. var isAddSpeed;//是否正处于加速状态;
  466. var hitId;
  467. var roundId;
  468. var currentHitObj;//当前对象;
  469. var exp;//消失特效;
  470. var teach;//
  471. var hitNum;//可碰撞次数;
  472. function ballMove(arg)
  473. {
  474. if(isNeedTeach) teachMove(arg);
  475. switch (arg)
  476. {
  477. case 'left':
  478. if(ballXId>0)
  479. {
  480. ballXId-=1;
  481. //ball.x=ballXPosArr[ballXId];
  482. createjs.Tween.get(ball, {loop: false}).to({x: ballXPosArr[ballXId]}, 200,createjs.Ease.circOut);
  483. }
  484. break;
  485. case 'right':
  486. if(ballXId<2)
  487. {
  488. ballXId+=1;
  489. //ball.x=ballXPosArr[ballXId];
  490. createjs.Tween.get(ball, {loop: false}).to({x: ballXPosArr[ballXId]}, 200,createjs.Ease.circOut);
  491. }
  492. break;
  493. case 'up':
  494. if(ball.currentFrame==0)
  495. {
  496. ball.gotoAndStop(1);
  497. }
  498. else if(ball.currentFrame==1)
  499. {
  500. if(ball.getChildAt(0).currentFrame>14) ball.getChildAt(0).gotoAndPlay(1);
  501. }
  502. break;
  503. }
  504. }
  505. function teachMove(arg)
  506. {
  507. switch (arg)
  508. {
  509. case 'left':
  510. if(teach._mc.currentFrame==0)
  511. {
  512. setTimeout(function(){
  513. teach.visible=false;
  514. ball.x=ballXPosArr[1];
  515. setTimeout(function(){
  516. teach.visible=true;
  517. teach._mc.gotoAndStop(1);
  518. ballXId=1;
  519. },300);
  520. },500);
  521. }
  522. break;
  523. case 'right':
  524. if(teach._mc.currentFrame==1)
  525. {
  526. setTimeout(function(){
  527. teach.visible=false;
  528. ball.x=ballXPosArr[1];
  529. setTimeout(function(){
  530. teach.visible=true;
  531. teach._mc.gotoAndStop(2);
  532. ballXId=1;
  533. },300);
  534. },500);
  535. }
  536. break;
  537. case 'up':
  538. if(teach._mc.currentFrame==2)
  539. {
  540. //teach._mc.gotoAndStop(2);
  541. isNeedTeach=false;
  542. setTimeout(function(){
  543. teachComplete();
  544. },1500);
  545. }
  546. break;
  547. }
  548. }
  549. function resizeCanvas()
  550. {
  551. var pro=defultW/defultH;
  552. var w=window.innerWidth;
  553. var h=window.innerHeight;
  554. if(w>h)//横屏
  555. {
  556. //root.h_mc.visible=true;
  557. defultW=CONH;
  558. defultH=CONW;
  559. pro=defultW/defultH;
  560. if(pro<(w/h))
  561. {
  562. scale=mc.scaleX=mc.scaleY=w/defultW;
  563. }
  564. else
  565. {
  566. scale=mc.scaleX=mc.scaleY=h/defultH;
  567. }
  568. }
  569. else//竖屏
  570. {
  571. //root.h_mc.visible=false;
  572. defultW=900;
  573. defultH=1015;
  574. pro=defultW/defultH;
  575. if(pro<(w/h))
  576. {
  577. scale=mc.scaleX=mc.scaleY=w/defultW;
  578. }
  579. else
  580. {
  581. scale=mc.scaleX=mc.scaleY=h/defultH;
  582. }
  583. }
  584. wrongx=(w-(scale*defultW))/2;
  585. mc.x=(w-(scale*defultW))/2;
  586. mc.y=(h-(scale*defultH))/2;
  587. canvas.width=w;
  588. canvas.height=h;
  589. }
  590. }/* |xGv00|29d43712ae8710d3c78f16b2f4759175 */