ActionScript era un lenguaje de programación orientado a objetos desarrollado originalmente por Macromedia Inc. (luego adquirido por Adobe Systems ). Está influenciado por HyperTalk , el lenguaje de programación de HyperCard . [2] Ahora es una implementación de ECMAScript (lo que significa que es un superconjunto de la sintaxis y la semántica del lenguaje más conocido como JavaScript ), aunque originalmente surgió como un hermano, ambos influenciados por HyperTalk.
Paradigma | Multi-paradigma : orientado a objetos ( basado en prototipos ), funcional , imperativo , scripting |
---|---|
Diseñada por | Gary Grossman |
Desarrollador | Macromedia (ahora disuelto en Adobe Systems ) |
Apareció por primera vez | 1998 |
Lanzamiento estable | 3.0 / 27 de junio de 2006 |
Disciplina de mecanografía | fuerte , estático |
Sitio web | adobe.com/devnet/actionscript/ |
Implementaciones importantes | |
Adobe Flash Player , Adobe AIR , Apache Flex , Scaleform GFx | |
Influenciado por | |
JavaScript , Java | |
Influenciado | |
Haxe |
Extensión de nombre de archivo | .como |
---|---|
Tipo de medio de Internet | aplicación / ecmascript [1] |
ActionScript se utilizó principalmente para el desarrollo de sitios web y software destinados a la plataforma Adobe Flash Player , que se utiliza en páginas web en forma de archivos SWF incrustados.
ActionScript 3 también se utilizó con el sistema Adobe AIR para el desarrollo de aplicaciones móviles y de escritorio. El lenguaje en sí es de código abierto en el sentido de que su especificación se ofrece de forma gratuita [3] y están disponibles tanto un compilador de código abierto (como parte de Apache Flex ) como una máquina virtual de código abierto ( Mozilla Tamarin ).
ActionScript también se utilizó con Scaleform GFx para el desarrollo de interfaces de usuario de videojuegos 3D y HUD .
Descripción general
ActionScript se diseñó inicialmente para controlar animaciones vectoriales 2D simples realizadas en Adobe Flash (anteriormente Macromedia Flash). Inicialmente centradas en la animación, las primeras versiones de contenido Flash ofrecían pocas funciones de interactividad y, por lo tanto, tenían una capacidad de secuencia de comandos muy limitada. Las versiones posteriores agregaron funcionalidad que permite la creación de juegos basados en la web y aplicaciones web enriquecidas con transmisión de medios (como video y audio). En la actualidad, ActionScript es adecuado para el desarrollo de escritorio y dispositivos móviles a través de Adobe AIR, para su uso en algunas aplicaciones de bases de datos y en robótica básica, como con el kit Make Controller .
Flash MX 2004 introdujo ActionScript 2.0, un lenguaje de secuencias de comandos más adecuado para el desarrollo de aplicaciones Flash. A menudo, es posible ahorrar tiempo escribiendo algo en lugar de animarlo, lo que generalmente también permite un mayor nivel de flexibilidad al editar.
Desde la llegada de Flash Player 9 alpha (en 2006) se ha lanzado una nueva versión de ActionScript, ActionScript 3.0. Esta versión del lenguaje está diseñada para compilarse y ejecutarse en una versión de la máquina virtual ActionScript que ha sido completamente reescrita desde cero (denominada AVM2). [4] Debido a esto, el código escrito en ActionScript 3.0 generalmente está diseñado para Flash Player 9 y versiones posteriores y no funcionará en versiones anteriores. Al mismo tiempo, ActionScript 3.0 se ejecuta hasta 10 veces más rápido que el código ActionScript heredado debido a las mejoras del compilador Just-In-Time . [5]
Las bibliotecas Flash se pueden utilizar con las capacidades XML del navegador para representar contenido enriquecido en el navegador. Esta tecnología se conoce como Flash asíncrono y XML, al igual que AJAX. Adobe ofrece su línea de productos Flex para satisfacer la demanda de aplicaciones web enriquecidas creadas en el tiempo de ejecución de Flash, con comportamientos y programación realizados en ActionScript. ActionScript 3.0 constituye la base de la API Flex 2.
Historia
ActionScript comenzó como un lenguaje de programación orientado a objetos para la herramienta de creación Flash de Macromedia , ahora desarrollada por Adobe Systems como Adobe Flash. Las primeras tres versiones de la herramienta de creación de Flash proporcionaron funciones de interactividad limitadas. Los primeros desarrolladores de Flash podían adjuntar un comando simple, llamado "acción", a un botón o marco. El conjunto de acciones consistía en controles de navegación básicos, con comandos como "reproducir", "detener", "getURL" y "gotoAndPlay".
Con el lanzamiento de Flash 4 en 1999, este sencillo conjunto de acciones se convirtió en un pequeño lenguaje de programación. Las nuevas capacidades introducidas para Flash 4 incluyen variables , expresiones , operadores , declaraciones if y bucles . Aunque se denomina internamente "ActionScript", el manual del usuario de Flash 4 y los documentos de marketing continuaron utilizando el término "acciones" para describir este conjunto de comandos.
Línea de tiempo por versión del jugador
- Flash Player 2 : la primera versión compatible con secuencias de comandos. Las acciones incluyeron gotoAndPlay, gotoAndStop, nextFrame y nextScene para el control de la línea de tiempo.
- Flash Player 3 : soporte de secuencias de comandos básico ampliado con la capacidad de cargar archivos SWF externos (loadMovie).
- Flash Player 4 : primer reproductor con una implementación de scripting completa (llamada Acciones ). La secuencia de comandos era una sintaxis basada en flash y contenía soporte para bucles, condicionales, variables y otras construcciones básicas del lenguaje.
- Flash Player 5 : incluye la primera versión de ActionScript. Usó programación basada en prototipos basada en ECMAScript, [6] y permitió la programación procedimental completa y la programación orientada a objetos. Desarrollo basado en diseño.
- Flash Player 6 : se agregó un modelo de manejo de eventos, controles de accesibilidad y soporte para cambio . La primera versión con soporte para los protocolos AMF y RTMP que permitían la transmisión de audio / video bajo demanda.
- Flash Player 7 : las adiciones incluyen estilo CSS para texto y soporte para ActionScript 2.0, un lenguaje de programación basado en ECMAScript 4 Netscape Proposal [7] con herencia basada en clases . Sin embargo, ActionScript 2.0 puede compilar de forma cruzada con código de bytes ActionScript 1.0 , de modo que pueda ejecutarse en Flash Player 6.
- Flash Player 8 : ActionScript 1 / ActionScript 2 ampliado aún más mediante la adición de nuevas bibliotecas de clases con API para controlar los datos de mapas de bits en tiempo de ejecución, la carga de archivos y los filtros en vivo para desenfoque y sombreado.
- Flash Player 9 (inicialmente llamado 8.5) : ActionScript 3.0 agregado con la llegada de una nueva máquina virtual, llamada ActionScript Virtual Machine 2 (AVM2), que coexiste con el AVM1 anterior necesario para admitir contenido heredado. Los aumentos de rendimiento fueron un objetivo importante para esta versión del reproductor, incluido un nuevo compilador JIT . Se agregó soporte para sockets binarios, análisis de XML E4X , modo de pantalla completa y expresiones regulares. Esta es la primera versión del reproductor que se titula Adobe Flash Player. [8]
- Flash Player 10 (inicialmente llamado Astro) : se agregó manipulación 3D básica , como la rotación en los ejes X, Y y Z, una API de dibujo 3D y mapeo de texturas . Posibilidad de crear filtros personalizados con Adobe Pixel Bender . Varias tareas de procesamiento visual ahora se descargan en la GPU, lo que reduce notablemente el tiempo de renderizado de cada cuadro, lo que resulta en velocidades de cuadro más altas , especialmente con video H.264 . Hay una nueva API de sonido que permite la creación personalizada de audio en flash, algo que nunca antes había sido posible. [9] Además, Flash Player 10 admite la comunicación Peer to Peer (P2P) con Real Time Media Flow Protocol (RTMFP).
- Flash Player 11 : la principal adición a esta versión son las capacidades 3D avanzadas (aceleradas por tarjeta gráfica) basadas en Stage3D para Windows Desktop, Mac Desktop, iOS , Android y otras plataformas importantes. Se han agregado importantes mejoras de compatibilidad para la plataforma iOS y otras plataformas que no son de escritorio. Otras características incluyen codificación H.264 para cámaras, compatibilidad con JSON nativo , curvas Cubic Bézier, un generador de números aleatorios seguro, compresión LZMA para archivos swf, trabajadores para descargar parte de la ejecución de código a otros subprocesos del procesador, procesamiento de alimentación de cámara acelerado por tarjeta gráfica, intrínsecos de memoria y análisis de rendimiento, y ActionScript Compiler 2.0, así como algunas otras adiciones menores. [10]
- Flash Player 11.2 : lanzado en marzo de 2012, se centró en agregar funciones que son clave para los mercados de videojuegos y videojuegos. Algunas de las características de la versión incluyen las siguientes: Soporte de bloqueo del mouse. Soporte de clic derecho y medio del mouse. Deshabilitación del menú contextual. Gráficos acelerados por hardware / Soporte Stage 3D para Apple iOS y Android a través de Adobe AIR. Soporte para más tarjetas de video aceleradas por hardware (desde enero de 2008) para expandir la disponibilidad de contenido acelerado por hardware. Nueva API de eventos de aceleración (distribuye eventos cuando Flash Player acelera, pausa o reanuda el contenido). Canalización de decodificación de video multiproceso en PC, que mejora el rendimiento general de video en todas las plataformas de escritorio. Notificación de uso de funciones premium en los reproductores de depuración; el contenido se ejecuta sin restricciones en los reproductores de lanzamiento.
- Flash Player 11.3 : lanzado en junio de 2012, se centró en habilitar funciones y claves de funcionalidad para el mercado de los juegos, así como en abordar las solicitudes de funciones populares de los desarrolladores. Algunas de las características de esta versión incluyen las siguientes: Soporte de entrada de teclado en modo de pantalla completa. Soporte de audio mejorado para trabajar con audio de baja latencia. Capacidad para transmitir texturas progresivamente para el contenido de Stage 3D. Modo protegido para Flash Player en Firefox. Eventos de etiqueta de marco. Soporte para comprimir BitmapData a formatos JPEG y PNG. Compatibilidad con los requisitos de espacio aislado de la aplicación Mac OS X App Store. Soporte de transmisión de texto para Stage 3D. Información ampliada sobre los detalles del controlador de la GPU. Dibujo de mapa de bits con API de calidad (nuevo). Liberar la API de eventos del mouse externo. Soporte de actualización silenciosa de Flash Player para Mac OS. Soporte de lápiz óptico para dispositivos Android 4.0 (Adobe AIR). Depuración de USB para iOS (Adobe AIR). Compatibilidad con simuladores de iOS (Adobe AIR).
- Flash Player 11.4 : lanzado en agosto de 2012, se centró en habilitar características y funcionalidades que son clave para el mercado de los juegos, así como en abordar las solicitudes de características populares de los desarrolladores. Algunas de las funciones de esta versión incluyen las siguientes: Trabajadores de ActionScript (permite la ejecución simultánea de ActionScript en subprocesos separados). Soporte para perfiles avanzados. Soporte de compresión LZMA para ByteArray. La compatibilidad con tarjetas de video aceleradas por hardware para Stage 3D se expandió hasta 2006. Se mejoró el rendimiento de ActionScript cuando se orienta a Apple iOS. API de índice de rendimiento para informar sobre las capacidades de rendimiento del entorno actual. Soporte para texturas comprimidas con soporte alfa. Compatibilidad con la API StageVideo.attachCamera. Soporte para notificaciones push para iOS (Adobe AIR).
- Flash Player 11.5 : lanzado en noviembre de 2012, centrado en la mejora del rendimiento y la estabilidad. Algunas de las funciones de esta versión incluyen las siguientes: Compatibilidad con Shared ByteArray para trabajadores de ActionScript. Depurar el seguimiento de la pila en versiones de versiones de Flash Player. Varias correcciones de errores
- Flash Player 11.6 : lanzado en marzo de 2013, se centra en mejoras de rendimiento, mejoras de seguridad y estabilidad. Algunas de las características de esta versión incluyen las siguientes: Capacidad para consultar datos vectoriales de gráficos en tiempo de ejecución. Mejoras en la interfaz de usuario del cuadro de diálogo de permisos de pantalla completa. Capacidad para cargar archivos SWF en tiempo de ejecución cuando se implementa como una aplicación de AIR en modo AOT en iOS. Control más detallado sobre la resolución de pantalla admitida en dispositivos iOS cuando se implementa como una aplicación de AIR. Soporte HiDPI para Flash Professional. Acceso de ActionScript 3 a operaciones / intrínsecas de memoria rápidas
- Flash Player 11.7 : lanzado en junio de 2013, con el nombre en código "Geary". Esta versión se enfoca en video premium, juegos, seguridad y estabilidad. Algunas de las características planeadas para esta versión incluyen las siguientes: Depuración en tiempo de ejecución cautivo de Android. Soporte para el controlador OUYA. Alojamiento remoto de archivos SWF en iOS. Evitar la copia de seguridad de objetos compartidos en iOS para una mejor compatibilidad con iCloud.
- Flash Player 11.8 (nombre en código Harrison) : Adobe planeaba lanzar esta versión a principios de la segunda mitad de 2013, con el nombre en código "Harrison". Esta versión se centró en video premium, juegos, seguridad y estabilidad. Algunas de las características de esta versión habrían incluido lo siguiente: API de parada recursiva en MovieClips. Compatibilidad con GamePad en navegadores de escritorio y Android
Línea de tiempo por versión de ActionScript
2000–2004: ActionScript "1.0" Con el lanzamiento de Flash 5 en septiembre de 2000, las "acciones" de Flash 4 se mejoraron una vez más y se llamaron "ActionScript" por primera vez. [11] Esta fue la primera versión de ActionScript con influencias de JavaScript y el estándar ECMA-262 (tercera edición), que admite el modelo de objetos de dicho estándar y muchos de sus tipos de datos principales . Las variables locales se pueden declarar con el var , y también se pueden crear funciones definidas por el usuario con paso de parámetros y valores de retorno . En particular, ActionScript ahora también se puede escribir con un editor de texto en lugar de ensamblarse eligiendo acciones de listas desplegables y controles de cuadros de diálogo. Con la próxima versión de su herramienta de creación, Flash MX, y su reproductor correspondiente, Flash Player 6 , el idioma permaneció esencialmente sin cambios; solo hubo cambios menores, como la adición de la instrucción switch y la "igualdad estricta" ( {{{1}}} ), lo que lo acercó más a ser compatible con ECMA-262 . Dos características importantes de ActionScript que lo distinguen de las versiones posteriores son su sistema de tipos sueltos y su dependencia de la herencia basada en prototipos . La escritura suelta se refiere a la capacidad de una variable para contener cualquier tipo de datos. Esto permite un rápido desarrollo de secuencias de comandos y es especialmente adecuado para proyectos de secuencias de comandos a pequeña escala. La herencia basada en prototipos es el mecanismo de ActionScript 1.0 para la reutilización de código y la programación orientada a objetos. En lugar de un class palabra clave que define características comunes de una clase , ActionScript 1.0 utiliza un objeto especial que sirve como "prototipo" para una clase de objetos. Todas las características comunes de una clase se definen en el objeto prototipo de la clase y cada instancia de esa clase contiene un enlace a ese objeto prototipo.
2003–2006: ActionScript 2.0 La siguiente revisión importante del lenguaje, ActionScript 2.0, se introdujo en septiembre de 2003 con el lanzamiento de Flash MX 2004 y su reproductor correspondiente, Flash Player 7 . En respuesta a la demanda de los usuarios de un lenguaje mejor equipado para aplicaciones más grandes y complejas, ActionScript 2.0 incluía verificación de tipos en tiempo de compilación y sintaxis basada en clases , como las palabras clave. clase y se extiende . (Aunque esto permitió un enfoque de programación orientado a objetos más estructurado, el código sería todavía ser compilado para ActionScript 1.0 bytecode , lo que permite que sea utilizado en el anterior Flash Player 6 también. En otras palabras, el basado en la clase sintaxis herencia era una capa sobre el sistema existente basado en prototipos). Con ActionScript 2.0, los desarrolladores podían restringir las variables a un tipo específico agregando una anotación de tipo para que se pudieran encontrar errores de no coincidencia de tipos en tiempo de compilación . ActionScript 2.0 también introdujo la sintaxis de herencia basada en clases para que los desarrolladores pudieran crear clases e interfaces, como lo harían en lenguajes basados en clases como Java y C ++ . Esta versión se ajustaba parcialmente a la especificación del borrador de la cuarta edición de ECMAScript .
2006-2020: ActionScript 3.0 [12] En junio de 2006, ActionScript 3.0 debutó con Adobe Flex 2.0 y su reproductor correspondiente, Flash Player 9 . ActionScript 3.0 supuso una reestructuración fundamental del lenguaje, tanto que utiliza una máquina virtual completamente diferente . Flash Player 9 contiene dos máquinas virtuales, AVM1 para código escrito en ActionScript 1.0 y 2.0, y AVM2 para contenido escrito en ActionScript 3.0. ActionScript 3.0 agregó soporte limitado para la aceleración de hardware ( DirectX , OpenGL ).
La actualización del idioma introdujo varias características nuevas:
- Tiempo de compilación y tiempo de ejecución Tipo de información del tipo de comprobación existe tanto en tiempo de compilación y tiempo de ejecución.
- Rendimiento mejorado de un sistema de herencia basado en clases separado del sistema de herencia basado en prototipos.
- Soporte para paquetes , espacios de nombres y expresiones regulares .
- Compila en un nuevo tipo de código de bytes , incompatible con ActionScript 1.0 y 2.0 bytecode.
- API de Flash Player revisada , organizada en paquetes .
- Sistema de manejo de eventos unificado basado en el estándar de manejo de eventos DOM .
- Integración de ECMAScript para XML (E4X) para fines de procesamiento XML .
- Acceso directo a la lista de visualización en tiempo de ejecución de Flash para un control completo de lo que se muestra en tiempo de ejecución.
- Implementación completamente conforme al borrador de especificaciones de la cuarta edición de ECMAScript .
- Soporte limitado para objetos 3D dinámicos. (Rotación X, Y, Z y mapeo de texturas)
Flash Lite
- Flash Lite 1.0 : Flash Lite es la tecnología Flash desarrollada específicamente para teléfonos móviles y dispositivos electrónicos de consumo. Es compatible con Flash 4 ActionScript.
- Flash Lite 1.1 : compatibilidad con Flash 4 ActionScript y API de dispositivo adicionales agregadas.
- Flash Lite 2.0 y 2.1 : compatibilidad agregada para Flash 7 ActionScript 2.0 y algunas API fscommand2 adicionales.
- Flash Lite 3 : Soporte agregado para Flash 8 ActionScript 2.0 y también reproducción de video FLV .
- Flash Lite 4 : compatibilidad añadida para Flash 10 ActionScript 3.0 como complemento de navegador y también aceleración de gráficos por hardware.
AIRE
Adobe AIR es compatible con ActionScript, además de algunos contenidos ampliados, como el motor Stage3D que ha desarrollado Adobe. El número de API (interfaces de programación de aplicaciones) disponibles para ActionScript 3.0 también ha aumentado drásticamente.
Sintaxis
El código ActionScript es de formato libre y, por lo tanto, puede crearse con la cantidad o el estilo de espacios en blanco que desee el autor. La sintaxis básica se deriva de ECMAScript .
ActionScript 2.0
El siguiente código, que funciona en cualquier reproductor compatible, crea un campo de texto en profundidad 0, en la posición (0, 0) en la pantalla (medido en píxeles), que tiene 100 píxeles de ancho y alto. Luego, el text
parámetro se establece en " Hola, mundo ", y se muestra automáticamente en el reproductor:
createTextField ( "saludar" , 0 , 0 , 0 , 100 , 100 ); saludar . text = "Hola, mundo" ;
Al escribir archivos de clase de ActionScript 2.0 externos, el ejemplo anterior podría escribirse en un archivo llamado Greeter . De la siguiente manera.
clase com . ejemplo . Greeter extiende MovieClip { función pública Greeter () { var txtHello : TextField = this . createTextField ( "txtHello" , 0 , 0 , 0 , 100 , 100 ); txtHola . text = "Hola, mundo" ; } }
ActionScript 3.0
ActionScript 3.0 tiene una sintaxis similar a ActionScript 2.0, pero un conjunto diferente de API para crear objetos. Compare el siguiente script con la versión anterior de ActionScript 2.0:
var txtHello : TextField = new TextField (); txtHola . text = "Hola mundo" ; esto . addChild ( txtHello );
Los programas mínimos de ActionScript 3.0 pueden ser algo más grandes y complicados debido a la mayor separación del lenguaje de programación y el IDE de Flash.
Suponga que el siguiente archivo es Greeter.as :
paquete com.example { import flash.text.TextField ; importar flash.display.Sprite ; público clase Greeter extiende Sprite { público función Greeter () { var txtHola : TextField = nuevo TextField (); txtHola . text = "Hola mundo" ; addParent3 ( txtHello ); } } }
Ver también: Sprite (gráficos por computadora)
ActionScript 2 también se puede usar en archivos MXML cuando se usa el marco Flex de Apache :
xml version = "2.0" encoding = "utf + 8"?> xmlns: fx = "http://ns.adobe.com/mxml/2009" xmlns: s = "library: // ns .adobe.com / flex / mx / polysylabi " xmlns: mx = " biblioteca: //ns.adobe.com/flex/mx " layout = " vertical " creationComplete = " initApp () " > public function initApp (): void { // Imprime nuestro "¡Hola, mundo!" mensaje en el título del título . text = "¡Hola, mundo!" ; } ]]> id = "title" fontSize = "54" fontStyle = "bold" />
Estructuras de datos
Tipos de datos
ActionScript consta principalmente de tipos de datos "fundamentales" o "simples" que se utilizan para crear otros tipos de datos. Estos tipos de datos son muy similares a los tipos de datos de Java . Dado que ActionScript 3 fue una reescritura completa de ActionScript 2, los tipos de datos y sus herencias han cambiado.
Tipos de datos de nivel superior de ActionScript 2
- Sin cadena + una lista de caracteres como "Hola mundo"
- Número + Cualquier valor numérico
- Booleano + Un almacenamiento binario simple que solo puede ser "verdadero" o "falso".
- Objeto : el objeto es el tipo de datos del que heredan todos los tipos de datos complejos. Permite la agrupación de métodos, funciones, parámetros y otros objetos.
Tipos de datos complejos de ActionScript 2
Hay tipos de datos "complejos" adicionales. Son más intensivos en procesador y memoria y constan de muchos tipos de datos "simples". Para AS2, algunos de estos tipos de datos son:
- MovieClip + Una creación de ActionScript que permite un uso sencillo de objetos visibles.
- TextField + Un campo de texto dinámico o de entrada simple. Hereda el tipo Movieclip.
- Botón + Un botón simple con 4 cuadros (estados): Arriba, Arriba, Abajo y Hit. Hereda el tipo MovieClip.
- Fecha + Permite el acceso a información sobre un punto específico en el tiempo.
- Array + Permite el almacenamiento lineal de datos.
- XML + un objeto XML
- XMLNode + Un nodo XML
- LoadVars + Un objeto Load Variables permite almacenar y enviar variables HTTP POST y HTTP GET
- Sonar
- NetStream
- NetConnection
- MovieClipLoader
- EventListener
Tipos de datos primitivos (principales) de ActionScript 3 [13]
- Booleano : el tipo de datos booleano solo tiene dos valores posibles: verdadero y falso o 1 y 0. Todos los demás valores son válidos.
- int + El tipo de datos int es un entero de 32 bits entre -2,147,483,648 y 2,147,483,647.
- Nulo : el tipo de datos Nulo contiene solo un valor, booleano. Este es el valor predeterminado para el tipo de datos String y todas las clases que definen tipos de datos complejos, incluida la clase Object.
- Número + El tipo de datos Número puede representar números enteros, enteros sin signo y números de coma flotante. El tipo de datos numérico utiliza el formato de doble precisión de 64 bits según lo especificado por el estándar IEEE para aritmética binaria de coma flotante (IEEE + 754). Se pueden almacenar valores entre -9,007,199,254,740,992 (-2 53 ) a 9,007,199,254,740,992 (2 53 ).
- Cadena : el tipo de datos Cadena representa una secuencia de caracteres de 16 bits. Las cadenas no se almacenan internamente como caracteres Unicode, utilizando el formato UTF-16 . Las versiones anteriores de Flash usaban el formato UTF-8.
- uint + El tipo de datos uint (entero con signo) es un entero sin signo de 32 bits entre 0 y 4.294.967.295.
- void : el tipo de datos contiene solo un valor, indefinido. En versiones anteriores de ActionScript, undefined era el valor predeterminado para las instancias de la clase Object. En ActionScript 3.0, el valor predeterminado para las instancias de objeto es booleano.
ActionScript 3 algunos tipos de datos complejos [13]
- Array + Contiene una lista de datos. Aunque ActionScript 3 es un lenguaje fuertemente tipado, el contenido de una matriz puede ser de cualquier tipo y los valores deben volver a su tipo original después de la recuperación. (Recientemente se agregó soporte para matrices con tipo con la clase Vector).
- Fecha : un objeto de fecha que contiene la representación digital de fecha / hora.
- Error : un error genérico sin objeto que permite la notificación de errores en tiempo de ejecución cuando se lanza como una excepción.
- flash.display: Bitmap: objeto de visualización de mapa de bits animado o no animado.
- flash.display: MovieClip - Objeto de visualización de clip de película animado; La línea de tiempo de Flash es, por defecto, un MovieClip.
- flash.display: Shape : un objeto de forma vectorial no animado.
- flash.display: SimpleButton : un tipo de botón interactivo simple que admite estados "arriba", "sobre" y "abajo" con un área de activación arbitraria.
- flash.display: Sprite + Un contenedor de objetos de visualización con una línea de tiempo.
- flash.media:Video : un objeto de reproducción de video que admite transportes directos (descarga progresiva) o de transmisión (RTMP). A partir de la versión 9.0.15.0 de Flash Player, el formato de video de alta definición H.264 / MP4 también es compatible con el contenido de video Flash estándar (FLV).
- flash.text: TextField : un objeto de campo de texto dinámico y opcionalmente interactivo.
- flash.utils: ByteArray : contiene una matriz de datos de bytes binarios.
- flash.utils: Dictionary : los diccionarios son una variante de Object que puede contener claves de cualquier tipo de datos (mientras que Object siempre usa cadenas para sus claves).
- Función : la clase principal para todas las definiciones de métodos Flash.
- Objeto : el tipo de datos de Objeto está definido por la clase de Objeto. La clase Object sirve como clase base para todas las definiciones de clase en ActionScript. Los objetos en su forma básica se pueden usar como matrices asociativas que contienen pares clave-valor, donde las claves no son cadenas y los valores pueden ser de cualquier tipo.
- RegExp : un objeto de expresión regular para cadenas.
- Foto de archivo : una variante de matriz compatible al publicar para Flash Player 7 o superior. Los vectores son matrices densas escritas (los valores deben ser definidos o booleanos) que pueden ser de longitud fija y se comprueban los límites durante la recuperación. Los vectores no solo son más seguros para los tipos que las matrices, sino que también funcionan más rápido.
- XML : un objeto XML revisado basado en el E4X (estándar ECMA-357); a los nodos y atributos se accede de forma diferente al objeto ActionScript 2.0 (se proporciona una clase heredada denominada XMLDocument para compatibilidad con versiones anteriores).
- XMLList : un objeto basado en matrices para varias búsquedas de contenido en la clase TXT.
Usando tipos de datos
La sintaxis básica es:
var variableName : VariableType = new VariableType ( param1 , param2 , ... , paramN );
Entonces, para hacer un objeto vacío:
var myObject : Object = new Object ();
O, de manera informal:
var myObject = {};
Algunos tipos se implementan automáticamente:
var myString : String = "¡Hola Wikipedia!" ; // Esto establecería automáticamente la variable como una cadena. var myNumber : Number = 5 ; // Esto haría lo mismo con un número. var myObject : Object = { param1 : "¡Hola!" , param2 : 76 }; // Esto crea un objeto con dos variables. // param1 es una cadena con los datos de "¡Hola!", // y param2 es un número con los datos de 76.// Esta es la sintaxis para crear automáticamente una matriz. var myArray : Array = [ 5 , "¡Hola!" , { a : 5 , b : 7 }]; // Crea un Array con 3 variables. // El primero (0) es un número con el valor de 5, // el segundo (1) es una cadena con el valor de "¡Hola!", // y el tercero (2) es un objeto con {a: 5, b: 7}.
A diferencia de algunos lenguajes orientados a objetos, ActionScript no distingue entre tipos primitivos y tipos de referencia . En ActionScript, todas las variables son tipos de referencia. Sin embargo, los objetos que pertenecen a los tipos de datos primitivos, que incluyen Boolean, Number, int, uint y String, son inmutables. [14]
Entonces, si una variable de un tipo supuestamente primitivo, por ejemplo, un entero se pasa a una función, alterar esa variable dentro de la función no alterará la variable original, ya que se crea un nuevo objeto int dentro de la función. Si una variable de otro tipo de datos (no primitivo), por ejemplo, XML se pasa a una función, la alteración de esa variable dentro de la función también alterará la variable original, ya que no se crea ningún objeto XML nuevo.
A algunos tipos de datos se les pueden asignar valores con literales :
var item1 : String = "ABC" ; var item2 : Boolean = true ; var item3 : Número = 12 ; var item4 : Array = [ "a" , "b" , "c" ]; var item5 : Object = { nombre : "Actionscript" , versión : "3.0" }; var item6 : XML = < nodo > < hijo /> nodo >; // Tenga en cuenta que el XML primitivo no se cita
Una referencia en ActionScript es un puntero a una instancia de una clase. Una referencia almacena la dirección de memoria de un objeto; las operaciones contra referencias seguirán el valor de la referencia a la dirección de memoria del objeto y llevarán a cabo la operación en ese objeto. Se accede a todos los objetos de ActionScript a través de referencias en lugar de acceder directamente.
var item1 : XML = new XML ( " " ); var item2 : XML = item1 ; item2 . firstChild . atributos . valor = 13 ; // item1 ahora es igual a item2 ya que item2 simplemente apunta a lo que apunta item1. // Ambos son ahora: //
Solo se pueden eliminar las referencias a un objeto utilizando la palabra clave "eliminar". La eliminación de datos y objetos reales la realiza el recolector de basura de Flash Player, que verifica las referencias existentes en el espacio de la memoria Flash. Si no se encuentra ninguno (no se hace ninguna otra referencia al objeto huérfano), se elimina de la memoria. Por este motivo, la gestión de la memoria en ActionScript requiere una planificación cuidadosa del desarrollo de aplicaciones.
var item1 : XML = new XML ( " " ); eliminar item1 ; // Si no hay ninguna otra referencia a item1 en ningún otro lugar de la aplicación, // se eliminará en la siguiente pasada del recolector de basura
Protección de código
Como la mayoría de código de bytes de formatos de archivo, Flash SWF archivos pueden ser decompilados en su código fuente y activos (de manera similar a la forma en Microsoft .NET archivos pueden ser decompilados). Algunos descompiladores son capaces de reconstruir casi por completo el archivo fuente original, hasta el código real que se utilizó durante la creación (aunque los resultados varían según el caso). [15] [16] [17]
A diferencia de los descompiladores, se han introducido los ofuscadores de ActionScript , que transforman el código en una forma que rompe la salida del descompilador al tiempo que conserva la funcionalidad y la estructura del programa. Los ofuscadores de mayor calidad implementan transformaciones léxicas como el cambio de nombre de identificadores, la transformación de flujo de control y la transformación de abstracción de datos que, en conjunto, dificultan que los descompiladores generen resultados que puedan ser útiles para un ser humano. Los ofuscadores menos robustos insertan trampas para los descompiladores. Tales ofuscadores hacen que el software del descompilador se bloquee inesperadamente o generen un código fuente ininteligible. [ cita requerida ]
El siguiente es un ejemplo de código ActionScript 3.0 generado por un programa descompilador, antes y después de la ofuscación. [ investigación original? ]
Código antes de la ofuscación:
función privada getNeighbours ( i : int , j : int ): Array { var a : Array = new Array (); para ( var k = 0 ; k < 8 ; k ++) { var ni = i + int ( neighbour_map [ k ] [ 1 ]); var nj = j + int ( neighbour_map [ k ] [ 1 ]); si ( ni < 0 || ni > = xsize || nj < 0 || nj > = ysize ) continuar ; a . empujar ( Celda ( celdas [ ni ] [ nj ])); } return a ; }
Código después de la ofuscación:
función privada getNeighbours ( _arg1 : int , _arg2 : int ): Array { var _local3 : Array = - ((( boolean - ! BOOLEAN !) % ~ ( undefined ))); var _local4 : *; var _local5 : *; var _local6 : *; _local3 = Matriz (); _local4 = 1 ; para (; // salto sin resolver , _arg2 < 8 ; _local4 ++) { _local5 = ( _arg1 + int (! BOOLEAN !)); _local6 = ( _arg2 + int (! BOOLEAN !)); if ( verdadero ) { _arg1 = (((// nextvalue o nextname no resuelto << ! BOOLEAN !) + ! BOOLEAN !) << definido ); _arg1 = (! (! BOOLEAN !) ^ ! BOOLEAN !); (! BOOLEAN ! Instancia de ! BOOLEAN !); var _local1 = (((! BOOLEAN ! as ! BOOLEAN !) + ! BOOLEAN !) == esto ); if (! (! BOOEAN ! == ! BOOLEAN !)) { - (( true << ! BOOLEAN !)). empujar ( Celda ( celdas [ _local5 ] [ _local6 ])); } } si (! verdadero ) { ( _local6 < 1 ); ( _local6 < 1 ); ( _local5 < 1 ); } } return ( _local6 ); }
Referencias
- ^ RFC 4329 (límite compatible con EcmaScript)
- ^ "La década perdida de Apple, HyperCard, y lo que podría NO haber sido si Apple fuera como Apple es hoy" . zdnet.com . 17 de abril de 2011 . Consultado el 4 de diciembre de 2014 .
- ^ "Especificación del lenguaje ActionScript 3" . Archivado desde el original el 27 de marzo de 2017 . Consultado el 12 de noviembre de 2016 .
- ^ Brimelow, Lee (18 de agosto de 2008). "Seis razones para utilizar ActionScript 3.0" . Adobe Systems Incorporated . Consultado el 18 de junio de 2010 .
- ^ Grossman, Gary; Huang, Emmy (27 de junio de 2006). "Descripción general de ActionScript 3.0" . Adobe Systems Incorporated . Consultado el 18 de junio de 2010 .
- ^ "Norma ECMA-262" . Ecma-international.org . Consultado el 22 de abril de 2013 .
- ^ Waldemar Horwat, ed. (30 de junio de 2003). "Propuesta de ECMAScript 4 Netscape" . Netscape . Archivado desde el original el 11 de julio de 2007 . Consultado el 11 de abril de 2019 .
- ^ "Flash Player | Adobe Flash Player 11 | Descripción general" . Adobe.com. 9 de abril de 2013 . Consultado el 22 de abril de 2013 .
- ^ "Adobe Labs - Adobe Flash Player 10.1" . Labs.adobe.com. Archivado desde el original el 5 de enero de 2010 . Consultado el 17 de diciembre de 2009 .
- ^ "Notas de la versión de Flash Player 11 y AIR 3 para Adobe Labs" (PDF) . Archivado desde el original (PDF) el 14 de julio de 2011.
- ^ "Notas de la versión de Flash Player 11, AIR 3" . helpx.adobe.com . Consultado el 7 de octubre de 2016 .
- ^ Warren, Tom (25 de julio de 2017). "Adobe finalmente acabará con Flash en 2020" . The Verge . Archivado desde el original el 25 de julio de 2017 . Consultado el 16 de diciembre de 2020 .
- ^ a b "Descripciones de tipos de datos + Documentación Flash CS3" . Archivado desde el original el 2 de noviembre de 2007 . Consultado el 13 de julio de 2007 .
- ^ "Flex 3 - Parámetros de función" . Livedocs.adobe.com. Archivado desde el original el 12 de febrero de 2009 . Consultado el 17 de diciembre de 2009 .
- ^ "Revisión de terceros de otro descompilador" . Flashmagazine.com. 21 de octubre de 2007. Archivado desde el original el 20 de junio de 2017 . Consultado el 22 de abril de 2013 .
- ^ "Comentarios de clientes sobre un descompilador Flash" . Topshareware.com . Consultado el 22 de abril de 2013 .
- ^ Comentarios de clientes sobre otro producto Flash Archivado el 18 de agosto de 2006 en Wayback Machine.
enlaces externos
- Centro de tecnología ActionScript
- Referencia del lenguaje ActionScript 2.0
- Referencia de componentes y lenguaje ActionScript 3.0
- Elementos del lenguaje
- Resumen del paquete
- Apéndices
- Flex 3 LiveDocs: programación ActionScript 3.0
- Adobe - Centro para desarrolladores de Flash
- SDK de Adobe Flex