ExternalInterfaceでつまづく

swfとjavascript間で通信するためのクラス
ExternalInterface Class でつまづいたのでメモ

かるくつまづいた 1

allowScriptAccessをsameDomainかalwaysにしないと
swfとjavascript間で通信できない。
追加先
parameタグ/embededタグ(アトリビュート)

まあまあつまづいた 2

objectタグのidの名前に"extanal"の文字列
例)"objextanal","extanalObj","myextanalObj"

を加えないとIEで
swfからjavascriptの関数を呼び出せるが戻り値がnullになって返ってくる。

注意!!
id名が重複すると最初に表示されたもの以外はnullになるみたい
複数同じswfをページくつける場合は動的はidを用意してください

ExternalInterface.call Internet explorerでnullが返ってくる件
http://quality.ekndesign.com/archives/2006/07/externalinterfa.html

かなりつまづいた 3

これもIE系
IEはIE8だけなくとも通信できた気がする・・・(あいまい)

objectタグに

classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"

csとかでパブリッシュすればタグにデフォルトで含まれてるんだけどね

これがないと
swfからjavascriptの関数を呼び出せるが戻り値がnullになって返ってくる。

そもそもclassidってなんだよとかおもったけど
ブラウザの ActiveX コントロールを識別します。だそうだ。

こんなんだから
ExternalInterface Classは嫌いというか苦手意識がつくよね。

参考になったページです
ExternalInterfaceとかの落とし穴まとめ
http://0-9.sakura.ne.jp/blog/archives/2008/04/14224435.html
ExternalInterfaceを使ってみる (2)
http://www.project-nya.jp/modules/weblog/details.php?blog_id=644

Tags:

flashの情報をローカルで保存してみよう

flashでクッキーを使いたい場合
SharedObjectクラスを使うと大変便利ですよ

いままで使ったことなかったけど、
意外とお手軽だね。

わかりづらいけどリロードした後
選択した項目に印がついたままならローカルに情報が保存されています。

ちなみに配列を保存することもできます。

そして下がソースです

var sObj:SharedObject = SharedObject.getLocal("flag");

//ステージ上に配置したラジオボタンの名前
var rgBtn:Array = [point0, point1, point2];

// マウスリスナーオブジェクト
var mouseListener:Object = new Object();

if (sObj.data.flag != undefined)
{
rgBtn[sObj.data.flag].selected = true;
}
//マウスダウンイベントを受け取った時
mouseListener.onMouseDown = function() {
var nCount:Number = 0;
while (nCount < rgBtn.length) {
if (rgBtn[nCount].hitTest(_xmouse, _ymouse, false))
{
sObj.data.flag = nCount;
break;
}
nCount++;
}
};

Mouse.addListener(mouseListener);

flashlite2.0から利用できるから携帯でもきっと活躍できるよ!

ドコモ以外だけどね!

ドコモはクッキー使えないし、
flashlite1.1から2.0とばして最近3.0だから
実際まだまだflashで携帯サイトは作りたくないよねー

Tags: ,

Tweenerをつかってみよう 2

なんか久しぶりにflashを作ることになりそう(しかもas2.0で)
せっかくなのでTweener使ったろうと思いさらっとチェックしてみよう。

お題は
【Tweenerペジェ線をスクリプトで描画してみよう!】

ペジェ線でうごかせるんだねTweener
おもすれー

まずはCurveModifiersをインポート

import caurina.transitions.properties.CurveModifiers;

ふむふむ参照サイトによると
_bezier配列に座標を設定してやると、その点を「ベジエ曲線軌道のコントロールポイント」とした、トゥイーンが行なわれます。

ふむふむ。
CurveModifiers.init();
はとりあえず入れとけばいいのか。

では
さっそくいっちょas2.0で書いてみよう!

ソース

import caurina.transitions.Tweener;
import caurina.transitions.properties.CurveModifiers;
CurveModifiers.init();

//myMcはステージ上に配置したムービークリップ
myMc._x = 40;
myMc._y = 100;
var xpos:Number = myMc._x;
var ypos:Number = myMc._y;

function pointDrow():Void {
lineStyle(2,0xff0000,100);
moveTo(xpos,ypos);
lineTo(myMc._x,myMc._y);
xpos = myMc._x;
ypos = myMc._y;
}

myMc.onPress = function():Void {
Tweener.addTween(myMc,{_x:460, _y:100, _bezier:[{_x:266, _y:212}, {_x:134, _y:57}, {_x:81, _y:206}], time:5, transition:"linear"});
var timer:Number = setInterval(pointDrow, 10);
};

こんな感じで結果がこれです
※くろぽちを押してみて

いいね、
マスクにつかっても面白いし。

参照URL
AS3でTweener 1.31.67を使う
Tweener Transition sheet
Tweener Documentation and Language Reference
Tweenerをつかってみよう 1

Tags: ,