WASP Blog
13May/100

AS3: Segundos a Formato Hora

Tratando de crear un video player personalizado em encontre con la necesidad de coger el tiempo que me arroja el streaming que es en segundos y pasarlo a el formato conocido de h:mm:ss. Asi qeu cree esta clase estatica muy sencilla que hace esto de  manera  facil.  Podemos testiar nuestro codigo de la siguiente manera:

trace(TimeFormat.formatTime(210, TimeFormat.SECONDS));

Obteniendo para este caso "0:03:30".

Nuestro Clase estaria definida de la siguiente forma:

package com.wasp{

public class TimeFormat{

public static const HOURS:uint = 2;

public static const MINUTES:uint = 1;

public static const SECONDS:uint = 0;

public function TimeFormat() {
}

public static function formatTime(time:Number, detailLevel:uint = 2):String {
var intTime:uint = Math.floor(time);
var hours:uint = Math.floor(intTime/ 3600);
var minutes:uint = (intTime - (hours*3600))/60;
var seconds:uint = intTime -  (hours*3600) - (minutes * 60);
var hourString:String = detailLevel == HOURS ? hours + ":":"";
var minuteString:String = detailLevel >= MINUTES ? ((detailLevel == HOURS && minutes <10 ? "0":"") + minutes + ":"):"";
var secondString:String = ((seconds < 10 && (detailLevel >= MINUTES)) ? "0":"") + seconds;
return hourString + minuteString + secondString;
}

}

}
  • Share/Bookmark
12Oct/090

Actionscript 3.0 sendAndLoad

Una de las cosas mas utilizadas a la hora de hacer una aplicacion es la comunicacion con ficheros externos (.php, .asp, .aspx etc), para realizar diversas tareas. Como sabemos o si no lo sabes te comento que esta funcion ya no existe dentro del Core de ActionScript 3 asi que si quieres hacer eso que podias hacer con el sendAndLoad en AS2, solo sigue esta pequeña guia.

Si estamos trabajado sobre un AS, tenemos que importar la librerias necesarias

import flash.display.Sprite;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.net.sendToURL;

Creamos el elemento de envio y donde se recibe los datos de respuesta

var url:String = "http://www.waspgroup.com/ejemplos/prueba.php";
var enviar:URLRequest = new URLRequest(url);
var recibir:URLLoader = new URLLoader();

Tambien creamos un elemnto tipo URLVariables que es donde se almaceneran cada una de las variables que se enviaran a la pagina.

var variables:URLVariables = new URLVariables();
variables.numero1 = 7;
variables.numero2 = 10;

enviar.method = URLRequestMethod.POST;
enviar.data = variables;
recibir.dataFormat = URLLoaderDataFormat.VARIABLES;

Luego tenemos los eventos asociados, el primero es el de respuesta, que se ejecuta una vez completado el llamado y si este fue exitoso.
El segundo es el de error, en caso de no tener respuesta por cualquier razon (no existe el vinculo, fallo de conexion, etc)

recibir.addEventListener(Event.COMPLETE,Respuesta);
recibir.addEventListener(IOErrorEvent.IO_ERROR,HayError);

recibir.load(enviar);

function Respuesta(event:Event){

        trace("El resultado es : " + recibir.data.datos);

}
function HayError(event:IOErrorEvent):void {

        trace("Error al cargar la url");

}

El archivo php es el siguiente:

<?php

	$numero1 = htmlentities($_POST[numero1]);
	$numero2 = htmlentities($_POST[numero2]);
	$info = $numero1 ."-". $numero2;
	echo "datos=" . $info;

?>

Este es un ejemplo de como quedaria con algunas funcionalidades adicionales:

  • Share/Bookmark
12Oct/090

Mi Primer mundo para BOX2D en Actionscript 3

Dentro del lo motores fisicos que mencione en un post anterior esta BOX2D que para mi es el mejor y con el cual he empezado a desarrollar proyectos, la idea ante todo es conocer muy bien su funcionamiento y saber donde esta la documentacion para de esta forma saber todas las posibilidades que nos ofrece.

La wiki de BOX2D la puede encontrar aqui.

La libreria de flash se puede descargar aqui.

El primer elemento, o prime paso que se sebe realizar es la creacion del mundo, que es donde los elementos van a interactuar. lo que vamos a realizar se puede ver a continuacion.

Bodies y Shapes (cuerpos y formas)

En este mundo todas las particulas de Box2D son cuerpos rigidos es decir tienen un cuerpo y una forma asociada; el cuerpo tiene unas propiedades como lo son la masa, la posición, el factor de amortiguamiento en cambio la forma maneja las colisiones, la fricción, la densidad entre otras variables. Teniendo todos estos datos, box2d puede llevara  cabo los calculos necesarios para darle el realismo necesario a nuestro mundo.

 /****************************************************
				TUTORIAL DE BOX2D

		Creado por: César Eduardo Suárez T.
				www.waspgroup.com
			    blog.waspgroup.com

	 Si tiene alguna pregunta puede contactarme
				csuarez@waspgroup.com

****************************************************/

package{

	import flash.display.*;
	import flash.events.*;

	//Importamos la librerias necesarias de BOX2D
	import Box2D.Dynamics.*;
	import Box2D.Collision.*;
	import Box2D.Collision.Shapes.*;
	import Box2D.Common.Math.*;

	public class miMundo extends Sprite{

		//Creamos una variables tipo cuerpo shape para crear nuestra caja
		var cuerpoCajaDef:b2BodyDef;
		var cajaDef:b2PolygonDef;
		var cajita:b2Body;
		var piso:b2Body;
		var m_sprite:Sprite;
		var debugvar:Boolean=false;
			//create world variable

		public var m_Mundo:b2World;

		//creamos la variable que permite el render
		//esta variable no dira que tan frecuente se actualizara nuestro mundo. 1/30 significa 1/30 de un segundo, o en otras palabras 30 veces por segundo.
		//las interaciones le dan la presicion a los calculos fisicos a menos iteraciones menor da una menor presicion y mas rapidez
		//a mayor iteracion mayor presicion pero mas tiempo de calculo los expertos recomienda un valor de 10.
		public var m_timeStep:Number = 1/30;
		public var m_iterations:int = 10;

		//Funcion de contruccion
		public function miMundo(){

			//2bAABB crea una caja es una la cual es necesaria para la creacion de el entorno
			//Si un objeto tiene una tamaño mayor a el del mundo quedara congelado.
			var worldAABB:b2AABB = new b2AABB();
			worldAABB.lowerBound.Set(-100.0, -100.0);
			worldAABB.upperBound.Set(100.0, 100.0);
			//this defines the gravity of world. The first parameter is horizontal force, and the second is verticle force.
			var gravity:b2Vec2 = new b2Vec2(0.0, 10.0);
			// Allow bodies to sleep, this effects performance, leave it set to true.
			var doSleep:Boolean = true;
			//Build the world
			m_Mundo = new b2World(worldAABB, gravity, doSleep);

			//Ahora que creamos el mundo vamos a agregar los elementos. Debemos tener en cuenta que
			//1. Cada objeto tiene dos partes el bodyDef y el shapeDef (boxDef, circleDef...)
			//2. Estos objetos son como una relacion de padre/hijo la forma sera aplicada como hijo del cuerpo

			//El piso del scenario
			var boxDef:b2PolygonDef;
			var bodyDef:b2BodyDef;
			bodyDef = new b2BodyDef();
            bodyDef.position.Set(9,10);
			//le asociamos un cuerpo (movie clip previamente creado)
 			var mesita:mesax=new mesax();
			bodyDef.userData=mesita;
			addChild(bodyDef.userData);
            //definimos uss propiedades fisicas a traves de una definicion de forma;
            boxDef = new b2PolygonDef();
            boxDef.SetAsBox(7,1.5);
            boxDef.friction =0.3;
            boxDef.density=0;
		//creamos el cuerpo como tal en nuestro mundo;

           piso = m_Mundo.CreateBody(bodyDef);
           piso.CreateShape(boxDef);

			//Creamos el Cuerpo (la caja wasp)
			//le asociamos un cuerpo (movie clip previamente creado)
			var boxmovie:cajax=new cajax();
			cuerpoCajaDef = new b2BodyDef();
			cuerpoCajaDef.position.Set(5,0);
			cuerpoCajaDef.userData = boxmovie;
			cuerpoCajaDef.userData.width =6*30 ;
			cuerpoCajaDef.userData.height = 6*30;
			addChild(cuerpoCajaDef.userData);
			cajita = m_Mundo.CreateBody(cuerpoCajaDef);
			//create the shape
			cajaDef = new b2PolygonDef();
			cajaDef.SetAsBox(2.0, 2.0);
			cajaDef.density = 1.0;
			cajaDef.friction = 0.3;

			cajita.CreateShape(cajaDef);
			cajita.SetMassFromShapes();

           //El boton para activar el debug
		   var bot:btnCodigo=new btnCodigo();
		   addChild(bot);
		   bot.x=380;
		   bot.y=30;
		   bot.addEventListener(MouseEvent.CLICK,verCodigo);

		addEventListener(Event.ENTER_FRAME, Update, false, 0, true);
		}

		public function verCodigo(eve:MouseEvent){
			if(debugvar==false){
				debugvar=true;

				m_sprite = new Sprite();
				addChild(m_sprite);
				var dbgDraw:b2DebugDraw = new b2DebugDraw();
				var dbgSprite:Sprite = new Sprite();
				m_sprite.addChild(dbgSprite);

				dbgDraw.m_sprite=m_sprite;
				dbgDraw.m_drawScale=30;
				dbgDraw.m_alpha = 1;
				dbgDraw.m_fillAlpha=0.9
				dbgDraw.m_drawScale =30.0;

				dbgDraw.m_lineThickness=1;
				dbgDraw.m_drawFlags=b2DebugDraw.e_shapeBit|b2DebugDraw.e_jointBit|b2DebugDraw.e_centerOfMassBit;
				m_Mundo.SetDebugDraw(dbgDraw);
				}else{
					debugvar=false;
					removeChild(m_sprite);
					}
			}

		//Esta funcion sera activada cada vez que se entra al frame
		public function Update(e:Event):void{
			//pasos para hacer el render de BOX2D
			m_Mundo.Step(m_timeStep, m_iterations);

				//Realiza la actualizacion de todos los objetos
			for (var bb:b2Body =m_Mundo.m_bodyList; bb; bb = bb.m_next){
					if (bb.m_userData is Sprite){
						bb.m_userData.x = bb.GetPosition().x * 30;
						bb.m_userData.y = bb.GetPosition().y * 30;
						bb.m_userData.rotation = bb.GetAngle() * (180/Math.PI);
					}
				}
		}

	}
}

Basicamente nuetro primer ejemplo con BOX2D consta de 2 objetos, una superficie que es una mesa y un objeto que es una caja, coloque un botón para mirar el debug de box2d y asi no ensuciar la animación. Dentro del mismo codigo he colocado la explicacion de cada uno de los elementos utilizados para la programación. Esperen el siguiente tutorial donde agregare nuevo elementos :-)

Archivos para Descargar.

  • Share/Bookmark
11Oct/090

ActionScript 3 Motores fisicos

fisica

Buscando motores de control de variables fisicas me encontre con varias opciones como son (historia del arte):

1- The Fisix Engine:
Este motor solo puede ser usado en flex, tiene una buena documentacion, y ha creado una comunidad al rededor de esta comunidad.
Visitar Sitio

2. ActionScript Physics Engine

Estas librerías físicas pueden ser usadas tanto en flash como Flex, es muy facil de usar, aunque se encuentra muchos tutorial y ejemplos muchos esta enfocados a Flex.

Visitar Sitio

3. FOAM

De las librerías físicas creo que es la peor documentada, toca ver ejemplos para poder entender su funcionamiento

Visitar Sitio

4. Box2DFlashAS3

Estoy en el apredizaje de esta librería que para mi es la más poderosa y la mejor documentada, se basa en una creada para c++ y empezare a explicar mas adelante su manejo.

Visitar Sitio

  • Share/Bookmark
Etiquetado con: , , Sin Comentarios