CBallChallenge.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. function CBallChallenge(CGameRef){
  2. var _bFrozen = false;
  3. var _fForceIncTick = GRAVITY_INCREASE;
  4. var _v2IniGravity = new CVector2(0,INIT_GRAVITY_CHALLENGE);
  5. var _fIniMaxXKickForce = 50;
  6. var _fIniMaxYKickForce = 50;
  7. var _fMass = INIT_BALLMASS_CHALLENGE;
  8. var _fTheta = 0;
  9. var _fAngVel = 0;
  10. var _fFriction = FRICTION_CHALLENGE;
  11. var _fEdgesFriction = EDGEFRICTION_CHALLENGE;
  12. var _fRotationSpeed = ROTATIONSPEED_CHALLENGE;
  13. var _fMaxXKickForce = HORIZ_KICKFORCE_CHALLENGE;
  14. var _fMaxYKickForce = VERT_KICKFORCE_CHALLENGE;
  15. var _fBounceKickForce = RESTITUTION_KICKFORCE_CHALLENGE;
  16. var _v2Pos;
  17. var _v2Vel;
  18. var _v2Acc;
  19. var _v2Gravity;
  20. var _oSprite;
  21. var _oShadowSprite;
  22. var _oHitSprite;
  23. var _oHitArea;
  24. var _refCGame;
  25. this._init = function(CGameRef){
  26. this._initForces();
  27. var szBallType = "ball_" + Math.floor(Math.random()*3 + 1);
  28. _oSprite = createBitmap(s_oSpriteLibrary.getSprite(szBallType));
  29. _oSprite.regX = BALL_SIZE/2;
  30. _oSprite.regY = BALL_SIZE/2;
  31. _oSprite.x = CANVAS_WIDTH/2;
  32. _oSprite.y = CANVAS_HEIGHT/2;
  33. _oShadowSprite = createBitmap(s_oSpriteLibrary.getSprite('shadow'));
  34. _oShadowSprite.regX = SHADOW_WIDTH/2;
  35. _oShadowSprite.regY = SHADOW_HEIGHT/2;
  36. _oShadowSprite.x = _oSprite.x;
  37. _oShadowSprite.y = CANVAS_HEIGHT - BALL_BOUNCE_YOFFSET;
  38. _oShadowSprite.alpha = 0.65;
  39. _oHitSprite = createBitmap(s_oSpriteLibrary.getSprite('ball_hit'));
  40. _oHitSprite.regX = BALL_SIZE/2;
  41. _oHitSprite.regY = BALL_SIZE/2;
  42. _oHitSprite.x = CANVAS_WIDTH/2;
  43. _oHitSprite.y = CANVAS_HEIGHT/2;
  44. _oHitSprite.alpha = 0;
  45. _oHitArea = createBitmap(s_oSpriteLibrary.getSprite('hit_area_ball'));
  46. _oHitArea.regX = BALL_SIZE/2;
  47. _oHitArea.regY = BALL_SIZE/2;
  48. _oHitArea.x = CANVAS_WIDTH/2;
  49. _oHitArea.y = CANVAS_HEIGHT/2;
  50. s_oStage.addChild(_oShadowSprite);
  51. s_oStage.addChild(_oSprite);
  52. s_oStage.addChild(_oHitSprite);
  53. s_oStage.addChild(_oHitArea);
  54. _oHitArea.on("mousedown",this.clicked,this);
  55. _oSprite.on("mousedown", this.clicked, this);
  56. _v2Pos = new CVector2(_oSprite.x,_oSprite.y);
  57. _v2Vel = new CVector2(0,0);
  58. _v2Acc = new CVector2(0,0);
  59. _refCGame = CGameRef;
  60. };
  61. this._initForces = function(){
  62. _v2Gravity = new CVector2(_v2IniGravity.getX(),_v2IniGravity.getY());
  63. _fMaxXKickForce = _fIniMaxXKickForce;
  64. _fMaxYKickForce = _fIniMaxYKickForce;
  65. };
  66. this._updateForces = function(){
  67. _v2Gravity.set(0,_v2Gravity.getY()+_fForceIncTick);
  68. _fMaxYKickForce += 4.0*_fForceIncTick;
  69. _fMaxXKickForce += 4.0*_fForceIncTick/2;
  70. };
  71. this.getInitialScoringdata = function(){
  72. return {tick: _fForceIncTick, initGravity: _v2IniGravity.getY()};
  73. };
  74. this.unload = function(){
  75. s_oStage.removeChild(_oSprite,_oShadowSprite,_oHitSprite);
  76. _oSprite = undefined;
  77. };
  78. this.update = function(){
  79. _v2Acc.addV(_v2Gravity);
  80. this._friction();
  81. _v2Vel.addV(_v2Acc);
  82. //this._v2Limit(_v2Vel,_fTopSpeed);
  83. _v2Pos.addV(_v2Vel);
  84. _v2Acc._init(0,0);
  85. _oSprite.x = _v2Pos.getX();
  86. _oSprite.y = _v2Pos.getY();
  87. _fAngVel = _v2Vel.getX();
  88. _fTheta += _fAngVel;
  89. _oSprite.rotation = _fTheta * _fRotationSpeed;
  90. _oShadowSprite.x = _oSprite.x;
  91. _oShadowSprite.scaleX = _oShadowSprite.scaleY = _oSprite.y / (CANVAS_HEIGHT - BALL_SIZE/2 - BALL_BOUNCE_YOFFSET);
  92. _oHitSprite.x = _oSprite.x;
  93. _oHitSprite.y = _oSprite.y;
  94. _oHitSprite.rotation = _fTheta * _fRotationSpeed;
  95. _oHitArea.x = _v2Pos.getX();
  96. _oHitArea.y = _v2Pos.getY();
  97. };
  98. this.checkEdges = function(){
  99. if (_v2Pos.getX() < BALL_SIZE/2) {
  100. _v2Pos.set(BALL_SIZE/2,_v2Pos.getY());
  101. _v2Vel.set(-(1- _fEdgesFriction)*_v2Vel.getX(),_v2Vel.getY());
  102. } else if (_v2Pos.getX() > CANVAS_WIDTH - BALL_SIZE/2) {
  103. _v2Pos.set(CANVAS_WIDTH - BALL_SIZE/2,_v2Pos.getY());
  104. _v2Vel.set(-(1- _fEdgesFriction)*_v2Vel.getX(),_v2Vel.getY());
  105. };
  106. if (_v2Pos.getY() > CANVAS_HEIGHT - BALL_SIZE/2 - BALL_BOUNCE_YOFFSET) {
  107. _v2Pos.set(_v2Pos.getX(),CANVAS_HEIGHT - BALL_SIZE/2 - BALL_BOUNCE_YOFFSET);
  108. _v2Vel.set(_v2Vel.getX(),-(1- _fEdgesFriction)*_v2Vel.getY());
  109. this._initForces();
  110. return true;
  111. };
  112. };
  113. this.applyForce = function(v2Force){
  114. var f = new CVector2(v2Force.getX(),v2Force.getY());
  115. f.scalarDivision(_fMass);
  116. _v2Acc.addV(f);
  117. };
  118. this.clicked = function(evt){
  119. if(s_bClickBall === false){
  120. return;
  121. }
  122. playSound("tap", 1, false);
  123. _refCGame.increaseScore();
  124. _refCGame.playerAnim(_v2Pos.getX(),_v2Pos.getY());
  125. // "bounce" preserved force
  126. _v2Vel.set(-(_fBounceKickForce)*_v2Vel.getX(),
  127. -(_fBounceKickForce)*_v2Vel.getY());
  128. var point = _oHitArea.globalToLocal(evt.rawX, evt.rawY);
  129. var _v2ClickDiff = new CVector2( -8 * ( (point.x - BALL_SIZE/2) ), - 1 * Math.abs(point.y - (_v2Pos.getY() - BALL_SIZE/2)));
  130. _v2ClickDiff.normalize();
  131. var _v2KickForce = new CVector2(_v2ClickDiff.getX()*_fMaxXKickForce,
  132. _v2ClickDiff.getY()*_fMaxYKickForce - 0);
  133. this.applyForce(_v2KickForce);
  134. // click tween
  135. if(_bFrozen === false){
  136. _bFrozen = true;
  137. createjs.Tween.get(_oSprite)
  138. .to({scaleX:1.15,scaleY:0.85}, 100,createjs.Ease.cubicIn)
  139. .call(function(){
  140. createjs.Tween.get(_oSprite).
  141. to({scaleX:1,scaleY:1}, 100,createjs.Ease.cubicOut)
  142. });
  143. createjs.Tween.get(_oHitSprite)
  144. .to({scaleX:1.15,scaleY:0.85,alpha: 0.4}, 100,createjs.Ease.cubicIn)
  145. .call(function(){
  146. createjs.Tween.get(_oHitSprite).
  147. to({scaleX:1,scaleY:1,alpha: 0}, 100,createjs.Ease.cubicOut).
  148. call(function(){
  149. _bFrozen = false;
  150. });
  151. });
  152. };
  153. };
  154. this._friction = function(){
  155. var v2Friction = new CVector2(_v2Vel.getX(),_v2Vel.getY());
  156. v2Friction.scalarProduct(-1);
  157. v2Friction.normalize();
  158. v2Friction.scalarProduct(_fFriction);
  159. this.applyForce(v2Friction);
  160. };
  161. this._v2Limit = function(v2,fLimit){
  162. if (v2.length() >= fLimit) {
  163. v2.normalize();
  164. v2.scalarProduct(fLimit);
  165. };
  166. };
  167. this._init(CGameRef);
  168. }