Comunidad de diseño web y desarrollo en internet online

Stage en Flex 3??

Citar            
MensajeEscrito el 31 Ene 2010 03:38 am
Hola, estoy empezando a utilizar flex y me encontre con un problema, lo que quiero hacer es mover una imagen con las flechas, vi tutoriales en flash que utilizaban action S y quise hacer lo mismo con flex pero cuando compilo me da un error, 1120: Acceso a una propiedad stage no definida
1120: Acceso a una propiedad teclaPulsada no definida
----- etc etc.

El codigo es el sig, que tome de un tutorial para flash
y lo acomode para Flex:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

<mx:Image source="@Embed('Ikki.png')" height="300"
top="30"
left="30" rotation="-10" id="myimg">
<mx:filters>
<mx:DropShadowFilter />
</mx:filters>
</mx:Image>
<mx:Script>
<![CDATA[

import flash.events.Event;

private var flechaArriba:Boolean = false;
private var flechaAbajo:Boolean = false;
private var flechaIzquierda:Boolean = false;
private var flechaDerecha:Boolean = false;

stage.addEventListener(KeyboardEvent.KEY_DOWN, teclaPulsada);

private function teclaPulsada(event:KeyboardEvent):void
{
switch (event.keyCode)
{
case 37 :flechaIzquierda=true;break;
case 38 :flechaArriba=true;break;
case 39 :flechaDerecha=true;break;
case 40 :flechaAbajo=true;break;
}
}

stage.addEventListener(KeyboardEvent.KEY_UP, teclaLiberada);

private function teclaLiberada(event:KeyboardEvent):void
{
switch (event.keyCode)
{
case 37 :flechaIzquierda=false;break;
case 38 :flechaArriba=false;break;
case 39 :flechaDerecha=false;break;
case 40 :flechaAbajo=false;break;
}
}

var tiempo:Timer=new Timer(10,0);
tiempo.start();
tiempo.addEventListener(TimerEvent.TIMER, mover);

private function mover(e:TimerEvent):void
{
if (flechaAbajo==true)
{
myimg.y+=velocidad;
}
if (flechaArriba==true)
{
myimg.y-=velocidad;
}
if (flechaIzquierda==true)
{
myimg.x-=velocidad;
}
if (flechaDerecha==true)
{
myimg.x+=velocidad;
}
}
]]>
</mx:Script>
</mx:Application>

-----------------------------------
Por que me da los errores de no estar definido el stage, el cual entiendo que es toda la pantalla o fondo donde estan todos los objetos, y error de definiciones de todos los metodos creados??

Desde ya les agradesco su respuesta estoy utilizando Flex Development adobe flex builder 3

Por diego_G_09

31 de clabLevel



 

firefox
Citar            
MensajeEscrito el 31 Ene 2010 08:37 pm
el stage esta listo cuando el evento applicationComplete se lleva acabo .. cuando esta listo entonces agrega los listeners , por ejemplo :

Código Flex :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
   applicationComplete="setListeners()">
   
   <mx:Script>
      <![CDATA[
      
         private var speed:Number = 5;
         private var vx:Number = 0;
         private var vy:Number = 0;
         
         public function setListeners() :void
         {
            stage.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown);
            stage.addEventListener(KeyboardEvent.KEY_UP,handleKeyUp);
         }
         
         public function handleKeyDown(e:KeyboardEvent) :void
         {
            switch(e.keyCode)
            {
               case Keyboard.LEFT:
               vx = -speed;
               break;
               
               case Keyboard.RIGHT:
               vx = speed;
               break;
               
               case Keyboard.UP:
               vy = -speed;
               break;
               
               case Keyboard.DOWN:
               vy = speed;
               break;
               
               default:
               break;
            }
            addEventListener(Event.ENTER_FRAME,handleEnterFrame);
         }
         
         private function handleKeyUp(e:KeyboardEvent):void
         {
            vx = 0;
            vy = 0;
            removeEventListener(Event.ENTER_FRAME,handleEnterFrame);
         }
         
         private function handleEnterFrame(e:Event):void
         {
            cImage.x += vx;
            cImage.y += vy;
         }
      ]]>
   </mx:Script>
   <mx:Image source="@Embed('asClassIcon.jpg')" id="cImage" />

</mx:Application>


eso codigos los podrias encapsular en una clase, para tener mas ordenado el code y cumplir con la OOP, para que los listeners se activen debes hacer click en la aplicacion .. :s aun no se por que no se puede poner el focus o una cosa asi, al iniciar la aplicacion , segun yo ya tiene el focus el swf al cargarse en el navegador, si alguien con mas experiencia en Flex que me diga .. ya que tambien estoy empezando con Flex.

Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

firefox
Citar            
MensajeEscrito el 31 Ene 2010 10:36 pm
Gracias por contestar, corregi el codigo y ya no me da errores pero no me anda, o sea la imagen no se mueve, se ve la imagen pero no logro moverla con ningun boton, que error tengo??? este es el codigo:

Repito que el codigo es sacado de un archivo Flash, al cual lo unico que cambie es la imagen.
Podra ser que cuando se quiere mover el fotograma la funcion moverImagen no sirva para Flex 3???


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
applicationComplete="setListeners()">

<mx:Image source="@Embed('Ikki.png')" height="300"
top="30"
left="30" rotation="-10" id="myImg">
<mx:filters>
<mx:DropShadowFilter />
</mx:filters>
</mx:Image>

<mx:Script>
<![CDATA[

import flash.events.Event;

private var flechaArriba:Boolean = false;
private var flechaAbajo:Boolean = false;
private var flechaIzquierda:Boolean = false;
private var flechaDerecha:Boolean = false;

public function setListeners() :void
{
stage.addEventListener(KeyboardEvent.KEY_DOWN, teclaPulsada);
stage.addEventListener(KeyboardEvent.KEY_UP, teclaLiberada);
stage.addEventListener(Event.ENTER_FRAME, moverImagen);
}


private function teclaPulsada(event:KeyboardEvent):void
{
switch (event.keyCode)
{
case 37 :flechaIzquierda=true;break;
case 38 :flechaArriba=true;break;
case 39 :flechaDerecha=true;break;
case 40 :flechaAbajo=true;break;
}
}



private function teclaLiberada(event:KeyboardEvent):void
{
switch (event.keyCode)
{
case 37 :flechaIzquierda=false;break;
case 38 :flechaArriba=false;break;
case 39 :flechaDerecha=false;break;
case 40 :flechaAbajo=false;break;
}
}


// mover con cada fotograma
private function moverImagen(event:Event):void
{
var speed:Number = 5;

if (flechaIzquierda)
{
myImg.x -= speed;
}
if (flechaDerecha)
{
myImg.x += speed;
}
if (flechaArriba)
{
myImg.y -= speed;
}
if (flechaAbajo)
{
myImg.y += speed;
}
}
]]>
</mx:Script>
</mx:Application>

Que es lo que hago mal?

Por diego_G_09

31 de clabLevel



 

firefox
Citar            
MensajeEscrito el 31 Ene 2010 10:49 pm
como te decia cuando hagas el el debugg o test, da click en el swf para que tenga el focus el swf.

Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

firefox
Citar            
MensajeEscrito el 01 Feb 2010 11:56 am
Es que no tengo errores en el codigo simplemente no anda, con el debugg no me puedo dar cuenta cual es el error, el codigo que puse esta correcto? que alguien lo pruebe y que me diga que falta. porque no me doy cuenta por que no me anda.

Por diego_G_09

31 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Feb 2010 04:59 pm
Quita las propiedades "Top" y "Left" al control Image, son inecesarias ya que para que tienes "X", "Y", ahora te recomiendo que actives el ENTER_FRAME al KEY_DOW y al KEY_UP lo remuevas, lo que tu haces es tener un Listener activado aun cuando no puedas estar usando las flechas sigue consumiendo recursos, usa el codigo que te puse es mas optimo.

Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

firefox
Citar            
MensajeEscrito el 01 Feb 2010 07:58 pm
Muchisimas gracias jn_Flash, con tu codigo anda perfecto, te agradesco, disculpa por las molestias, soy nuevo en flex y action script y recien estoy empezando a comprender el lenguaje. gracias!!.

Por diego_G_09

31 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.