Browsing articles in "Blog {es}"

Cursor personalizado nativo en AS3

Jan 25, 2013   //   by EderChrono   //   Blog {es}  //  No Comments

Desde el flash player 10.2 puedes hacer cursores personalizados para tus aplicaciones. Hoy explicaré como usar una clase que hice para tener un sencillo pero muy util cursor de manita (grab). Read more >>

Unit test con FDT

Oct 1, 2012   //   by EderChrono   //   Blog {es}  //  No Comments

Hace poco leí sobre Unit testing y Test Driven Development, quise aplicarlo a mi ambiente de trabajo y me encontré con la grata sorpresa de que existen herramientas para ActionScript ya integradas en FDT.

Al crear un nuevo proyecto basta con activar el checkbox que dice "add unit testing". Esto nos va a crear, aparte del proyecto, una carpeta llamada "test-src" que contiene una clase "TestRunner.as" y una carpeta llamada "test" donde encontraremos otra clase llamada "SimpleTest.as".

 

 

 

 

 

 

Para este ejemplo en nuestra clase Main tendremos un método que simplemente nos regresará el mayor de los números de un arreglo.

package
{
	import flash.display.Sprite;

	public class Main extends Sprite
	{
		public function Main()
		{
			trace("[Main::Main()] ");
		}

		public function largest(list:Vector.<int>):int
		{
			// checking for null or empty list
			if (!list || list.length == 0)
			{
				trace("[Main::largest(arr)] - Error: Empty list");
				throw new Error("The list is empty");
				return 0;
			}

			var max:int = list[0];
			for (var i:int = 1; i < list.length; i++)
			{
				if (list[i] > max)
				{
					max = list[i];
				}
			}
			return max;
		}
	}
}

Para probar que tal funciona haremos algunas pruebas dentro de la clase SimpleTest:


package test
{
    import org.hamcrest.object.equalTo;
    import org.flexunit.assertThat;

    public class SimpleTest
    {
        private var main:Main = new Main();
        private var list:Vector.<int>;

    [Before]
    public function pretest():void
    {
        list = new Vector.<int>();
    }

    [Test]
    public function test1():void
    {
        list.push(1);
        list.push(3);
        list.push(5);
        assertThat(main.largest(list), equalTo(5));
    }

    [Test]
    public function test2():void
    {
       list.push(-1);
       list.push(-3);
       list.push(-5);
       assertThat(main.largest(list), equalTo(-1));
    }

    [Test]
    public function test3():void
    {
        list.push(5);
        list.push(5);
        list.push(3);
        list.push(1);
        assertThat(main.largest(list), equalTo(5));
    }

    [Test]
    public function test4():void
    {
        list.push(-9999999);
        list.push(9999999);
        list.push(0);
        assertThat(main.largest(list), equalTo(9999999));
    }

    [Test(expects="Error")]
    public function test5():void
    {
        // expecting error because list is empty
        assertThat(main.largest(list), equalTo(5));
    }
  }
}

Lo que estamos haciendo en esta clase es crear una instancia de Main y un vector donde almacenaremos números para que el método "main.largest" nos regrese el número más grande. La metadata (instrucciones entre corchetes) ayuda a TestRunner a saber como correr las pruebas. Por ejemplo [Before] indica que esa función será ejecutada antes de cada [Test]. Para ver más detalles sobre metadata podemos ver la referencia.

Básicamente lo que hacemos son 5 pruebas en las que enviamos diferentes números y hacemos un "assert" o en español una afirmación, que toma como parámetros algunos valores que en este caso el primer valor es nuestra operación "main.largest" y el segundo es el resultado que esperamos de esta operación.

Para correr las pruebas necesitamos de correr la clase TestRunner y no Main. Como resultados obtendremos algo como esto:

[Info] Connection to player established.
test::SimpleTest.test5 .
[Main::Main()]
[Main::largest(arr)] - Error: Empty list
test::SimpleTest.test1 .
[Main::Main()]
test::SimpleTest.test4 .
[Main::Main()]
test::SimpleTest.test2 .
[Main::Main()]
test::SimpleTest.test3 .
[Main::Main()]
Time: 0.049
OK (5 test s)

 

Lo que podemos analizar es que las 5 pruebas fueron superadas. En caso de tener alguna que no cumpla con lo que dijimos será reportada con detalles que nos ayudaran a ver el origen del error y repararlo. Esto es muy útil para automatizar pruebas y probar todos los casos posibles y ver lo que sucede sin necesidad de hacerlo a mano.

 

 

TLFText y el error 1195

Jul 6, 2012   //   by EderChrono   //   Blog {es}  //  No Comments

En un proyecto reciente comencé a tener problemas al compilar. Cada vez que trataba de probar mi programa seguía obteniendo este error:

Error 1195: Attempted access of inaccessible method...

Read more >>

Un ejemplo sencillo de TweenLite JS

Jun 13, 2012   //   by EderChrono   //   Blog {es}  //  No Comments

Recientemente GreenSock lanzó su nueva plataforma de tweens para JavaScript. He estado usando por un buen rato TweenLite y TweenMax para ActionScript, y la verdad lo único que puedo decir es que es muy fácil de usar y me a ahorrado muchísimo tiempo.Es por eso que decidí probar la api de JavaScript para ver las diferencias, pero me sorprendió que la api prácticamente es la misma, por lo que gente, como yo, que venga de programar flash y as3 la tenemos fácil.

Read more >>

Arreglando el graph api de facebook para as3

May 9, 2012   //   by EderChrono   //   Blog {es}  //  3 Comments

Desde hace poco la varias aplicaciones en flash que se conectan con facebook dejaron de funcionar, si este es tu caso tienes que seguir los siguientes pasos:

1.- Si estás usando el GraphAPI_Web_1_8_1.swc elíminalo.

2.- Baja la api modificada de aquí

3.- Pega las carpetas en tus librerías, si ya tenías la carpeta de Facebook sobreescríbela.

4.- Compila el proyecto.

El problema se dio porque facebook modificó su archivo http://connect.facebook.net/en_US/all.js de manera que el archivo de la api de as3 FacebookJSBridge.as hacía ciertas llamadas con "FB.JSON" y ahora las debe hacer con solo "JSON".

Librería para procesamiento de imágenes

Dec 6, 2011   //   by EderChrono   //   Blog {es}  //  No Comments

Las últimas semanas he estado trabajando en un proyecto donde necesitaba de hacer ajustes a fotos subidas por el usuario a una aplicación. Un slider para ajustar el brillo, hue, contraste... sin problemas.

Después de eso, necesitaba que la imagen se viera como una pintura al óleo. Sabía que no iba a ser algo que se solucionaría fácilmente con las funciones nativas de Flash, así que inicié mi investigación.

Después de googlear y un poco de suerte, encontré una librería de Joa Ebert que supero mis expectativas.
Read more >>

Pages:1234567»