Mar 4, 2009
Una de las cosas más molestas de Flash CS4 es que la ayuda (F1) es online, se conecta con http://help.adobe.com y a partir de ahí buscar un simple método es una tarea lenta y tediosa. Afortunadamente, la ayuda también se encuentra en local y se puede poner por defecto.
Para ello debemos ir a Window > Extensions y abrir el panel Connections. Al clicar en las opciones (botón superior derecha) veremos que una es Offline options.

Marcamos después el check de Keep me offline y aceptamos. Ahora al pulsar F1 dispondremos de toda la referencia en modo local, y aunque sigue abriéndose a través de navegador, al menos nos ahorramos los tiempo de carga.
Nota: a tener en cuenta que al activar este modo perdemos todas las funcionalidades que necesitan conexión (por ejemplo, el panel de Kuler).
También hay otras dos opciones interesantes en forma de aplicaciones AIR:
En la primera, Doc?, te tienes que descargar y configurar las distintas referencias de lenguaje que necesites (AS3, Flash CS4, CS3, Flex…) y la aplicación te permite ver, buscar y guardar la documentación. Yo la tengo instalada y es bastante útil.
La de BigSpaceShip, de similar funcionamiento, tiene integrada la referencia del lenguaje de AS3, pero a mí no me convenció mucho…
De todas maneras, la ayuda tal y como estaba planteada en CS3 era perfecta… :(
Sep 19, 2008
A pesar de tener poco cero tiempo para dedicarle al blog, no quería dejar de escribir este pequeño tip sobre como se recogen variables externas en AS3. No es que sea nada muy complejo (la verdad es que incluso en la ayuda se comenta), pero me resultó curioso cuando el otro día un compañero me preguntó si lo sabía y me di cuenta que en todo este tiempo tocando AS3 no había tenido necesidad de usarlo... Así que lo documento por si existe por ahí algún despistado como yo :)
Haciendo un poco de memoria, en versiones anteriores se podía acceder a las variables directamente en el _root (_root.miVariable). Ahora es bastante menos intuitivo, aunque no carece de lógica.
En AS3 se utiliza la clase Loader cuando queremos cargar un swf o una imagen, y su propiedad contentLoaderInfo para acceder a la información del fichero y al proceso de carga (bytesLoaded, etc). Dicha propiedad es en realidad una instancia de la clase LoaderInfo. Así pues, al buscar cualquier información referente al swf, tiene sentido hacerlo en dicha clase, y las variables externas no son una excepción. Por esa razón existe una propiedad llamada parameters, de tipo Object para almacenar pares de nombre-valor.
Y la pregunta evidente es: si el primer swf no está cargado mediante Loader, ¿cómo acceder a esta información? La respuesta consiste en que cualquier objeto de la Display List cuenta con una propiedad loaderInfo que provee la información del SWF principal.
En este punto, si quisiéramos acceder a una variable llamada textoA sabemos que podemos hacerlo de la siguiente forma:
AS3:
-
var variableA:String = this.loaderInfo.parameters.textoA
donde this puede ser tanto el DocumentClass como cualquier frame del timeline.
Y un par de consideraciones:
- Debemos asegurarnos que al acceder a loaderInfo en un objeto, además de ser del tipo Display, éste se encuentre en la Display List, ya que sino generará error.
- Sino se conocen el número de variables a recibir, podemos usar un for..in sobre parameters para que nos muestre todos los valores, ya que es un Object.
Dejo un ejemplo que utiliza swfobject 2.1 para cargar un swf y pasarle 2 variables que se muestran en cajas de texto:
Descargar ejemplo.
Jul 6, 2008
Es sabido que en Flash Player no se puede utilizar el botón derecho del mouse de forma "propietaria". Con dicho botón se activa el menú contextual, y aunque se puede modificar, como mínimo encontramos las opciones Configuración y Acerca de Adobe Flash Player 9...
Pues navegando por Google Code me he encontrado un proyecto llamado Custom-context-menu que nos permite utilizar a nuestro antojo el botón derecho. Para ello combina javascript y flash de una manera muy ingeniosa. Básicamente el hack consiste en:
- Con javascript, capturar el click derecho en HTML antes que llegue al swf
- Una vez capturado el evento, informar al swf mediante ExternalInterface
- Crear una función en ActionScript que responda a la llamada de ExternalInterface
Se puede ver un ejemplo aquí.
Aunque puede ser un recurso muy útil, hay que tener en cuenta los siguientes inconvenientes:
- Funciona en la mayoría de navegadores/so, pero no en todos
- Antes de tener el evento en AS, recorre un ciclo de llamadas entre el swf y el html, con lo que el rendimiento es mucho peor que una llamada nativa
- En el menú contextual se encuentran las opciones de configuración del Flash Player, y estaríamos quitándoselas al usuario
Aún así, en casos específicos en los que sería muy importante tener este botón habilitado, es una gran solución y no está de más conocerla.
Feb 18, 2008
En AS3 es una práctica habitual asociar eventos al stage para cogerlos globalmente. El caso más utilizado probablemente se dé con los del tipo MouseEvent. Por ejemplo, si tenemos varios objetos en pantalla, en vez de definir un evento click para cada uno de ellos, cogemos sólo el click en el escenario (global) y vemos sobre quién se está interactuando:
AS3:
-
this.stage.addEventListener(MouseEvent.CLICK, click);
-
private function click(e:MouseEvent):void
-
{
-
trace("Click en", e.target);
-
}
Pero a veces, cuando intentamos añadir un evento al stage obtenemos el siguiente error:
TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
Vamos a reproducir el error.
Continuar leyendo »