martes, 18 de marzo de 2014

¿Qué diablos es una función? ActionScript 3.0

Funciones

Las funciones en AS3.0 tienen nuevas características importantes para la programación orientada a objetos. En general tenemos en ActionScript tres tipos de funciones: Funciones globales, métodos (o funciones relacionadas a un objeto) y funciones hechas por el usuario.
Las funciones las podríamos definir como grupos de sentencias que tienen un fin específico. Pueden o no regresar un valor. También podemos mandarles valores a las mismas (llamados argumentos o parámetros), pero también tendremos funciones sin parámetros.

Funciones globales

Las funciones globales están incorporadas a Flash, y pueden ser llamadas en cualquier parte del programa  Por ejemplo, la función trace(), se puede utilizar en cualquier sin definir un objeto y en cualquier momento. Otras funciones globales son las puede consultar en la ayuda del paquete.

Métodos

Los métodos son funciones que están asociadas a una clase. Existen métodos, de las clases predefinidas, en que los utilizamos por medio de la notación punto, por ejemplo:
Math.random()
En la programación orientada a objetos, y por lo tanto en AS3.0, es muy común que el programador genere sus propios métodos, añadiendo funciones a las clases hechas por el usuario. De hecho al hacer un constructor, estamos escribiendo una función.

Funciones personalizadas

Aunque en AS3.0 los usuarios también hacen funciones dentro de clases, llamaremos funciones personalizadas aquellas que se definen fuera de la clase. Dentro del paquete las llaman function clausures o cierre de función.

Llamado o invocación de una función

Para llamar a una función se utiliza su identificador, seguido de los paréntesis. Si la función requiere de parámetros o de argumentos, estos van dentro de los paréntesis, divididos por comas. Por ejemplo, nuestra ya conocida función global trace() requiere de un parámetro:
trace(“Hola Mundo”);
Existen parámetros que son requeridos y otros que son opcionales. Por ejemplo, si escribe una función trace() sin argumentos, el compilador le enviará un mensaje de error.
Si la función no requiere parámetros, con escribir los paréntesis vacíos es suficiente. De hecho, si una función global no requiere argumentos, puede escribirla sin paréntesis, pero a esto se le considera una mala práctica de programación.

Funciones de usuario

Existen dos formas de definir una función en ActionScript 3.0: por una sentencia de función o por una expresión de función. Las características de las mismas se presentan a continuación:

Función tipo sentencia

Este estilo de codificar funciones (también conocido extraoficialmente como codificación estilo Flash 5, porque en aquellos lejanos tiempos era la única forma) son la forma más adecuada de definir variables cuando se trabaja en con el compilador en modo estricto.
Este modo tiene la siguiente sintaxis:
function nombreFuncion(arg1, arg2,…){
}
Primero va la palabra reservada function, seguido del identificador de la función. Entre paréntesis van los argumentos (si existen), y después las llaves, que forman el cuerpo de la función.

Funciones tipo expresiones

También conocida como función literal o anónima. Extraoficialmente se le conoce como tipo de codificación Flash MX, porque en esta versión apareció.
Su sintaxis es:
var nombreFunción:Function = function (arg1, arg2,…){
}
Nota: En general debe considerarse usar las funciones de sentencia, pues son más fáciles de leer y el compilador detecta de mejor manera cualquier problema que se encuentre en ellas. Las funciones de sentencia (tipo Flash 5) existen en todo el ámbito en que están definidas. Las funciones de expresión deben ser definidas antes de ser utilizadas.

Funciones que regresan valores

Para regresar un valor de una función, al igual que las versiones anteriores de AS, utilizamos la palabra reservada return. Todas las sentencias que se encuentren debajo del return ya no son procesadas, pues con esta sentencia termina la función. En el modo estricto del compilador, la función debe de regresar el mismo tipo de dato con la cual fue definida, por ejemplo:
function cuadrado(num:int):int {
            return num*num;
}
Para indicarle al compilador el tipo de dato de regreso, se debe escribir el signo de dos puntos (:) entre el paréntesis que cierra los argumentos y la llave que abre el cuerpo de la función. Los tipos deben de ser los mismos que los tipos de datos ya revisados.
Si la función no regresa ningún valor, y quiere que el compilador en modo estricto lo detecte, debe utilizar la palabra reservada void. A diferencia que en las versiones anteriores, la palabra void se escribe toda en minúsculas.

Funciones anidadas

Es posible anidar funciones, es decir, poner una o más funciones dentro de otra. Las funciones anidadas no van a poder ser acezadas fuera de la función que las contiene, a menos que sean llamadas por “referencia”, término que analizaremos más adelante.

Ejercicio


  • Abra un archivo Flash ActionScript 3.0 y guárdelo como funciones.fla en su carpeta de trabajo.
  • Abra un archivo ActionScript y guárdelo como Funciones.as en la carpeta misClases.
  • Ligue a ambos archivos en el campo Document Class.
  • Asegúrese de que se encuentra e modo estricto del compilador.
  • En el archivo de clase escriba el siguiente guión:
package misClases{
            import flash.display.Sprite;
            public class Funciones extends Sprite {
                        public function Funciones() {
                                    trace(junta("tuNombre","tuApellido"));
                        }
                        public function junta(arg1:String,arg2:String):String {
                                    function nombre(arg3:String):String {
                                                return arg3;
                                    }
                                    public apellido(arg4:String):String {
                                                return arg4;
                                    }
                                    return nombre(arg1) +" "+apellido(arg2);
                        }
            }
}
  • Ahora intente llamar a la función apellido() desde la función constructora. El compilador deberá enviarle un mensaje de error.

http://www.pacoarce.com

miércoles, 12 de marzo de 2014

Características del DataGrid en Flex ActionScript 3.0


  1. Columnas ajustables 
  2. Columnas y encabezados personalizables
  3. Las celdas pueden ser editables 
  4. Selección múltiple 
  5. Los datos desplegados pueden ser personalizados 
  6. Paginación de datos 


Ejemplo de un DataGrid 


<mx:DataGrid columns="No default." dataProvider="No default." sortableColumns="true|false" . . . />

Cargar datos a un DataGrid

Los datos se cargan a un DataGrid por medio de la propiedad dataProvider.

La mejor manera de cargar datos es por medio de un ArrayCollection.

Es necesario importar la clase: 


mx.collections.ArrayCollection

Cargar con datos a un DataGrid


Ejemplo para poblar un DataGrid desde un modelo de datos:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/ 2006/mxml" xmlns="*"
layout="absolute" creationComplete="restaurants = new ArrayCollection(myDataModel.item)">

<mx:Model id="myDataModel">
<item>
<key>0</key>
<style>Thai</style>
<number>6</number>
</item>
<item>
<key>1</key>
<style>Indian</style>
<number>14</number>
</item>
</mx:Model>

<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;

[Bindable]

public var restaurants:ArrayCollection;

]]>

</mx:Script>
<mx:DataGrid dataProvider="{restaurants}"/>

</mx:Application>



  • Una columna es creada para cada propiedad
  • El orden de las columnas no es previsible
  • El nombre de las columnas por omisión es el nombre de la propiedad

Ejemplo de la carga de un control dataGrid desde un archivo XML

http://www.youtube.com/watch?v=9DUYoK8poTo

http://www.youtube.com/watch?v=RyNf5r65yXE

Básico como armar un layout con Canvas

Más sobre Canvas y estados

http://www.youtube.com/watch?v=IdM_rgDaVM0

http://www.youtube.com/watch?v=6OzHK58XSfA

lunes, 10 de marzo de 2014

Dibujar una nave sencilla con el API (AS 3.0)

Autor: Francisco Arce
Correo: fj_arce@yahoo.com.mx


Cuando hacemos juegos con ActionScript 3.0, es muy útil dibujar una nave sencilla con el API de dibujo, pues no necesitamos cargar ninguna imagen y resulta extremadamente ligera. A continuación mostramos en código de una clase llamad Nave que realiza este dibujo:

package {
   import flash.display.Sprite;

   public class Nave extends Sprite {
      public function Nave() {
         init(false);
      }
      public function init(llama:Boolean):void {
         graphics.clear();
         graphics.lineStyle(1,0);
         graphics.moveTo(10,0);
         graphics.lineTo(-10,10);
         graphics.lineTo(-5,0);
         graphics.lineTo(-10,-10);
         graphics.lineTo(10,0);

         if (llama) {
            graphics.moveTo(-7.5,-5);
            graphics.lineTo(-15,0);
            graphics.lineTo(-7.5,5);
         }
      }
   }
}   

http://www.pacoarce.com
         

miércoles, 5 de marzo de 2014

Guardar componentes de Coldfusion en espacios persistentes


• Cuando creamos componentes con la etiqueta <cfobject> o con createObject(),
podemos almacenar la instancia en:
■ En una zona de almacenamiento local (local scopes)
■ En una zona de almacenamiento pesistente (persistent scopes) como podría ser:
– Request
– Session
– Application

Nota: Cuando almacenamos un componente en una zona persistente, su código también queda almacenado en esa zona, por los que cuando cambiamos el código del mismo, éste no se refresca en forma automática.

Crear instancias en espacios persistentes

• Crear una instancia directamente en los espacios persistentes:

■ <cfset application.cfcAnimal = createObject("component","components.animal")
■ <cfobject component="components.animal" name="application.myAnimal">

• Primero crear la instancia y luego subirla al espacio persistente:

■ <cfset myAnimal = createObject("component", "components.animal")>
■ <cfset application.myAnimal = myAnimal>

Acceder a los componentes en zonas o espacios persistentes

•Al igual que otros componentes, podemos acceder a sus métodos y propiedades por medio del espacio persistente (cached scope):

<cfset application.myAnimal =createObject("component", "components.animal")>
<cfset application.myAnimal.name = “Value”>
<cfset myResult = application.myAnimal.MyMethod()>

http://www.pacoarce.com



martes, 4 de marzo de 2014

ActionScript 3.0: Cursor personalizado

Autor: Francisco Arce
Correo: fj_arce@yahoo.com.mx

function pintaColor(e:MouseEvent):void {
   var color:String = e.target.name;  
   Mouse.hide();
   pincel_mc = new Pincel();
   addChild(pincel_mc);
   stage.addEventListener(Event.ENTER_FRAME, cursorPincel);
}

function cursorPincel(event:Event):void {
   pincel_mc.mouseEnabled = false;
   pincel_mc.x = mouseX;
   pincel_mc.y = mouseY;


http://www.pacoarce.com