Pompa.as

  1. /*
  2.   Pompa.as — Burbuja que se mueve y puede estallar — ProInf.net 2010
  3.  
  4.   Gestión de una pompa
  5. */
  6. package
  7. {
  8. import flash.display.*;
  9. import flash.events.*;
  10. import flash.geom.*;
  11.  
  12. //import flash.filters.*;
  13.  
  14. public class Pompa extends MovieClip
  15. {
  16. // CONSTANTES ---------------------------------
  17.  
  18. private static const PASO:int = 3; // Lo que avanza en un fotograma
  19.  
  20. // GLOBAL -------------------------------------
  21.  
  22. private var curva:Number = 0; // Curva actual al seguir el recorrido
  23.  
  24. // CONFIGURACIÓN ------------------------------
  25.  
  26. public var config:Object = {
  27. limites:true, // Rebota en los límites del campo o sigue por el lado contrario
  28. curvatura:1, // Curvatura en el recorrido. Cero para ir en línea recta
  29. velocidad:1 // Ratio sobre lo que avanza en un paso
  30. };
  31.  
  32. // PROPIEDADES --------------------------------
  33.  
  34. public function get escala():Number { // Tamaño de la pompa
  35. return scaleX;
  36. }
  37. public function set escala(valor:Number):void {
  38. scaleX = valor;
  39. scaleY = valor;
  40. }
  41.  
  42. public function get estado():String { // off=normal, on=estallando, end=final del estallido
  43. return currentLabel;
  44. }
  45. public function set estado(etiqueta:String):void {
  46. if (etiqueta == "on") {
  47. gotoAndPlay("on");
  48. circulo.gotoAndStop("on");
  49. }
  50. else {
  51. gotoAndStop(etiqueta);
  52. circulo.gotoAndStop("off");
  53. }
  54. }
  55.  
  56. public function get radio():Number {
  57. return circulo.width/2 * scaleX;
  58. }
  59.  
  60. public function get punto():Point {
  61. return new Point(x,y);
  62. }
  63. public function set punto(origen:Point):void {
  64. x = origen.x;
  65. y = origen.y;
  66. }
  67.  
  68. public function set empujon(punto:Point):void {
  69. x += punto.x;
  70. y += punto.y;
  71. }
  72.  
  73. // INTERFAZ -----------------------------------
  74.  
  75. public function seleccionar() {
  76. blendMode = BlendMode.NORMAL;
  77. Aleatorio.tinta(this, 0xFFFFFF);
  78. }
  79.  
  80. public function intersecta (pompa:Pompa):Boolean {
  81. var distancia:Number = Point.distance (punto, pompa.punto);
  82. var radios:Number = radio + pompa.radio;
  83. return distancia < radios;
  84. }
  85.  
  86. // CONSTRUCTOR --------------------------------
  87.  
  88. public function Pompa() {
  89.  
  90. x = Aleatorio.entero(0, Juego.ANCHO);
  91. y = Aleatorio.entero(0, Juego.ALTO);
  92.  
  93. blendMode = BlendMode.SCREEN;
  94. Aleatorio.tinta(this);
  95.  
  96. rotation = Aleatorio.entero(0, 360);
  97.  
  98. estado = "off";
  99.  
  100. curvar();
  101. }
  102.  
  103. // PRINCIPAL ----------------------------------
  104.  
  105. public function animar () {
  106.  
  107. if (config.limites) { // Rebota al llegar al borde
  108. if (x < 0) {
  109. x = PASO;
  110. rotation = Aleatorio.entero(45, 135);
  111. curvar();
  112. }
  113. else if (x > Juego.ANCHO) {
  114. x = Juego.ANCHO - PASO;
  115. rotation = Aleatorio.entero(225, 315);
  116. curvar();
  117. }
  118. if (y < 0) {
  119. y = PASO;
  120. rotation = Aleatorio.entero(135, 225);
  121. curvar();
  122. }
  123. else if (y > Juego.ALTO) {
  124. y = Juego.ALTO - PASO;
  125. rotation = Aleatorio.entero(-45, 45);
  126. curvar();
  127. }
  128. }
  129. else { // sin límites: continúa por el lado contrario
  130.  
  131. if (x < 0) x = Juego.ANCHO;
  132. else if (x > Juego.ANCHO) x = 0;
  133. if (y < 0) y = Juego.ALTO;
  134. else if (y > Juego.ALTO) y = 0;
  135. }
  136.  
  137. rotation += curva;
  138.  
  139. var radianes:Number = rotation * Math.PI / 180;
  140. //// y += - PASO * Math.cos(radianes); x += PASO * Math.sin(radianes);*/
  141. empujon = Point.polar(PASO*config.velocidad, radianes - Math.PI/2);
  142. }
  143.  
  144. // PRIVADO ------------------------------------
  145.  
  146. private function curvar() { // Cambio de la rotación al avanzar la pompa
  147. curva = Aleatorio.decimal(-1,1) * config.curvatura;
  148. }
  149.  
  150. } // class Pompa
  151.  
  152. } // package

Proinf.net