Bien en un post anterior puse un ejemplo de AS3 pero no esta explicado ni nada.
En esta ocasión tratare de explicar lo mas detalladamente posible el código. Como sabrán los eventos de botones y movieClips como “onRelease”, “onPress”, etc ya no son soportados en la nueva versión de ActionScript ahora todo sera gestionado por medio de EventsListenners.
Otra cosa que veremos es como crear Elementos simples (cuadro, circulo) y ponerlos en el stage. La función AttachMovie dejo de existir en AS3, ahora para mostrar un elemento en el stage se debe de usar addChild con este método se pude agregar un elemento de la librería o un objeto creado por código.
Ademas de que veremos que ahora es posible cambiar el FrameRate en tiempo de ejecución. esto había sido pedido a gritos por varios. =)
Lo primero sera agregar elementos al Stage. ya que sin ellos no se puede hacer nada jeje.
Flash cuenta con un API de dibujo que nos facilita la vida, los métodos disponibles son
- drawCircle(x:Number, y:Number, radius:Number):void
- drawEllipse(x:Number, y:Number, width:Number, height:Number):void
- drawRect(x:Number, y:Number, width:Number, height:Number):void
- drawRoundRect(x:Number, y:Number, width:Number, height:Number, ellipseWidth:Number, ellipseHeight:Number):void
simple no?, un ejemplo sencillo.
[as]
import flash.display.Sprite;
var ball : Sprite = new Sprite ();
ball.graphics.beginFill(0x0099FF)
ball.graphics.drawCircle(50,50,25)
ball.graphics.endFill()
addChild(ball)
[/as]
Lo primero que debemos hacer es importar los paquetes que vamos a utilizar en este caso flash.display.Sprite para poder crear una nueva instancia
En la ultima linea después de crear nuestro circulo debemos agregar el objeto al Stage esto se debe de hacer siempre ya que de otra forma no se vera en nuestro SWF
Otra de las cosas que cambiaron es el modo de los eventos en los objetos en el Stage. Los que usaron los componentes AS2 de Flash no tendrán problema ya que es exactamente lo mismo, los eventos se asignan por media de la función addEventListener
[as]
import flash.display.Sprite;
import flash.events.*
var ball : Sprite = new Sprite ();
ball.graphics.beginFill(0x0099FF)
ball.graphics.drawCircle(50,50,25)
ball.graphics.endFill()
addChild(ball)
ball.addEventListener(MouseEvent.MOUSE_DOWN, handler)
function handler(event:Event){
trace(event)
}
[/as]
Ya no es necesario crear un listener y después asignarlo los eventos, ahora solo agregas el tipo de evento al objeto y la función que se ejecutara cuando se lleve a cabo dicho evento, La función recibe un parámetro del tipo Event, pero podemos acceder a sus propiedades como si fuera un objeto
Las propiedades que recibimos son:
[MouseEvent
type=”mouseDown”
bubbles=true
cancelable=false
eventPhase=2
localX=66
localY=57
stageX=66
stageY=57
relatedObject=null
ctrlKey=false
altKey=false
shiftKey=false delta=0]
Algo que me llamo la atención y me agrado fue que el evento detecta si el usuario esta o no, presionando las teclas Ctrl Alt o Shift es algo muy útil. adiós a los KeyListenners =P
bien, así como los eventos del mouse para con los objetos han cambiado, también lo hicieron algunos métodos mas. por ejemplo el onEnterFrame.
Ahora para invocar un enterFrame debemos agregarle un EventListener al Objeto en cuestión por ejemplo:
[as]
import flash.display.Sprite;
import flash.events.*
var ball : Sprite = new Sprite ();
var count:Number = 0
ball.graphics.beginFill(0x0099FF)
ball.graphics.drawCircle(50,50,25)
ball.graphics.endFill()
addChild(ball)
ball.addEventListener (Event.ENTER_FRAME, handlerEnterFrame);
function handlerEnterFrame(event:Event)
{
if(count < 15)
{
trace(event)
ball.x += 5
count++
}else
{
ball.removeEventListener("enterFrame", handlerEnterFrame)
}
}
[/as]
Por ultimo, Ahora se puede cambiar el valor del frameRate en tiempo de ejecución algo que no se podía hacer en ninguna de las versiones anteriores de Flash.
Esto es algo muy simple tan simple como esto.
[as]
stage.frameRate = 50
[/as]
Ahora el ejemplo terminado. Da click en el rectangulo para cambiar el FrameRate del SWF, Necesitas el FlashPlayer9 para verlo
El código completo
[as]
import flash.display.Sprite;
import flash.events. *
import flash.stage. *
var ball : Sprite = new Sprite ();
var square : Sprite = new Sprite ();
var outPut : TextField = new TextField ();
function init ()
{
doBall ()
doButton ()
doTextField ()
addListeners ()
}
function doBall ()
{
ball.graphics.beginFill (0x0099FF)
ball.graphics.drawCircle (10, 20, 10);
ball.graphics.endFill ();
addChild (ball)
}
function doButton ()
{
square.graphics.beginFill (0x0099FF)
square.graphics.drawRect (10, 50, 50, 25);
square.graphics.endFill ();
addChild (square)
}
function doTextField ()
{
outPut.width = 150
outPut.height = 25
outPut.x = 70
outPut.y = 60
addChild (outPut)
}
function addListeners ()
{
ball.addEventListener (Event.ENTER_FRAME, handlerEnterFrame);
square.addEventListener (MouseEvent.MOUSE_UP, handlerButton);
}
function handlerEnterFrame (event : Event)
{
ball.x += 5
if (ball.x > 400)
{
ball.x = 0
}
outPut.text = “FrameRate : ” + stage.frameRate
}
function handlerButton (event : Event)
{
if (stage.frameRate < 120)
{
stage.frameRate += 12
}else
{
stage.frameRate = 12
}
}
init ()
[/as]
y por supuesto el ZIP con el FLA
Excelente!!!
Muy buen ejemplo, muchas gracias 😉
Excelentes ejemplos ^^
una vez mas mi estimado kike, felicitaciones, es realmente muy sencilla la forma como explicas lo nuevo q nos trae AS 3.0
as3, de adonde?, todavia no salio la version 9, pero si el reproductor 9 :S
Bueno creo que Ramiro esta un poco desinformado..
Flex 2 viene con ActionScript3, tambien hay un Alpha de la version 9 de Flash en la cual tambien esta disponible ActionScript3
http://www.adobe.com/products/flex/
http://labs.adobe.com/technologies/flash9as3preview/
Qué tal Tmeister?
Tengo duda con el addChild. Antes con el attachMovie le tenias que indicar el nivel en el que querias cargar el movie clip (addChild(“nombreMC”,”nombreInstanciaMC”,nivel), ahora como se manejan esos niveles con AS3?
novato…
gracias me será de gran ayuda…