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;
    }
  }
}



Permalink | Comments (0)

The Handshake Company

June 10, 2007

今、話題の握手をしていくあれです。握手でブログとブログをつないていくって企画。企画もおもしろいしキャラクターもかわいくていいですね。


Permalink | Comments (0)

sandy Ver2

June 08, 2007

sandyネタでもう一個。3Dにした時の重ね順の設定がよく分からなかったので、インタラクティブに動くようにはできてませんでした。基本はVer1と同じ方法で作成しています。





Permalink | Comments (0)

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;
}
~省略~


Permalink | Comments (0)

dispose()

June 03, 2007

BitmapDataを使うと、結構メモリーをくっているので、それを解放する関数。ちなみに、ビットマップを構成する1つのピクセルを格納するために4バイトのメモリが必要らしいです。つまり、500×500 ピクセルのビットマップを 1 つ作るだけで1MB近のメモリを消費することになります。

myBitmap.dispose()

これで、こまめに開放するように。


Permalink | Comments (0)