home > June 2007
クラス定義でメニュー設定
June 18, 2007
クラス定義の勉強中。簡単なメニューをクラス定義して製作してみました。簡単なサンプルです。
まず、Mymenu.asというクラスを定義する。
class Mymenu {var mc:MovieClip;
//マウスオーバーした時の設定
function btnback( mc:MovieClip , mos:Number , s:Number ):Void {
//マウスがボタンの上下どちらからオーバーしたかを判別する
var mcheight:Number = mc._height/3;
var acell:Number = mcheight/2;if( mos <= acell ){
var point = -mcheight;
}else{
var point = mcheight;
}mc.onEnterFrame = function() {
mc._y += (point - mc._y)/s;
if (Math.abs(point - mc._y) < 0.4) {
mc._y = point;
delete mc.onEnterFrame;
}
}
}//マウスアウトした時の設定
function btnbackOut( mc:MovieClip , mos:Number , s:Number ):Void {
mc.onEnterFrame = function() {
mc._y += (mos - mc._y)/s;
if (Math.abs(mos - mc._y) < 0.4) {
mc._y = mos;
delete mc.onEnterFrame;
}
}
}
}
そして、Flashファイルを作成する。
//インスタンスの生成var menuObj:Mymenu = new Mymenu(menu_mc1.menu_t);
var menuObj2:Mymenu = new Mymenu(menu_mc2.menu_t);
var menuObj3:Mymenu = new Mymenu(menu_mc3.menu_t);
//BTN1設定
this.menu_mc1.onRollOver = function(){
menuObj.btnback( menu_mc1.menu_t, this._ymouse , 3 );
photo_mc.gotoAndStop(2);
_root.mozaicIn();
}
this.menu_mc1.onRollOut = function(){
menuObj.btnbackOut( menu_mc1.menu_t,0, 3 );
}
//BTN2設定
this.menu_mc2.onRollOver = function(){
menuObj2.btnback( menu_mc2.menu_t, this._ymouse , 3 );
photo_mc.gotoAndStop(3);
_root.mozaicIn();
}
this.menu_mc2.onRollOut = function(){
menuObj2.btnbackOut( menu_mc2.menu_t,0, 3 );
}
//BTN3設定
this.menu_mc3.onRollOver = function(){
menuObj3.btnback( menu_mc3.menu_t, this._ymouse , 3 );
photo_mc.gotoAndStop(4);
_root.mozaicIn();
}
this.menu_mc3.onRollOut = function(){
menuObj3.btnbackOut( menu_mc3.menu_t,0, 3 );
}
this.stop();
あとは、ボタンにマウスオーバーされた時の演出を設定する。
function mozaicIn():Void{
var mozaicSize:Number = 100;//初期のモザイクサイズ
var TARGET:MovieClip = photo_mc;//モザイクをかけるMC名
var SMALL:Number = 0.9;//モザイクサイズの縮小率
var DEPTH:Number = 100;//モザイク用のMCの深度import flash.display.*;
import flash.geom.*;
this.createEmptyMovieClip("mozaicInTemp_mc", DEPTH);
mozaicInTemp_mc.onEnterFrame = function():Void{
var mtx:Matrix = new Matrix();
var bmpData:BitmapData = new BitmapData(Math.floor(TARGET._width / mozaicSize),
Math.floor(TARGET._height / mozaicSize), false);
this.attachBitmap(bmpData, 1);
mtx.scale(1 / mozaicSize, 1 / mozaicSize);
bmpData.draw(TARGET, mtx);
this._width = TARGET._width;
this._height = TARGET._height;
this._x = 312.5;
this._y = 20;
if (mozaicSize == 1){
delete this.onEnterFrame;
this.removeMovieClip();
}else{
mozaicSize *= SMALL;
if (mozaicSize <= 1)mozaicSize = 1;
}
}
}
Tweet
The Handshake Company
June 10, 2007
今、話題の握手をしていくあれです。握手でブログとブログをつないていくって企画。企画もおもしろいしキャラクターもかわいくていいですね。
Tweet
sandy Ver2
June 08, 2007
sandyネタでもう一個。3Dにした時の重ね順の設定がよく分からなかったので、インタラクティブに動くようにはできてませんでした。基本はVer1と同じ方法で作成しています。
Tweet
sandy Ver1
Flashで3D処理を扱うためのライブラリsandyを使ってデモをつくってみました!
まずは、ビットマップでそれぞれの面に画像を配置する。
import flash.display.BitmapData;
import sandy.util.DistortImage;
import com.mosesSupposes.fuse.*;
ZigoEngine.register(Fuse, PennerEasing, FuseFMP);var sp:Number = 0;
//角配列
var fakes:Array = new Array();
//角を設定
for(var i=1; i<=8; i++){
fakes.push(this.createEmptyMovieClip("f"+i , i+10));
}
//ビットマップ設定
var bmd1:BitmapData = new BitmapData(photo1._width, photo1._height);
var clip1:MovieClip = this.createEmptyMovieClip("holder1", 100);
var di1:DistortImage = new DistortImage(clip1, bmd1, 5, 5);var bmd2:BitmapData = new BitmapData(photo2._width, photo2._height);
var clip2:MovieClip = this.createEmptyMovieClip("holder2", 110);
var di2:DistortImage = new DistortImage(clip2, bmd2, 5, 5);var bmd3:BitmapData = new BitmapData(photo3._width, photo3._height);
var clip3:MovieClip = this.createEmptyMovieClip("holder3", 120);
var di3:DistortImage = new DistortImage(clip3, bmd3, 5, 5);var bmd4:BitmapData = new BitmapData(photo4._width, photo4._height);
var clip4:MovieClip = this.createEmptyMovieClip("holder4", 160);
var di4:DistortImage = new DistortImage(clip4, bmd4, 5, 5);//関数
function moveFakes():Void{
for(n=1;n<=8;n++){
this["f"+n]._x = p[n]._x;
this["f"+n]._y = p[n]._y;
}
}this.onEnterFrame = function()
{
di1.setTransform(f1._x, f1._y, f2._x, f2._y, f3._x, f3._y, f4._x, f4._y);
di1.texture.draw(photo1);
di2.setTransform(f5._x, f5._y, f6._x, f6._y, f7._x, f7._y, f8._x, f8._y);
di2.texture.draw(photo2);
di3.setTransform(f5._x, f5._y, f1._x, f1._y, f4._x, f4._y, f8._x, f8._y);
di3.texture.draw(photo3);
di4.setTransform(f6._x, f6._y, f2._x, f2._y, f3._x, f3._y, f7._x, f7._y);
di4.texture.draw(photo4);
}
それから、ActionScriptで3Dの物体を回転さす。
初期設定
var Plane:Number =300;
var Rotx:Number = 0;
var Roty:Number = 0.04;var maxc:Number = 8;
var one_circle:Number = 45;p = new Array(maxc+1);
px = new Array(maxc+1);
py = new Array(maxc+1);
pz = new Array(maxc+1);for( n=1 ;n<=maxc; n++){
this.attachMovie("ball","point"+n, n);
p[n] = this["point"+n];
}px[1] = one_circle;
py[1] = one_circle;
pz[1] = one_circle;
~省力~
px[8] = -one_circle;
py[8] = -one_circle;
pz[8] = one_circle;this.dragger.startDrag(true);
~省略~
for (n=1; n<=maxc; n++) {
//X軸回りにY、Z軸を回転させる
var qz = pz[n];
var qy = py[n];
pz[n] = qz*Math.cos(Rotx)-qy*Math.sin(Rotx);
py[n] = qy*Math.cos(Rotx)+qz*Math.sin(Rotx);
//Y軸回りにX、Z軸を回転させる
var qx = px[n];
var qz = pz[n];
px[n] = qx*Math.cos(Roty)-qz*Math.sin(Roty);
pz[n] = qz*Math.cos(Roty)+qx*Math.sin(Roty);
with (p[n]) {
var k = Plane/(Plane-pz[n]);
_x += ((125+px[n]*k) - _x)/0.8;
_y += ((90-py[n]*k) - _y)/0.8;
_xscale = 100*k;
_yscale = 100*k;
}
}for (n=1; n<=maxc; n++) {
this["point"+n]._x = p[n]._x;
this["point"+n]._y = p[n]._y;
}
~省略~
Tweet
dispose()
June 03, 2007
BitmapDataを使うと、結構メモリーをくっているので、それを解放する関数。ちなみに、ビットマップを構成する1つのピクセルを格納するために4バイトのメモリが必要らしいです。つまり、500×500 ピクセルのビットマップを 1 つ作るだけで1MB近のメモリを消費することになります。
myBitmap.dispose()
これで、こまめに開放するように。
Tweet