flashの最近のブログ記事

icon_smoking_mcというMCをクリックすると、これがフレーム2になり、
map2_mc.smoking01を0.3秒ごとに1フレーム2フレームきりかえ
5回点滅で完了という動き。

icon_smoking_mc.addEventListener(MouseEvent.CLICK,pointSmoking);
function pointSmoking(e:MouseEvent){
var c_smoking = 1;
icon_smoking_mc.gotoAndStop(2);
var setIDName:Number = setTimeout(sample, 300);
function sample():void {
if(c_smoking < 10){
c_smoking += 1;
map2_mc.smoking01.gotoAndStop(c_smoking%2+1);
clearTimeout(setIDName);
setIDName = setTimeout(sample, 300);
}else{
icon_smoking_mc.gotoAndStop(1);
map2_mc.smoking01.gotoAndStop(1);
}
}
}

HTML側の記述は
http://www.two-ways.com/mt/usakorog/2005/10/htmlflash.html
に記載。


例として、
○○.swf?start=5
のようにstartという変数に5という値が入ってきたとします。


■FLASHでのパラメータ取得
loaderInfo.parameters
で取得できます。


loaderInfo.parameters.start
と書いたり、
var flashVars:Object = loaderInfo.parameters;
flashVars['start']
と書いたりしてstartに入ってきた値を利用できます。


■FLEXでのパラメータ取得
parameters.start
で取得できます。
parameters.start
と書いたり、
var flashVars:Object =parameters;
flashVars['start']
と書いたりしてstartに入ってきた値を利用できます。


FLEXの場合、loaderinfoはnullになっちゃうので、注意!(ハマってしまった)

flashとPHPで連携させてファイルをアップするとき、PHPでファイルのアップ状況を
成功したら、
code=1

失敗したら、
code=0&errmsg=エラーメッセージ
で返す時に、そのデータの受け取り方。

uploadCompleteData、e:DataEvent、e.dataがポイント


■ソース(必要部分のみ一部抜粋)
private var fileRef:FileReference = new FileReference();
private function Init():void{
bt_fileup.addEventListener(MouseEvent.CLICK,fileBrowseHandler);//ボタンクリック
fileRef.addEventListener(Event.SELECT, fileSelectHandler);//選択終了
}

//ファイル選択
private function fileBrowseHandler(event:Event):void{
try {
var success:Boolean = fileRef.browse();
} catch (error:Error) {
//エラー処理
}
}
//ファイルアップ
private function fileSelectHandler(event:Event):void {
try {
var request:URLRequest = new URLRequest("upload.php");
request.method = URLRequestMethod.POST;
fileRef.upload(request, "file", false);
fileRef.addEventListener("uploadCompleteData", fileCompleteHandler);
} catch (error:Error) {
//エラー処理
}
}

//アップ完了
private function fileCompleteHandler(e:DataEvent):void {
var v:URLVariables = new URLVariables(e.data);
if(v.code == 1){
textmessage.text = "ファイルのアップロードに成功しました。";
}else if(v.code==0){
textmessage.text = v.errmsg;
}
}

プログレスバーの
何もしなければ「ロード中 ○○%」の表記

この文字はlavelで設定できます。

flashだったらスクリプトで
my_pb.label = "%1 of %2 KB loaded";
my_pb.label = "%1 %% loaded";
など

FLEXだったらこんなかんじ。
<mx:ProgressBar id="my_pb" label="アップロード中 %1 %%"/>

AS3で、ファイルアップ/ダウンロード時の読み込みバイトを取得する方法。

private function fileProgressHandler(event:ProgressEvent):void {
fileStatusText.text = event.target.bytesLoaded;
}

で動かないなぁと思っていたけれど、正しくは
private function fileProgressHandler(event:ProgressEvent):void {
fileStatusText.text = event.bytesLoaded;
}


event.target.bytesLoadedではなく、event.bytesLoadedです。

bytesTotalに関しても同様。

toString(num)で変換可能。

変換前の値はNumberで、変換後はStringになります。

a = 9;
b = a.toString(2); //9を2進数に変換 1001
c = a.tiString(8);  //9を8進数に変換 11

色の変換を行う時に便利。
r = 250;
g = 128;
b = 114;
rgb = "0x"+r.toString(16)+g.toString(16)+b.toString(16); //0xFA8072になります。

考えて作ったflashのローディングバー。
せっかく作ったのに一瞬で消えるので、ちゃんと見せたい!という時のために。
(下記スクリプトはloadingバーの幅が138のものです。)


_root.loading_mc.onEnterFrame = function(){
_root.per = Math.ceil(_root.getBytesLoaded()/_root.getBytesTotal()*100);
if(_root.bar<100){_root.bar +=2;}
_root.loading_mc.redbar_mc._width = Math.min(per*138/100,_root.bar*138/100);
if(_root.per==100 && _root.bar==100){
_root.play();
}else{
_root.gotoAndPlay(2);
}
}

HTTPでアクセスした場合には普通に動くのに、HTTPSでアクセスすると不具合がおこることがあります。 1)埋め込みタグのhttpをhttpsにする。

<object>と<embed>に記述されている「codebase="http://download.macromedia.com/〜」と「pluginspage="http://www.macromedia.com/」を「codebase="https://download.macromedia.com/〜」と「pluginspage="https://www.macromedia.com/」にします。 2)send_lv.sendAndLoadを使っているときにIEでおかしくなる。 IEのキャッシュとか、FLASHのキャッシュっていろいろ変な挙動多いから相互作用?? 制作の構成によると思いますが、下記の[1]〜[3]をやれば無事に動きました。 構成はphpのページの中でswfを読み込んでおり、swfからphpへデータを取りにいっています。

[1]phpでのキャッシュを防ぐ session_cache_limiter('private_no_expire'); [2]ページからswf読み込み時のキャッシュを防ぐ swfの読み込みに乱数をつける graph.swf?r=<php $rda = rand(0,10000); print$rda ?>
[3]swfからphpデータ読み込み時のキャッシュを防ぐ var ran = Math.random(10000); var send_lv:LoadVars = new LoadVars(); send_lv.answer = 1; send_lv.r = ran; var load_lv:LoadVars = new LoadVars(); load_lv.onLoad = function(success) { _root.status = load_lv.status; }; send_lv.sendAndLoad("setdata.php", load_lv, "GET"); この場合、 setdata.php?answer=1&r=乱数 ということになります。

【状況】
main.swfにsub.swfが読み込まれている。
main.swfの変数 sampleをsub.swfから取得したい時

■AS2まで
_root.sample

■AS3
stage.getChildAt(0).sample;

【解説】
AS2までは、sub.swfの_rootは、main.swfの_rootになってたけど、AS3では、sub.swfのrootはsub.swfのrootになりました。
sub.swfのstageは、読み込み元のmain.swfのstageとなる。
そこで、stageの子(変わったことしてなければ1つしかないです。)をstage.getChildAt(0)で呼び出すと、これがmain.swfのroot(メインタイムライン)になるので、そこから取得。

PHPの場合
$str = substr($str, -4);

で右から4文字抜き出せます。

FLASHの場合
STR = STR.substr(STR.length-4,4);