attachBitmapしたMovieClipをremoveMovieClipしても、BitmapDataはメモリを圧迫し続ける。
BitmapData.dispose(); をしてから、MC.removeMovieClip(); する癖を。
Archive for the AS2 Category
AS2 : Bitmapとメモリリーク
2007.12.20 Category : AS2AS2 : Fuse Kitのパラメータ、Number型とString型の違い
2007.06.25 Category : AS2A. mc.slideTo(-100, 0, 1, "easeOutQuad", 0.5); = Number型の場合は座標(絶対値)
B. mc.slideTo("-100", "0", 1, "easeOutQuad", 0.5); = String型の場合は移動量(相対値)
※Tweenクラス使っても同じ。
AS2 : イベントの委譲とDelegateクラス
2007.06.12 Category : AS2Delegateの使い方のまとめ。
– Sample.BtnClass.as -
class BtnClass{ var mc:MovieClip; public function BtnClass(target_mc:MovieClip){ mc = target_mc; mc.onPress = Delegate.create(this,pressFunc); } private function pressFunc():Void{ mc.gotoAndStop("hover"); }}
このときのthisはBtnClassのインスタンスを指している。
mc(=target_mc)のonPressイベントをBtnClassのインスタンスに移譲している、という考え方。
AS2 : popup && fullscreen まとめ
2007.02.21 Category : AS2flashからポップアップでフルスクリーンflashを開く場合、ExternalInerfaceクラスを使う。
フルスクリーンを呼び出す側に以下を記述。
import flash.external.*;
ExternalInterface.call(window_open):Void;
javascript側のfunction window_open()は通常のフルスクリーンポップアップを表記する。
※Macの場合はDockの"自動的に隠す"機能がonになってないと、Dockの上端までのフルスクリーン表示となる。
2007.10.02追記
ExternalInterfaceクラス使用時でSafariのポップアップブロックがかかっているとfullscreenが開かない。
→ やはりgetURLで対応か。要調査。
AS2 : Math.atan2がNaNにならないために
2007.01.14 Category : AS2nX=2点間のX軸の距離
nY=2点間のY軸の距離
nD=2点間の角度
nD=Math.atan2(nY,nX);
このときに、
nX,nXが0だとMac OSXの場合、Math.atan2がNaNになってしまう。
(Windowsの場合は0)
[ Measure ]
以下の条件分岐を。
if(nX==0&&nY==0){
nD=0;
}else{
nD=Math.atan2(nY,nX);
}
AS2 : FlashMXMX2004のクラス定義
2006.11.08 Category : AS2[ ■定義の基本 ]
//コンストラクタ関数
function myClass{
}
//インスタンスの生成
new myClass();
[ ■プロパティ、メソッドを定義 ]
function myClass(A,B){
this.propertyA=A;
this.propertyB=B;
this.methodA=function(){
//methodAの内容
};
}
※function文による関数の定義=関数オブジェクトを生成している
→prototypeはその関数オブジェクトのプロパティ
→prototype=まっさらなベース。そこにプロパティ、メソッドが追加されていく
※一旦、コンストラクタを閉じる。その後でprototypeプロパティの定義
↓
function myClass(A,B){
this.propertyA=A;
this.propertyB=B;
}
myClass.prototype.methodA(or propertyC)=function(){
//methodA(or proertyC)の内容;
}
[ ■オーバーライド ]
fuction myClass(A,B){
this.propertyA=A;
this.propertyB=B;
}
myClass.prototype.methodA=function(){
//methodA;
}
↓ //ここからオーバーライド
new myClass(A,B);
myClass.methodA=function(){
new_methodA;
}
[ ■スーパークラスとサブクラス ]
function myClass(A,B){
//myClassの定義
}
myClass.prototype=new MovieClip();
//MovieClipクラスを継承
[ ■既存のクラスのprototypeをいじってオリジナルに ]
MovieClip.prototype.onEnterFrame=function(){
this._xscale+=2;
}
:プロトタイプでイベントハンドラメソッドを定義しても可
[ ■Object.registerClass(); ]
定義したクラスを使うにはムービークリップシンボルとリンクさせる必要がある。
1. シンボルに識別子をつける(ActionScriptに書き出し)
2. Object.registerClass("識別子",クラス名);
※2のスクリプトが記述される前に配置されたインスタンスは関係なし
[ ■super ]
コンストラクタ関数内でスーパークラスのメソッド(a)、コンストラクタ関数(b)を呼び出せる
a. super.methodA(parameter);
b. super(parameter);
[ ■addProperty/getter/setter ]
bSuccess(true/false) = targetObject.addProperty(プロパティ名,getter関数,setter関数);
↓
getter,setterを使うプロパティを定義する
function Seihokei(size){
this.size=size;
this.addProperty(menseki,getMneseki,null);
}
//getter関数
Seihokei.prototype.getMenseki=function(){
return(this.size*this.size);
}
※setterがnullなら、読み取り専用プロパティ
※getterは値を返す関数
※setterは引数をとる関数(パラメータを渡す関数)
※このメソッドが成功すればtrue,エラーならfalseを返す
AS2 : 入れ子のボタンの親と子にイベントハンドラを設定するなら
2006.11.02 Category : AS2出典:Macromedia Flash 非公式テクニカルノート
onハンドラを使わず、RollOver,RollOutを検知する。
// MovieClip: ロールオーバー/ロールアウトを検出
// MovieClipアクション
onClipEvent (load) {
bOut = true; // [1] 変数の初期値設定
}
onClipEvent (enterFrame) {
// [2] マウスポインタ座標の重なり判定
if (this.hitTest(_root._xmouse, _root._ymouse, true)) {//trueは塗りと線部分の判定。falseは境界ボックス
if (bOut == true) { // [3] その前にインスタンス外だったかの判定
trace("rollOver"); // RollOver時の処理
bOut = false; // [4] 変数値の更新
}
} else {
if (bOut == false) { // [5] その前にインスタンス上だったかの判定
trace("rollOut"); // RollOut時の処理
bOut = true; // [6] 変数値の更新
}
}
}
※RollOver/RollOut時に親のボタンが移動する場合などは、onEnterFrameでRollOverとRollOutの判定が繰り返されるので注意(チラチラと行ったり来たりの処理を繰り返すなど)。
その場合は、移動中かどうかのフラグを立てて、
if(bOut==true&&moveFlag==false){………};
といった処理で対応。
もっと良い手がある多分
AS2 : ダイナミックテキストが消える理由
2006.11.02 Category : AS2読み込んだ外部swfに、さらに外部textを読み込むときなど。疑うべきはまず、
1. 読み込んだ外部swfの絶対指定。外部textを読み込むインスタンスのパス指定など。
2. ダイナミックテキストを置いたレイヤーにマスクがかかってないか。マスクによって表示されるのは、グラフィックデータのみ。単なるコードであるダイナミックテキストは、フォントを埋め込まない限りマスクされてしまう。
3. 全てはsetMask() で対処する。コンポーネントのテキストも同じく消滅するので要注意。
AS2 : いろいろ備忘録
2006.10.20 Category : AS2[ ラジアン←→度の変換]
Degree = Radian * (180 / Math.PI);
Radian = Degree * (Math.PI / 180);
AS2 : hitTest()
2006.08.09 Category : AS2[ MovieClip.hitTest() ]
public hitTest(x:Number , y:Number , [shapeFlag:Boolean]) : Boolean
public hitTest(target:Object) : Boolean
ムービークリップを評価して、それがtargetまたはx,y座標で示されるヒット領域と重なっているかを確認する。
shapeFlagがtrue → 指定したインスタンスのシェイプ全体を評価。
shapeFlagがfalseの場合 → 指定したインスタンスの境界ボックスだけを評価。
※shapeFlagはx,y座標でヒット領域を指定する場合のみ指定可能。
※BitmapクラスにもhitTest()メソッドがある。
AS2 : eval()
2006.08.09 Category : AS2[ eval() ]
format : eval(expression);
expressionが変数またはプロパティの場合 → 変数またはプロパティの値を返す
expressionがObjectまたはMovieClipの場合 → 参照を返す = 文字列を参照に変換
AS2 : String.indexOf()とString.lastIndexOf()
2006.08.07 Category : AS2indexOf
format : public indexOf(value : String [,startIndex : Number]) : Number
operation : ストリング内を検索し、ストリング内の startIndex 以降の位置で見つかった最初の value の位置を返す。見つからない場合は-1を返す
lastIndexOf
format : public lastIndexOf(value : String [,startIndex : Number]) : Number
operation : ストリングを右から左へと探し、ストリング内で startIndex の前に見つかった最後の value のインデックスを返す(=indexなので左からの位置)。見つからない場合は-1を返す
AS2 : String.substring()とString.substr()
2006.08.03 Category : AS2substring
format : public substring(start : Number,end : Number) : String
operation : 文字列をstartからendまで抜き出す
sample : str = “actionscript”. substring(6,12); → str = “script”
substr
format : public substr(start : Number,length : Number) : String
operation : 文字列をstartからlength分抜き出す
sample : str = “actionscript”. substr(6,6); → str = “script”