カテゴリー: adobe

xmlから画像を読み込んでスライドショウ.flaのflowメモ

よくわからなくなって来たので文章にしてみる。

  1. xml読み込む
  2. xmlから必要な情報を配列にセット(画像のurl、表示時間、切り替え時間?)
  3. 画像ロード
  4. 読み込んだ画像を順にビットマップ化しsmoothing=true;
  5. 全部読み込んだかの確認?

ここまでが初期設定になるのかな

今回Tweenerというのを初めて使ってみるので触りだけ勉強してみた、ライブラリってテンションが上がる。

スライドショウにする仕組みはどうするんだろう?
読み込んだ画像のalphaを0にセット、一番上だけ1.0か
それから2枚ずつペアでalphaを
1.0 –> 0.0
0.0 –> 1.0
と変化させる?
クロスフェード?あれ?

5枚あるとして(左が重なり順が上、右が奥)
1 1 1 1 1
0 1 1 1 1
0 0 1 1 1
0 0 0 1 1
0 0 0 0 1
1 1 1 1 1
以下ループのがいいかな?
1週するたびに全部を1に変更する時重くなる?ん~。。。

[追記|20090727_13:42]
0 0 0 0 1 から
1 0 0 0 0 になって
1 1 1 1 1
0 1 1 1 1 に戻る時の処理が関数を新しく呼び出す関係からうまくクロスフェードできないでいる。
同時にhtmlで言うz-indexのようなものを操作すればいいのかな?
やってみよう。
それか2枚ずつペアで切り替わるようにするか、5枚あるときの5から1のつながりをどうすればいいのかなぁ

重なり順参考url

  • http://www.adobe.com/jp/devnet/flash/quickstart/display_list_programming_as3/
  • http://blog.bonkura.jp/2008/09/as30-13.html
  • http://morishige.jp/blog/archives/99

addChild、addChildAt

addChild、addChildAtで読み込んだ画像に対して
addEventListenerを設定するにはどうしたらいいんだ

[追記|20090725_9:00]
targetプロパティで自分自身を選択できた、targetてなんだ?
そもそも参考書やWebのテキストではfunctionの引数(()の中のつもり)が
e:MouseEventになってたり
event:MouseEventとか
evt:MouseEventとか
Event:MouseEventとか
左側はなんでもいいのだろうか?
[as3]
imgloader[i].addEventListener(MouseEvent.CLICK,click_bt2);

function click_bt2(e:MouseEvent) {
trace(e.target);
if (e.target.alpha == 1) {
e.target.alpha = 0.2;
} else {
e.target.alpha = 1;
}
}
[/as3]

[さらに追記|20090725_17:05]
e.targetだけだとthisにならないようだ
なんなんだろうなtarget


addEventListener

as3勉強してる、さっぱりわからん。
専門用語もさっぱりわからん。

addEventListenerに引数というのか変数というのかよくわからないけど、そんなのを乗せてfunctionに渡せないのだろうか?

[as3]
for(var i:int=0;i<maxnum ;i++){
bt[i].addEventListener(MouseEvent.CLICK,bt_function,i);
}

function bt_functon(thisNum){
trace(thisNum);
}
[/as3]

みたいな感じにしたい。

ステージに3個のボタンと画像があって、for文でそれぞれのボタンにMouseEvent.CLICKを指定
同じfunctionから各々に対応した画像のalphaを切り替える
なんてしたかったんだけど、function bt_functionはボタンの数だけ作らないとダメなのだろうか?
そんなバカな!?
なんかやり方があるんだろうけど検索の仕方がわからん。

しかしaddEventListenerを調べてみても値を渡せなさそうだ。
引数は5個まであって、1,2が必須で3-5はオプション?

LoaderInfo.addEventListener
addEventListener () メソッド
override public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/events/EventDispatcher.html#addEventListener()

続きを読む


電話は呼出し音が終わって、相手が出てからしゃべりましょうということです。

簡単に画像を更新できるslideshowをflashで作ろうと思い、仕様を考える。

  • 外部から画像を読み込む
  • 読み込む画像の枚数をflaを開かずに変更できる

as1時代に作ったのは、外部テキストに画像のurlと最大枚数を書いておいて表示させるといったモノ。
今回はせっかくなのでxmlを使ってみよう、xml有名だもんね、xml使うメリットとかデメリットとかそもそもxmlて何なの?って全くわかってないけど。

以下のxmlを用意した

asはカヤックの記事を参考に書いてみる。
[as3]
var pathXml:String="photo.xml";

var url_list:Array=[];
var caption_list:Array=[];

var url:URLRequest=new URLRequest(pathXml);
var url_loader:URLLoader=new URLLoader(url);

// 読み込み完了時に呼び出されるイベント
url_loader.addEventListener(Event.COMPLETE,loadComplete);
function loadComplete(event : Event) {
trace("電話の相手が出ました");
var xml:XML=new XML(url_loader.data);
//trace(xml);
//xmlからターゲットのパスを指定する
for each (var element:Object in xml.photo) {
url_list.push(element.photourl);
caption_list.push(element.photocaption);
//_txt.text=url_list.toString();
}
slideshowplay();
}
trace("受話器に向かってしゃべりました");
function slideshowplay() {
trace("もう一度受話器に向かってしゃべりました");
_txt.text=url_list.toString();
}
[/as3]

ここで躓いたのが
loadComplete内からしか配列を参照できなかった、ってこと。
(よく考えたら当たり前だし、以前の外部テキストを読み込む時も読み込みが完了した時に処理用の関数を呼び出してたのにすっかり忘れてる)
検索してみると、mixiで同じように躓いてる人の質問を発見
http://mixi.jp/view_bbs.pl?id=42643514&comm_id=580&page=all
11-16あたりの流れ

電話は呼出し音が終わって、相手が出てからしゃべりましょうということです。

FLASH-japan「外部XMLを配列化したときにonLoadの外で変数が反映されません」
http://www.flash-jp.com/modules/newbb/viewtopic.php?viewmode=flat&topic_id=3946&forum=6

今回はフレーム移動ではなく、function oadComplete内からfunction slideshowplayを呼び出してみる事にします。