Maybe someone can help me?
I’m trying to program image transitions with BitmapData, between PNG files that will be dynamically loaded from a folder, and be updated by a PHP system.
I found out a code in the web and adapted for my needs, and it works for images there are within the library. Here’s the code:
import flash.display.*;
import flash.geom.*;
MovieClip.prototype.linearMove = function(dist:Number){
this.walked = 0
this.onEnterFrame = function(){
this._x+=this.velx;
this._y+=this.vely;
this.walked+=int(this.vel);
if(this.walked>dist) {
delete this.onEnterFrame;
this.removeMovieClip();
}
}
}
var imagens:Array = new Array("img01.png","img02.png","img03.png","img04.png");
var imagemAtual:Number = 0;
foto = BitmapData.loadBitmap(imagens[imagemAtual]);
larg = foto.width;
alt = foto.height;
container = this.createEmptyMovieClip("container",1);
container.createEmptyMovieClip("holder", 1); container.holder.attachBitmap(foto, new Matrix()); container.holder._x = 0; container.holder._y = 0;
container.setMask(foto);
function nextImg(where){
if((imagemAtual+1) > imagens.length-1){
imagemAtual = 0;
}else{
imagemAtual++;
}
linhas(imagemAtual);
}
transition = "linhas";
run = setInterval(nextImg, 3000, this);
function linhas(nr){
var trans:BitmapData = BitmapData.loadBitmap(imagens[nr]);
var pieces:Array = new Array();
var area:Number = 1;
var col:Number = 1;
var fil:Number = alt/area;
var p:Point = new Point(0,0);
var counter:Number = 200;
for (var c=0; c<col; c++){
for (var f=0; f<fil; f++){
this[c+"_"+f] = new BitmapData(larg, area, false, 0xFF0000);
t = container.createEmptyMovieClip("MC"+c+"_"+f, counter++);
pieces.push(t);
t.velx = int(Math.random()*10)+5;
t.vely = 0;
t.attachBitmap(this[c+"_"+f], 1);
var px:Number = c*area;
var py:Number = f*area;
t._x = container.holder._x + px;
t._y = container.holder._y + py;
var zone:Rectangle = new Rectangle(px, py, larg, area);
this[c+"_"+f].copyPixels(foto, zone, p);
}
}
container.holder.attachBitmap(trans, 1);
for(var i in pieces) pieces*.linearMove(20);
foto.draw(container.holder)
trans.dispose();
}
With the code above, the transition works. Just put some images in the library, update the ‘imagens’ array, export the images for actionscript and voilá!
Well, my problem is, i wanna do it dynamically. I searched the web for another code, and found out this:
import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Matrix;
import flash.geom.ColorTransform;
function init(){
Stage.align = "TL";
Stage.scaleMode = "noScale";
createEmptyMovieClip("image_mc", 0);
var mcl:MovieClipLoader = new MovieClipLoader();
mcl.addListener(this);
mcl.loadClip("img01.png", image_mc);
image_mc._x = 300;
}
function onLoadInit(target)
{
var width:Number = image_mc._width;
var height:Number = image_mc._height;
var myBitmapData:BitmapData = new BitmapData(width, height, true, 0xFF0000);
myBitmapData.draw(image_mc, new Matrix(), new ColorTransform());
}
init();
A lot simpler, but when I try to put everything altogether, I think i messed up something, because nothing works. My code is down below. Is there anyone out there that can help me?
import flash.display.*;
import flash.geom.*;
MovieClip.prototype.linearMove = function(dist:Number){
this.walked = 0
this.onEnterFrame = function(){
this._x+=this.velx;
this._y+=this.vely;
this.walked+=int(this.vel);
if(this.walked>dist) {
delete this.onEnterFrame;
this.removeMovieClip();
}
}
}
carregaFoto = function(img:Number){
var loadListener:Object = new Object();
image_mc = _root.createEmptyMovieClip("image_mc", 0);
image_mc._y = 300;
var mcl:MovieClipLoader = new MovieClipLoader();
mcl.addListener(loadListener);
mcl.loadClip(_root.imagens[img], image_mc);
loadListener.onLoadComplete = function(mcl:MovieClipLoader) {
var w:Number = image_mc._width;
var h:Number = image_mc._height;
var obj:BitmapData = new BitmapData(300,300);
obj.draw(image_mc, new Matrix());
return obj;
}
}
//Imagens
var imagens:Array = new Array("img01.png","img02.png","img03.png","img04.png");
var imagemAtual:Number = 0;
/*
foto = BitmapData.loadBitmap(imagens[imagemAtual]);
larg = foto.width;
alt = foto.height;
*/
var foto:BitmapData = carregaFoto(0);
container = this.createEmptyMovieClip("container",1);
container.createEmptyMovieClip("holder", 1); container.holder.attachBitmap(foto, new Matrix()); container.holder._x = 0; container.holder._y = 0;
container.setMask(foto);
function nextImg(where){
if((imagemAtual+1) > imagens.length-1){
imagemAtual = 0;
}else{
imagemAtual++;
}
linhas(imagemAtual);
}
transition = "linhas";
run = setInterval(nextImg, 3000, this);
function linhas(nr){
var trans:BitmapData = carregaFoto[nr];
var pieces:Array = new Array();
var area:Number = 1;
var col:Number = 1;
var fil:Number = alt/area;
var p:Point = new Point(0,0);
var counter:Number = 200;
for (var c=0; c<col; c++){
for (var f=0; f<fil; f++){
this[c+"_"+f] = new BitmapData(larg, area, false, 0xFF0000);
t = container.createEmptyMovieClip("MC"+c+"_"+f, counter++);
pieces.push(t);
t.velx = int(Math.random()*10)+5;
t.vely = 0;
t.attachBitmap(this[c+"_"+f], 1);
var px:Number = c*area;
var py:Number = f*area;
t._x = container.holder._x + px;
t._y = container.holder._y + py;
var zone:Rectangle = new Rectangle(px, py, larg, area);
this[c+"_"+f].copyPixels(foto, zone, p);
}
}
container.holder.attachBitmap(trans, 1);
for(var i in pieces) pieces*.linearMove(20);
foto.draw(container.holder)
trans.dispose();
}
Thanks a lot in advance.
Bruno Schweller
www.quimeras.com.br