Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2012
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.52 KB | None | 0 0
  1. // bezier collision
  2. // by andre michelle
  3. // am@andre-michelle.com
  4. // http://www.extrajetzt.com
  5.  
  6.  
  7. Bezier = function ( mc , p0 , p1 , p2 ) {
  8.  
  9. // draw //
  10.  
  11. mc.moveTo ( p0.x , p0.y );
  12. mc.curveTo ( p1.x , p1.y , p2.x , p2.y );
  13.  
  14. // getPoints //
  15.  
  16. var t = 0;
  17. var steps = 20;
  18. var num = 0;
  19.  
  20. var pts = [];
  21.  
  22. while ( t <= 1 ) {
  23.  
  24. var t1 = 1 - t;
  25. var t1_2 = t1 * t1;
  26. var t2 = t * t;
  27. var tt12 = 2 * t * t1;
  28.  
  29. var x = t1_2 * p0.x + tt12 * p1.x + t2 * p2.x;
  30. var y = t1_2 * p0.y + tt12 * p1.y + t2 * p2.y;
  31.  
  32. pts.push ( { x: x, y: y } );
  33.  
  34. t += 1/steps;
  35.  
  36. }
  37.  
  38. this.pts = pts;
  39.  
  40. }
  41.  
  42. BallWorld = function () {
  43.  
  44. var ball = this.ball = scene.attachMovie ( "ball" , "ball" , 1 , { _x: 50, _y: -200, vy: 0 } );
  45.  
  46. var br = ball._height/2;
  47.  
  48. var bezier = this.bezier = new Bezier ( scene , { x: scene.n0._x, y: scene.n0._y } , { x: scene.n1._x, y: scene.n1._y } , { x: scene.n2._x, y: scene.n2._y } );
  49.  
  50. var obj = this;
  51.  
  52. ball.render = function () {
  53.  
  54. var bezier = obj.bezier;
  55.  
  56. var pts = bezier.pts;
  57.  
  58. if ( Key.isDown ( Key.RIGHT ) ) ball.vx += .1;
  59. if ( Key.isDown ( Key.LEFT ) ) ball.vx -= .1;
  60.  
  61. var bx = this._x;
  62. var by = this._y;
  63.  
  64. var bvx = ball.vx;
  65. var bvy = ball.vy;
  66.  
  67. bvy += .2;
  68.  
  69. bx += bvx;
  70. by += bvy;
  71.  
  72. for ( var p = 0 ; p < pts.length - 1 ; p++ ) {
  73.  
  74. var p0 = pts[p];
  75. var p1 = pts[p+1];
  76.  
  77. var p0x = p0.x, p0y = p0.y, p1x = p1.x, p1y = p1.y;
  78.  
  79. // get Angle //
  80.  
  81. var dx = p0x - p1x;
  82. var dy = p0y - p1y;
  83.  
  84. var angle = Math.atan2( dy , dx );
  85.  
  86. var sin = Math.sin ( angle );
  87. var cos = Math.cos ( angle );
  88.  
  89. // rotate p1 ( need only 'x' ) //
  90.  
  91. var p1rx = dy * sin + dx * cos + p0x;
  92.  
  93. // rotate ball //
  94.  
  95. var px = p0x - bx;
  96. var py = p0y - by;
  97.  
  98. var brx = py * sin + px * cos + p0x;
  99. var bry = py * cos - px * sin + p0y;
  100.  
  101. var cp = ( bx - p0x ) * ( p1y - p0y ) - ( by - p0y ) * ( p1x - p0x );
  102.  
  103. if ( bry > p0y - br && brx > p0x && brx < p1rx && cp > 0 ) {
  104.  
  105. // calc new Vector //
  106.  
  107. var vx = bvy * sin + bvx * cos;
  108. var vy = bvy * cos - bvx * sin;
  109.  
  110. vy *= -.8;
  111. vx *= .98;
  112.  
  113. var sin = Math.sin ( -angle );
  114. var cos = Math.cos ( -angle );
  115.  
  116. bvx = vy * sin + vx * cos;
  117. bvy = vy * cos - vx * sin;
  118.  
  119. // calc new Position //
  120.  
  121. bry = p0y - br;
  122.  
  123. dx = p0x - brx;
  124. dy = p0y - bry;
  125.  
  126. bx = dy * sin + dx * cos + p0x;
  127. by = dy * cos - dx * sin + p0y;
  128.  
  129. }
  130.  
  131. }
  132.  
  133. if ( bx < br - 200 ) bx = br - 200, bvx = -bvx;
  134. if ( bx > 200 - br ) bx = 200 - br, bvx = -bvx;
  135.  
  136. ball._x = bx;
  137. ball._y = by;
  138.  
  139. ball.vx = bvx;
  140. ball.vy = bvy;
  141.  
  142. if ( ball._y > 200 + br ) ball._y = -200, ball._x = 0, ball.vy = ball.vx = 0;
  143.  
  144. }
  145.  
  146. ball.onEnterFrame = function () { this.render () };
  147.  
  148. }
  149.  
  150. scene.lineStyle ( 0 , 0xffcc00 );
  151.  
  152. var XJ = new BallWorld ();
  153.  
  154. // dragging the anchor and control points //
  155. // -------------------------------------- //
  156.  
  157. scene.n0.onPress = scene.n1.onPress = scene.n2.onPress = function () {
  158.  
  159. delete XJ.ball.onEnterFrame;
  160.  
  161. this.onEnterFrame = function () {
  162.  
  163. this._x = scene._xmouse;
  164. this._y = scene._ymouse;
  165.  
  166. scene.clear ();
  167.  
  168. scene.lineStyle ( 0 , 0xffcc00 );
  169.  
  170. XJ.bezier = new Bezier ( scene , { x: scene.n0._x, y: scene.n0._y } , { x: scene.n1._x, y: scene.n1._y } , { x: scene.n2._x, y: scene.n2._y } );
  171.  
  172. XJ.ball.render ();
  173.  
  174. }
  175.  
  176. this.onRelease = this.onReleaseOutside = function () {
  177.  
  178. XJ.ball.onEnterFrame = function () { XJ.ball.render () };
  179.  
  180. delete this.onEnterFrame;
  181.  
  182. }
  183.  
  184. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement