<ステージの準備>
・ステージ下部に、二つのボタン(インスタンス名copy_btn、reset_btn)を配置する
・ライブラリーにリンケージ名pic1,pic2のイメージを格納する
|
import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Rectangle;
//bitmapData(オブジェクト)のロード
var pict1:BitmapData = BitmapData.loadBitmap("pic1");
var pict2:BitmapData = BitmapData.loadBitmap("pic2");
//ムービークリップインスタンスの作成
var mc1:MovieClip = this.createEmptyMovieClip("mc1", 1);
var mc2:MovieClip = this.createEmptyMovieClip("mc2", 2);
//mcにpictを描画表示
mc1.attachBitmap(pict1,1);
mc2.attachBitmap(pict2,2);
mc2._x = 150;
var rect:Rectangle = pict1.rectangle;//pic1全体
var point:Point = new Point(0, 0);
copy_btn.onRelease = function() {
pict2.copyPixels(pict1,rect,point);//pic1全体をpic2にコピー
};
reset_btn.onRelease = function() {
pict2 = BitmapData.loadBitmap("pic2");
mc2.attachBitmap(pict2,2);//元のpic2に戻す
}; |
Aのイメージ全体にCのアルファチャンネルデータを加えてBにコピーする
構文: imageA.copyPixels(imageB, rect, point, alphaBitmap, alphaPoint, true);
alphaBitmapはアルファチャンネルを持つimageCのBitmapData、
alphaPointはalphaBitmap内の適用する範囲の座標 、trueはアルファチャンネルを使う(falseは使わない)
|
<ステージの準備>
・上の例と同様にcopy_btn、reset_btn、
pic1、pic2を準備する
・アルファチャンネルを持つビットマップ
(ここでは同じ大きさで、円形の
グラデーション型アルファチャンネルを持つ
ビットマップ、リンケージ "ra")
をライブラリーに格納 |
| |
import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Rectangle;
var pict1:BitmapData = BitmapData.loadBitmap("pic1");
var pict2:BitmapData = BitmapData.loadBitmap("pic2");
var alphaBitmap:BitmapData = BitmapData.loadBitmap("ra");//アルファチャンネルを持つイメージのBitmapDataをロード
var mc1:MovieClip = this.createEmptyMovieClip("mc1", 1);
var mc2:MovieClip = this.createEmptyMovieClip("mc2", 2);
mc1.attachBitmap(pict1,1);
mc2.attachBitmap(pict2,2);
mc2._x = 150;
var rect:Rectangle = pict1.rectangle;
var point:Point = new Point(0, 0);
copy_btn.onRelease = function() {
pict2.copyPixels(pict1,rect,point,alphaBitmap,point,true);//pict2にalphaBitmapのアルファチャンネルをプラスしてpict1をコピー
};
reset_btn.onRelease = function() {
pict2 = BitmapData.loadBitmap("pic2");
mc2.attachBitmap(pict2,2);
}; |
|
Aのイメージの一部分(矩形)をBの設定位置(Point)にコピーする
構文:上記例に同じ rectで指定サイズの矩形を定義し、pointでコピー先の位置を指定する
この例では、イメージAを5列5行で25分割し、イメージB(Aと同じ大きさの空の矩形)の同位置に時間差をつけてコピーさせている |
<スクリプトの説明>
var pict2:BitmapData = new BitmapData(150, 150, false, 0x000000);
pict2は150*150の黒色矩形で透明度を使わない
rx = w/col*((i-1)%col);
ry = h/row*(Math.floor((i-1)/col));
i 番目の分割矩形のビットマップの左上を起点とした座標で、コピー元、先でrect、pointに同じ値を使っているので同じ位置にコピーされる
_root["rect"+i] = new Rectangle(rx, ry, w/col, h/row);
コピー元分割矩形のRectangleを定義
_root["point"+i] = new Point(rx, ry);
コピー先矩形のPointを定義
pict2.copyPixels(pict1,_root["rect"+n],_root["point"+n]);
pict2の分割矩形のコピー
|
import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Rectangle;
var pict1:BitmapData = BitmapData.loadBitmap("pic1");
var pict2:BitmapData = new BitmapData(150, 150, false, 0x000000);
var mc1:MovieClip = this.createEmptyMovieClip("mc1", -1);
var mc2:MovieClip = this.createEmptyMovieClip("mc2", -2);
mc1.attachBitmap(pict1,-1);
mc2.attachBitmap(pict2,-2);
mc2._x = 150;
w = h=pict1.width;
col = 5;
row = 5;
for (i=1; i<=col*row; i++) {
rx = w/col*((i-1)%col);
ry = h/row*(Math.floor((i-1)/col));
_root["rect"+i] = new Rectangle(rx, ry, w/col, h/row);
_root["point"+i] = new Point(rx, ry);
}
n = 1;
function copyPart() {
pict2.copyPixels(pict1,_root["rect"+n],_root["point"+n]);
if (n>=col*row) {
clearInterval(ID);
n = 1;
} else {
n++;
}
}
copy_btn.onRelease = function() {
ID = setInterval(copyPart, 70);
};
reset_btn.onRelease = function() {
pict2 = new BitmapData(150, 150, false, 0x000000);
mc2.attachBitmap(pict2,-2);
}; |
Aのイメージの一部分をムービークリップの入れ子になっているビットマップにコピーする
この例では、イメージAを5列5行で25分割し、それぞれを25のムービークリップ内のビットマップにコピーする
こうすることによって、コピーされた一つ一つのムービークリップが移動、回転、拡大・縮小などができるようになる
ここでは、まず全ての分割された矩形を中央にコピーし、次いで、本来の場所に移動させている。 |
<スクリプトの説明>
part_mc = this.createEmptyMovieClip("part"+i, i);
part_mc.bitmap = new BitmapData(w/col, h/row, false, 0x000000);
空のムービークリップインスタンスを作成し、その中にBitmapDataを入れる
part_mc._x = 150+60;
part_mc._y = 60;
全てのムービークリップを中央に
mc.bitmap.copyPixels(pict1,mc.rect,mc.point);
それぞれのムービークリップ内ビットマップにpict1を切り分けたビットマップをコピーする
|
import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Rectangle;
var pict1:BitmapData = BitmapData.loadBitmap("pic1");
var pict2:BitmapData = new BitmapData(150, 150, false, 0x000000);
var mc1:MovieClip = this.createEmptyMovieClip("mc1", -1);
mc1.attachBitmap(pict1,-1);
var w = h=pict1.width;
var col = 5;
var row = 5;
main();
function main() {
for (i=1; i<=col*row; i++) {
rx = w/col*((i-1)%col);
ry = h/row*(Math.floor((i-1)/col));
part_mc = this.createEmptyMovieClip("part"+i, i);
part_mc._x = 150+60;
part_mc._y = 60;
part_mc.bitmap = new BitmapData(w/col, h/row, false, 0x000000);
part_mc.rect = new Rectangle(rx, ry, w/col, h/row);
part_mc.point = new Point(0, 0);
}
}
n = 1;
function copyPart() {
mc = _root["part"+n];
mc.bitmap.copyPixels(pict1,mc.rect,mc.point);
mc.attachBitmap(mc.bitmap,n);
if (n>col*row) {
clearInterval(ID);
n = 1;
toPosition();
} else {
n++;
}
}
function toPosition() {
onEnterFrame = function () {
for (i=1; i<=col*row; i++) {
mc = _root["part"+i];
rx = w/col*((i-1)%col);
ry = h/row*(Math.floor((i-1)/col));
mc._x += (150+rx-mc._x)/5;
mc._y += (ry-mc._y)/5;
}
};
}
copy_btn.onRelease = function() {
ID = setInterval(copyPart, 100);
};
reset_btn.onRelease = function() {
delete onEnterFrame;
main();
}; |
Aのイメージの一部分をムービークリップの入れ子の入れ子になっているビットマップにコピーする
コピーされたムービークリップに回転を施す場合、ムービークリップの基準点が左上になっているので基準点が中心になるように、
補正するためにこのようなことをする(scriptでも可能であるようだが、わかりやすいクラシックな方法をとる) |
<ステージの準備>
・250*250、背景黒(好みで)、12fpsのステージ
・250*250の写真2枚をライブラリーにインポートし、リンケージをpic1,pic2とする
(写真の枚数は増やすことも可能、写真を外部ファイルにして順次読み込む方法は、以下を参照のこと)
「切り分けられた小部分画像がランダムに消失するスライドショー」
<スクリプトの説明>
var cell = this.createEmptyMovieClip("cell"+i,i)
cell.createEmptyMovieClip("part_mc",i)
cell.part_mc._x = -w/col/2;
空のムービークリップcellを作成し、その中にpart_mcを作成し、part_mcの位置をx方向に短冊幅の1/2だけずらす
(基準点がx軸方向の真中に来るようにする)
cell.part_bitmap.copyPixels(pict1,cell.rect,point);
cell.part_mc.attachBitmap(cell.part_bitmap,i);
cellの中のビットマップにコピーし、
cell.part_mcに描画する
function flip(mc, n) {
この部分は、「(68)ムービークリップの変形にMatrixを使ってみる(2)」を参照のこと
|
import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.geom.Matrix;
var pict1:BitmapData = BitmapData.loadBitmap("pic1");
var pict2:BitmapData = BitmapData.loadBitmap("pic2");
var w = h=pict1.width;
var col = 10;
var row = 1;
for (i=1; i<=col*row; i++) {
var rx = w/col*((i-1)%col);
var ry = h/row*(Math.floor((i-1)/col));
var cell = this.createEmptyMovieClip("cell"+i,i)
cell._x = rx;
cell._y = ry;
cell.createEmptyMovieClip("part_mc",i);
cell.part_mc._x = -w/col/2;
cell.part_bitmap = new BitmapData(w/col, h/row);
cell.rect = new Rectangle(rx, ry, w/col, h/row);
point = new Point(0, 0);
cell.part_bitmap.copyPixels(pict1,cell.rect,point);
cell.part_mc.attachBitmap(cell.part_bitmap,i);
cell.num = i;
flip(cell,cell.num);
}
function flip(mc, n) {
var rd = -Math.PI;
var speed = 0.04*Math.PI;
var j = 1;
mc.onEnterFrame = function() {
if (rd>=0) {
if (j>1) {
j = 1;
} else {
j++;
}
pict = _root["pict"+j];
mc.part_bitmap.copyPixels(pict,mc.rect,point);
rd = -Math.PI;
}
rd += speed;
var a = -1*Math.sin(rd);
var b = 0.5*Math.cos(rd);
var myMatrix:Matrix = new Matrix(a, b, 0, 1, w/col*(n-1/2), 0);
this.transform.matrix = myMatrix;
};
} |
|