Flash CS4. Puzzle deslizante. FileReference.load()
En este ejemplo podemos cambiar la imagen del puzzle por otra local. Para ello hemos utilizado el método load de la clase FileReference (introducido con Flash Player 10).
| Imprimir artículo | Este artículo fue publicado por Luis Estevez el 8 junio 2009 a las 12:15, y está archivado en ActionScript 3, BulkLoader, Flash CS4, TweenLite/TweenMax. Sigue las respuestas a esta entrada a través de RSS 2.0. Puedes dejar un comentario o enviar un trackback desde tu propio sitio. |









hace 4 años
BuenAS,
Una sugerencía.. En esto casos en que cargamos localmente una imagen le metería un Smoothing = true para que no quedé tan pixelada.
Salud
hace 4 años
BuenAS, Dourado:
Pues sí, se me ha pasado. Tenía aplicado el smoothing al bitmap con el que genero las piezas y se me ha pasado aplicarlo al bitmap que utilizo cuando cargo la imagen. Lo corrijo, y lo subo actualizado. Muchas gracias por la observación
.
Típico problema del desarrollador: todas las pruebas las he estado haciendo con imágenes del mismo tamaño del puzzle y no me había dado cuenta.
Otro fallo: no se desactivan los listeners de las piezas cuando se muestra la imagen completa del puzzle.
Un saludo.
hace 4 años
…pues ya estan corregidas ESAS dos cosas; aunque imagino que ahora habré metido algún par de cientos de bugs. Aunque, centrémonos, que lo importarte de todo esto es el método FileReference.load()
. Por cierto, cuando se carga una imagen rectangular, recorto el cuadrado de la esquina superior izquierda. y lo reescalo a 600×600 pixeles (el tamaño del puzzle)
hace 4 años
mola, gracias por compartirlo!
hace 4 años
Hola zap:
Pues nada, a disfrutarlo
El archivo con la imagen NO tiene por qué estar en tu disco duro. Puedes pasarle la url de una imagen pública que esté en Internet. Eso sí, sería conveniente que tuviera un tamaño mínimo de 600×600 píxeles, el tamaño del puzzle; si es más pequeña, se redimensiona a este tamaño y puede aparecer poco nítida por el reescalado.
Un saludo.
hace 4 años
Holaa Luis he viso tus posts y están buenisimos! Te escribo porque quisiera que me ayudaras si no es molestia para ti, estoy haciendo con unos compañeros una página para una fundación de ancianos, pero todos somos ingenieros informáticos, y particularmente yo no tengo conocimiento de como trabajar en flash CS4 y me ha tocado hacer la galería de video e imágenes, me encanto el trabajo de coverFlowGaleryFlashCS4 y el de CameramanSiteFlash, entonces con tu permiso quisiera usarlos para la página pero no se como montar los videos y las fotos que tengo de la fundación, si no es molestia me pudes decir como por favooor=( yo tengo flash cs4 pero no lo se manejar=(
hace 4 años
Hola Jenel:
Pues mira, lo mismo no te hace falta ni abrir Flash. Verás que en la carpeta “bin/xml” tienes un archivo llamado “galeriaImagenes.xml”, editalo y cambia el contenido de la etiqueta “ruta” por la url de la imagen que quieres cargar.
Ahora mismo encontrarás rutas del tipo “images/imagen1.png”. Sólo tienes que cambiarlas por la “carpeta/nombre imagen” que correspondan con las imágenes que vayas a utilizar. Lo que SÍ ES IMPORTANTE es NO CAMBIAR el nombre de las etiquetas ni su estructura, ya que de ser así Flash no podría procesar el xml para encontrar las imagenes.
El de videos es básicamente igual que este, salvo que deberías hacer una captura de pantalla de cada vídeo para mostrarlo en el menú deslizante que aparece abajo. En la etiqueta “img” da la ruta de la imagen que hayas capturado del vídeo; en la etiqueta “video” especifica la ruta del flv correspondiente que se mostrará en el reproductor.
No sé si has trabajado alguna vez con xml’s. Es FUNDAMENTAL cerrar todas las etiquetas, no equivocarte al escribirlas, etc. No es como html, que se te puede olvidar cerrar una etiqueta y sigue visualizandose en el navegador. Aquí hay que ser más cuidadoso, por lo que te recomiendo utilizar algún editor de xml, como Dreamweaver o programa similar.
Al servidor deberías subir TODO lo que está en la carpeta “bin”. Y un consejo, como imagino que no vas a modificar nada, utiliza imágenes de tamaño similar a las de estos ejemplos, sobre todo en el de la galería coverFlow, para que no se te descoloquen demasiado. En el de vídeos da casi igual, ya que se mostrará el vídeo con el tamaño original que tenga.
Un saludo.
hace 4 años
Muchisimas Gracias por tu ayuda y tus recomendaciones, voy tratar de hacer todo lo que me dijiste la verdad es que es primera vez que trabajo con páginas webs yo estoy más en la programación y en redes, pero ya me descargue el Dreamweaver vamos a ver como me va! Les quise hacer la galería en flash para que la página de los ancianos tenga algo interesante pero me preocupa no poder hacerlo! seguire tus instrucciones=)! graciaaaas!
hace 4 años
Oyee ya estoy editando las imagenes y están quedando muy bien! Claro todo es gracias a ti por hacer el diseño! más tarde tomare las capturas del video espero sea tan sencillo como esto, yo se que lo díficil es la parte del diseño pero ese es un dón privilegiado que muchos no lo tienen jeje! No tienes ningún problema con que use esa galería en la página de la fundación? Las viejitas van a estar más contentas cuando vean su galería =D
cuando tengamos todo terminado como dentro de dos semanas aspiro.. te envio el link por aquí para que veas como quedo tu diseño en la página!
hace 4 años
… nada, ningún problema
Lo único, que es público y lo mismo que los has cogido tú, lo puede utilizar cualquier persona que se pase por aquí. Si conoces a alguien que sepa algo de Flash, podrías cambiar un poco los botones de la galería coverFlow, para “personalizarlos” un poco.
hace 4 años
Si es cierto, le pedire ayuda a un compañero! Bueno gracias por todo! Éxitoo!
hace 4 años
BuenAS Luis,
Estoy intentanto hacer aparte de upload de imagen enviar a la vez variables…
Uso el FileReference y algunas cosas más como la clase UploadPostHelper Class de Jonathan Marston y la liberia de Adobe de AS3 para el JPGEncoder…
La parte de subir imagen OK pero lo que no logro de hacer es enviar las VARS..
Dejo parte del codigo:
// defino el bitmapData
var bmd:BitmapData = new BitmapData(imgBrowsed.width, imgBrowsed.height, true, 0xFFFFFFFF);
bmd.draw(paperShow.imgPicked, new Matrix(), null, null, null, true);
var variables:URLVariables = new URLVariables();
variables.titulo = “Going crazy!”;
variables.descripcion = “Me voy de vacaciones, es que ya!”;
variables.nombre = “Peptito Perez”;
variables.slogan = “Peer2peer mola!”;
// creo el jpg byte array con la clase de adobe;
var byteArray:ByteArray = new JPGEncoder(100).encode(bmd);
// creo el nombre del archivo…
m_finalImage = getUniqueName();
// preparo los headers y el request para el upload;
var urlRequest : URLRequest = new URLRequest();
urlRequest.url = createPath ‘?path=’ m_outputPath;
urlRequest.contentType = ‘multipart/form-data; boundary=’ UploadPostHelper.getBoundary();
urlRequest.method = URLRequestMethod.POST;
urlRequest.data = UploadPostHelper.getPostData( m_finalImage m_imageExtension, byteArray );
// por aqui le meto el vars…
urlRequest.data = variables;
urlRequest.requestHeaders.push( new URLRequestHeader( ‘Cache-Control’, ‘no-cache’ ) );
var urlLoader : URLLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
urlLoader.addEventListener(Event.COMPLETE, onCompleteEvent)
urlLoader.load(urlRequest);
function onCompleteEvent(event:Event):void
{
if(urlLoader.data==”ok”)
{
// refresco el contenido…
//refreshContent();
}else{
//ups…
//showError();
}
}
Tienes idea si es posible enviar las dos cosas a la vez? o alguien me echa un cable?
Gracias!
Gracias.
hace 4 años
BuenAS, Dourado:
En el código que has pegado veo que asignas a urlRequest.data las variables y, por tanto, se sobreescribe la anterior asignación:
urlRequest.data = UploadPostHelper.getPostData( m_finalImage m_imageExtension, byteArray );
e imagino que no te llegará la imagen (el byteArray) al php del servidor para guardarlo.
En este enlace:
http://marstonstudio.com/2007/10/19/how-to-take-a-snapshot-of-a-flash-movie-and-automatically-upload-the-jpg-to-a-server-in-three-easy-steps/
se muestra cómo pasar el byteArray y parámetros.
Y otra cosa, en el archivo php es donde se recuperan los parámetros que has pasado y tendrías que hacer… lo que estimes oportuno con ellos. Imagino que lo que quieres es añadir algún tipo de registro en una base de datos para que quede constancia de quién ha mandado la imagen.
Un saludo.
P.D.: Te he leído en Domestika, pero no sé que pasa que me han filtrado y no consigo entrar con Tpmmds (creerán que soy spam por lo que estaba posteando últimamente).
hace 4 años
…en este enlace puedes encontrar ejemplos de la parte de servidor:
http://scoopmedia.be/uploading-files-using-actionscript-30-and-php
Un saludo.
hace 4 años
BuenAS Luis, gracias una vez más!
No me explique bien.
Si quiero solo enviar VARS y pasarlos a php y guardarlos en la bd OK.
Si quiero solo enviar la foto generada en flash al php y guardarla en el server y guardar su ruta en la bd OK.
El problema es hacer las dos cosas al mismo tiempo, en el mismo envio!…
Sé que estoy subscriviendo el urlRequest.data..
El subir la imagen lo hago bien el tema esta en el urlLoader.dataFormat = URLLoaderDataFormat.BINARY; dado que es diferente de hacer request.method = URLRequestMethod.POST;.. y (URLVariables)… loader.data = variables;..
Creo que o no encuentro forma de sumar el byteArray y las URLVariables y mandarlas en el mismo post…
Un saludo y gracias
hace 4 años
BuenAS:
El tercer parámetro del método “getPostData” en principio es para pasar parejas variable/dato en el post. Habría que crear un objeto:
var parametros:Object = {variable:valor…}
y pasarlo como 3º parámetro:
urlRequest.data = UploadPostHelper.getPostData( rutaArchivo, byteArray, parametros );
Esto en principio debería hacer llegar a tu php a través del post una matriz con las variables y sus valores.
Esta clase no la he utilizado nunca ya que depurar php no es mi fuerte
. Para estos casos suelo utilizar AMFphp ya que te puedes enterar desde Flash si han llegado las variables, si se han recuperado, etc.
No estoy seguro, pero creo que el protocolo AMF3 es bastante más eficiente que el método POST para el envío de archivos binarios.
Un saludo, y siento no saber mucho más de esta clase
hace 4 años
BuenAS Luis una vez más,
GRACIAS( )
Sumar las VARS o pasarle un :Object duevuelve al php “algo” un poco chungo…
La solución fue hacerlo en dos pasos. Una vez que confirmo que en el server que se ha subido la foto/img.. hago otro request y le envio las vars.
Sé pero nunca lo he tocado que AMF tienes cosas chulas para enviar y recibir.
Cuando haya tiempo lo quiero tocar!
Por cierto la clase UploadPostHelper tiene sus cosas pero se implementa rapido.
Un saludo
hace 4 años
BuenAS, Dourado:
He subido un ejemplillo con AMFphp, por si te animas con él para otro proyecto. En este ya lo tienes resuelto
Aunque veas muchos archivos en el servidor, realmente sólo se edita (en principio, claro) un sólo php, el que actúa como un servicio para tí, y que se coloca en la carpeta “services”. En este ejemplo, la clase php se llama ByteArrayService.php.
Actualmente sólo guarda la imagen en jpg y le paso el nombre del archivo y la carpeta donde se va a guardar; pero como con AMFphp llamas a una función (en este caso, SaveAsJPEG) podrías añadirle tantos parámetros como necesites. Por ejemplo un array de valores.
Para mí tiene la gran ventaja de que la función a la que llamas te devuelve un resultado: información sobre si todo ha ido bien en el servidor, qué tipo de problema ha surgido, etc. Si te conectas a una base de datos puedes conocer el resultado de la consulta, si se ha actualizado un registro, si se ha borrado correctamente…
Ah! y otra gran ventaja, Internet está lleno de ejemplos, tutoriales y recursos para AMFphp. Casi cualquier cosa que se te ocurra hacer con Flash y un servidor lo vas a tener hecho
Un saludo.
Un saludo.
hace 4 años
Luis GRACIAS!
Me voya mirar lo del AMF.. en AS2 ya me había pasado lo mismo, me lo había recomendado.. ya toca!!
Lo que comentas de que en AMF de que se puede “conocer el resultado de la consulta” eso ya lo estoy haciendo actualmente cuando flash se comunica con el php.. siempre se envian y reciben datos de ambas partes
Lo que yo no sé es si el AMF lo que hace es generar el JPG pixel by pixel. Tu le pasas un array y el construe el jpg… Si hace eso es un proceso muy lento y que pide mucho al server. Y el usario tiene que esperar un buen rato, a veces unos 45segundos hasta ver el resultado..
Una otra formula es la que me estoy serviendo enviando al server un archivo, un byteArray, que en este caso se trata de un JPG, generado por el user/flashPlayer. El unico que hace el server es guardar ese FILE como se tratará de cualquier otro archivo enviado por un formulario normal y corriente.
Saludos y gracias
hace 4 años
BuenAS, Dourado:
AMFphp lo que gestiona es “la transmision”, de hecho creo que utilizo la misma función de php para escribir el archivo en el servidor en el ejemplo que tú, y parte también de un byteArray ya codificado en jpg. En este sentido un método u otro no van a afectar.
Como dices, también con POST puedes enterarte de lo que “responde” php
No me expliqué bien: Con AMF dispones de un “Responder” al que le asignas dos métodos, uno para cuando la conexión tiene éxito y otro para cuando falla. En estos métodos recibes la información y rápidamente puedes ver qué ha pasado en el servidor, o recuperar los datos que te interese.
Un saludo.
hace 3 años
Hola, Mi Flash me dice que no cuenta con la Clase EVENT. Puedes decirme donde consigo esa utileria. GRacias
hace 3 años
Hola Nany:
¿Has modificado algo? Posiblemente se trate de otra cosa y te da este error. La clase Event pertenece al core de Flash; o sea, se instala con Flash, en la biblioteca compilada:
carpeta de instalación/Common/Configuration/ActionScript 3.0/FP10/playerglobal.swc
SEGURO que la tienes. Prueba a descomprimir de nuevo los archivos a ver si te sigue dando el error.
Un saludo.
hace 3 años
Felicitaciones, pagaria por entrar a este bolg, esta excelente.
hace 2 años
Hola! Una Consulta… estoy necesitando usar este proyecto… el puzzle. Pero necesito que la imagen sea de 4 columnas y 3 filas, un total de 12 piezas…
No encuentro donde modificar eso! : (( Me podrías ayudar??
Gracias!!!!!!!!!!!