Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problemas para reproducir un SWF correctamente desde AS3

Iniciado por [EX3], 15 de Marzo de 2012, 04:47:21 PM

« anterior - próximo »

[EX3]

Buenas, gente.

Vengo a comentar un problema que estoy teniendo para incorporar el logo de un sponsor en un juego Flash que hicimos en AS3 con Flixel. El sponsor inicialmente nos paso un *.fla que yo con mis escasos conocimientos de Adobe Flash no logro entender bien como esta organizado. El caso que es con la trial de Adobe Flash CS5 (no compilaba con versiones anteriores, esa es otra) hemos logrado sacar varias versiones del *.fla cada una con un comportamiento diferente. Tenemos una que parece responder a lo que espera el sponsor:

http://dl.dropbox.com/u/10003148/logo_p.swf

El problema ahora es encontrar la manera de poder ejecutar correctamente el SWF embebido dentro del juego en AS3 con Flixel. Desde el player de Flash se ejecuta correctamente el SWF que enlazo antes, pero desde el código del juego se ejecuta tanto la primera vista como la secuencia en si simultáneamente y encima en bucle. Para colmo el audio se ve que es más largo que la secuencia de animación, por lo que si corto el SWF a partir de cierto fotograma desde código dejo el audio sin terminar, lo cual no queda bien.

El código en AS3 para Flixel que estoy usando es este junto a las correcciones de código de los comentarios:
http://stackoverflow.com/questions/5461500/flixel-how-to-load-and-play-an-embedded-swf-file

Luego a nivel de código no he visto forma de decir que no se ejecute en bucle el SWF. No hay forma de controlar esto? Hacerlo controlando los fotogramas tampoco me sirve ya que me devuelve solo 2 fotogramas y deberían ser como unos 100 mas o menos según calcule. Probé también controlando el evento de cuando se completa el audio y no me lo coge. En fin, llevo ya días probando alternativas sin éxito y veo que como no solucione esto el sponsor nos va a mandar a Parla. Si alguno sabe como solucionar esto y nos puede echar un cable seria de muy agradecer.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Josepho

Tienes que importar el SWF y poner class="nombre del simbolo que tiene la animacion" en el codigo le haces un

addchild(movieclip);

if (movieclip.currentframe == movieclip.totalFrames)
{
      movieclip.stop();
      removeChild(movieclip);
}

Y yasta, si no te salen los frames correctos iwal no estas importando el simbolo correcto
Questtracers.com La web de los creadores de Kukoo Kitchen y Easter Avenger!
http://www.questtracers.com

Sepho-blog >Mi blog personal !
http://sepho.blogspot.com

[EX3]

Cita de: Josepho en 15 de Marzo de 2012, 10:49:25 PM
Tienes que importar el SWF y poner class="nombre del simbolo que tiene la animacion"
Supongo que sera symbol y no class el tag que dices:
[Embed(source='../Content/Sponsor/4v4_logos.swf', symbol='Logo')]
private var SwfSymbol:Class;   

Asi lo estoy importando en el codigo y asi me lo importa FlashDevelop cuando le digo importar simbolo del SWF.

Hemos probado todos los simbolos del SWF y todos van mal, cada uno a su manera. Lo de los frames como comento arriba me devuelve mal la cuenta, solo 2 frames.

Me esta comentado un compañero por Google+ que puede ser que el FLA tenga errores y que eso puede estar haciendo que no se ejecute correctamente al compilar en SWF. Si es cierto que la consola de salida de Adobe Flash me suelta errores como este:
TypeError: Error #1034: Error de conversión forzada: no se puede convertir flash.display::Stage@a47af99 en flash.display.MovieClip.
at _4v4_logo_fla::Symbol1_1/frame80()

Esto es ejecutando el simbolo que he indicado arriba, "Logo". ¿Puede tener que ver con esto?

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Josepho

Questtracers.com La web de los creadores de Kukoo Kitchen y Easter Avenger!
http://www.questtracers.com

Sepho-blog >Mi blog personal !
http://sepho.blogspot.com

[EX3]

Lo tenemos, fue lo primero que nos paso (y ejecutandolo desde el editor de Flash estoy viendo el error que cite antes). El problema es que no me entero ni del nodo (no he tocado el editor de Flash desde su versión 7 hara ya 10 años).

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

josepzin

¿Es el logo que me pasó Sipox?? Intenté abrirlo con un Flash CS5 y me decía que era de una versión mas nueva! WTF! :D

jfcampos

Tiene pinta de que el .fla está mal Jose, o que no está todo metido en un sólo movieclip. Puede que lo hayas metido en un tipo "botón" en vez de tipo movieclip. También, revisa que dentro del movieclip no haya sólo 1 frame, porque entonces te dará error. No se me ocurre nada más ahora mismo  ???

[EX3]

Mmm... no se interpretar correctamente los elementos de Flash pero yo diria que hay varias secuencias, al menos cada simbolo tiene lineas de tiempo distintas con varias capas:



Cita de: josepzin en 16 de Marzo de 2012, 12:39:50 AM
¿Es el logo que me pasó Sipox?? Intenté abrirlo con un Flash CS5 y me decía que era de una versión mas nueva! WTF! :D
Si, ese mismo. A mi si me ha abierto el archivo con la trial de Flash CS5, de hecho es que no abre con ninguna version anterior.

Me hace gracia. ¿Que pasaria si hubieramos hecho el juego en Unity3D con su exportador Flash? Como meteriamos el SWF? Mas divertido, si decides desarrollar tu juego en AS3 con Flex SDK + Flixel o sucedaneo por que es gratis y no tienes Adobe Flash CSx y la trial ya la agotaste, ¿que haces? ¿Como compilas el *.fla a *.swf? ¿Y si como en el caso de nuestro grafista, tienes Adobe Flash CS4 y el *.fla esta configurado el formato para abrirse con CS5, como lo haces? A veces se olvidan los sponsors o servicios como Mochibot de que no todos los juegos se desarrollan con el IDE de Flash :-/

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

josepzin

Habeis intentado pedirles un logo en otro formato o en otra versión???

[EX3]

Cita de: josepzin en 16 de Marzo de 2012, 12:58:20 AM
Habeis intentado pedirles un logo en otro formato o en otra versión???
Ese es el unico que tienen y que segun ellos distribuyen a los desarrolladores. Lo mas que conseguimos fue que nos lo pasaran en formato *.swf, que para el caso nos dio igual.

Yo supongo que querran usar ese por que es su logo animado enlazado a su sitio web y con el audio que lo acompaña, mas que tiene el boton ese con el que interactua para iniciar la animacion, por lo que no valdria un *.flv o una imagen estatica.

Salu2...

P.D.: Estoy viendo que como no solucione este marron el lunes nos mandan a tomar vientos y nos quedamos sin publicar el juego :(
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt


[EX3]

jfcampos, te debo una cena cuando subas para Madrid, tio, mil gracias por la ayuda :D

Al final he logrado que se ejecute la animacion, pasando del play y el boton (por lo que veo eso nos lo permite el sponsor, gracias a Dios) y logro que se reproduzca la animación llegando al final, detenerla y dejar el audio de fondo sonar hasta terminar. Ha quedado perfecto :)

Dejo el codigo de mi clase Sponsor extendida con la clase FlxState de Flixel para quien pueda servirle de ayuda en un futuro:
package 
{
import Menu.MenuScreen;
import org.flixel.FlxState;
import org.flixel.FlxG;
import flash.display.MovieClip;
import flash.media.SoundMixer;
import flash.events.Event;

public class Sponsor extends FlxState
{
// SWF embebido y haciendo referencia al simbolo que queremos reproducir:
[Embed(source='../Content/Sponsor/4v4_logo\'snoPLAY.swf', symbol='Logo')]
private var logo:Class;

private var movie:MovieClip = new logo;

private var _event:String = Event.ENTER_FRAME;

// Contador de espera adicional. Como en este caso la animacion es más corta que la duración del audio de fondo implementaremos un
// contador de pasos en el metodo de actualización del objeto estado de Flixel:
private var counter:int = -1;

override public function create():void
{
// Reubicamos la escena en pantalla:
movie.x = 285;
movie.y = 220;

// Añadimos el movieclip a la instancia de Flixel:
FlxG.stage.addChild(movie);

// Añadimos el evento de escucha no al movieclip si no al simbolo que se reproduce (logon no aparece listado por FlashDevelop):
movie.logon.addEventListener(_event, listener);
}

// Evento para controlar el final de la animacion:
private function listener(e:Event):void
{
// Cuando el indice del fotograma actual sea el mismo que el numero de fotogramas del simbolo...
if (e.target.currentFrame == e.target.totalFrames)
{
// Eliminamos el evento del simbolo:
movie.logon.removeEventListener(_event, listener);   

// Detenemos la reproducción del simbolo. El audio seguira reproduciendose:
movie.logon.stop();

// Establecemos un valor al contador para la espera adicional para el audio:
counter = 465;
}
}

// El metodo update controlara el tiempo extra que le damos al SWF para terminar de reproducir el audio de fondo y cambiar al siguiente estado del juego:
override public function update():void
{
// Descontamos un paso en el contador de espera adicional:
if (counter > 0) counter--;

// Cuando el contador llegue a cero detenemos el audio pendiente y eliminamos el movieclip de la instancia:
if (counter == 0)
{
SoundMixer.stopAll();
FlxG.stage.removeChild(movie);

// Saltamos al menu del juego:
FlxG.switchState(new MenuScreen());
}           

super.update();
}
}
}


En este caso mi desconocimiento sobre Flash ha jugado muy en contra mía al igual que no saber que FlashDevelop a veces no lista en el código todos los elementos de un objeto, como en este caso, símbolos del SWF que no lista el explorador de soluciones del IDE.

Gracias a todos por vuestra ayuda y tiempo :)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

josepzin







Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.