Tag { actionscript } 一覧

[as3][js] FlashでBitmapDataをbase64エンコードしjs経由でhtmlに表示する

Category:{ flash, javascript }  Tag:{, } Comments:{ No Comments }
Posted:{ 2011.11.11 01:32:52 }

flash上の任意のDisplayObjectを
Bitmap化して、ByteArrayにし、base64変換し、
その文字列をExternalInterface経由でjavascriptに受け渡して、
html上に表示するサンプルを作って見ました。

[sample] flashでBitmapDataをbase64エンコードし、js経由でhtmlに表示する

どんな場合に有効な手法?

自分もいまいち使いどころがぴんと来ませんが、
jsでは生成できないようなイメージを動的にflashで作成して、htmlに渡すなど。でしょうか。

例えば、以前 jsdo.it で作成したトランスメタルジェネレータ HTML5版では、
flashでサウンドの波形画像を作成し、html上に表示しています。

Trance Metal Generator HTML5 α ver ( トランスメタルジェネレーター HTML5アルファ版) – jsdo.it – share JavaScript, HTML5 and CSS

as側のサンプル

下記はDisplayObjectを渡すとpng形式のbase64文字列を返してくれるfunctionサンプルです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import com.adobe.images.PNGEncoder;
import mx.utils.Base64Encoder;
/**
* DisplayObjectをBase64文字列(png)に変換.
* @param target  画像化したいDisplayObject
* @param w 幅
* @param h 高さ
*/
    private function convertBase64(target : DisplayObject, w : Number = NaN, h : Number = NaN) : String
    {
        w = (isNaN(w)) ? target.width : w;
        h = (isNaN(h)) ? target.height : h;
 
        var bmd : BitmapData = new BitmapData(w, h, true, 0x00ffffff);
        bmd.draw(target);
        var base64 : Base64Encoder = new Base64Encoder();
        base64.encodeBytes(PNGEncoder.encode(bmd));
        var str : String = base64.toString();
        bmd.dispose();
        var str3:String = "";
        var str2:String = str.toString();
        var len:uint = str2.length;
        for (var i:uint = 0; i < len; i++)
        {
            var sub:String = str2.substr(i, 1);
            if (sub == "\n")
                continue;
            str3 += sub;
        }
        return str3;
    }

gistにも同じものをアップしています。
DisplayObjectをBase64文字列(png)に変換 — Gist

js側のサンプル

flash側からExternalInerfaceで下記のjsメソッドにbase64文字列を渡してあげるとhtml上に画像が表示されます。

1
2
3
4
5
6
7
/* ※要jQuery */
<script type="text/javascript">
    function setBase64Image(str,w,h){
        var dragItem = $("<img src='data:image/png;base64," + str + "' width='"+w+"px' height='"+h+"px'  />");
        $(".[任意のDIV名など]").append(dragItem);
    }
</script>

最後に

その他、有効なユースケースがあったらぜひ@itozに教えて頂けると喜びます。

[AS3] Frame メタデータタグの factoryClass のローディングでハマった

Category:{ actionscript }  Tag:{, , } Comments:{ No Comments }
Posted:{ 2011.05.14 07:16:20 }

AS3 でローディングを作る時、下記 のような方法があります。

[1] 本体の swf とは別に、プリロード swf を作る。
[2] factoryClass でプリロードクラスを指定し、ドキュメントクラスより先に実行する。

[1] の方法は swf が2つ出来てなんか好みじゃないので、最近は [2] の方法をよく使っています。

※そもそも factoryClass って何?って人は、下記サイトが参考になります。
メタデータタグ[Frame]とは? | Mtok-blog

今回ハマった点

で、何でハマったかと言うと、
「 swf 全体が読み込まれた後にしか、ローディングがスタートしない」現象です。
※つまり、全くローディングになってない。

問題はドキュメントクラスを生成する部分でした。

/*  ※ Index.asをドキュメントクラスとした場合。*/
    var indexClass:Class = getDefinition('Index') as Class;
    //var index:Index = new indexClass() as Index;//←これだとダメ
    var index:DisplayObject = new indexClass() as DisplayObject;//←これはちゃんと動く
    addChild( index );

上記の Index の型指定 (2箇所) が問題でした。。。(´・ω・`)

なぜダメか?

Preloader クラス内に Index と書くと、そのフレームに Index が存在する事になり、結局それが読み込まれるまで Preloader クラスがスタートしないのです。
@bkzen に教えて頂きました。THX!)

どうしてハマった?

普段は型指定を DisplayObject にしているので問題ないのですが、
今回なぜこう書いてしまったのか?。

それは、Preloader から Index クラスに渡したいデータがあり、public メソッドを呼ぶために、何気なく型指定をしてしまっていたのでした。。

//↓こう言うことをしたかったが為にハマった。
index.setData(hoge);

分かってしまえば原因は単純ですが、ついやってしまいそうな落とし穴ですよね。

解決方法

結局プリローダーからドキュメントクラスに何かしらデータを渡したい場合、下記のような方法が良いでしょう。

・ドキュメントクラスにインターフェイスを実装する
一旦シングルトンクラスにデータを格納し、ドキュメントクラスから取得する。

その他

その他、ハマりやすいポイントとして、下記サイトも参考になります。

馬鹿全 – Frame メタデータタグでプリローダを作る時の注意

Flex SDK でプリローダー – kaityoの日記

以上。

では!よいプリロードライフを!

[AS3] モーダルな ErrorDialog (エラーダイアログ) クラスを作成しました。

Category:{ actionscript, flash }  Tag:{, } Comments:{ 1 Comment }
Posted:{ 2011.04.21 04:09:47 }

モーダルな ErrorDialog というクラスを作りましたので公開します。

以下、特徴など説明です。

どの階層で addChild しても必ず stage 最前面に表示

そもそもモーダルダイアログとは、
そのダイアログを閉じるまで、他の操作をできなくするタイプのウィンドウの事です。
( Photoshop で言うフィルタのウィンドウみたいな物ですね)

この ErrorDialog クラスは、手軽にそれを実装するため、
どんな階層でも、addChilde するだけで、必ず stage の最前面 (&中央) に表示されるようになっています。

 import jp.itoz.display.window.ErrorDialog;
 
//どんな深い階層でaddChildしてもOK!
var errorDialog:ErrorDialog = new ErrorDialog("タイトル","メッセージ",new Error());
addChild(errorDialog);
 
stage.addChilde(hoge);//←以降こんな事しても問題なし

複数addChildしても、addChildされた順番通り表示

「必ず最前面に表示される」ということは、
複数addChildしたらどうなるの?
と思った方もいるかも知れません。

そこはご安心を!

例えば下記のように意図的に3回エラーを起こして、addChildしてみます。

 
    var arr : Array;
    for (var i : int = 0; i < 3; i++) {
        try {
            arr.push(i);//newArray()していないのでエラーが起きる。
        } catch(error : Error) {
            //第三引数にはError継承クラスを渡せる
            var errorDialog : ErrorDialog = new ErrorDialog("Error"+ (i+1)+" 回目" , "Error message.", error);
           addChild(errorDialog);
        }
    }

結果はこのような動作になります。

[SWF] ErrorDialogSample.swf

ちゃんと順番よく表示されたと思います。

例えば、下層の様々なエラーの起きそうな場所に、(try catchとかで) このクラスを記述しておくことで、エラーが起こった順番通りに表示してくれます。

デザイン変更もサクっと出来る

1. サイズ、マージン変更はコンストラクタで変更

第4引数 以降に、幅、高さ、マージンを設定できます。

 
//幅と高さ300 マージン20にする
var errorDialog:ErrorDialog = new ErrorDialog("サイズ変更","サイズを変更しました",new Error(),300,300,20);
addChild(errorDialog);

[SWF] ErrorDialogSizeChangeSample.swf

ある程度自動でレイアウトされる様になっています。

が、微調整したい場合は、addChild 後に変更してください。
( ※ addChild 時に自動レイアウトされるため )

 
//位置微調整の例
addChild(errorDialog);
errorDialog.titleTextField.y+=10;
errorDialog.closeButton.y -=5;

2. 背面パネル、クローズボタン、テキストフォーマットは、プロパティで変更

 
// 背面パネル変更 
// ※これを変更すると、コンストラクタで設定したサイズが無効化され
//渡されたDisplayObjectContainerを元にレイアウトされます。
 
errorDialog.background =  [任意のDisplayObjectContainer]
 
//クローズボタン変更
//※CLICKイベントは自動的に付加されます。
 
errorDialog.closeButton = [任意のInteractiveObject]
 
//テキストフォーマット変更
 
errorDialog.titleTextFormat = newTextFormat(null,20,0xcc0000,true);
 
errorDialog.messageTextFormat  = newTextFormat(null,15,0x00cc00);
 
errorDialog.errorTextFormat = newTextFormat(null,20,0x0000cc);

以上、簡単に変更できます!

ざっとまとめると例えばこんな感じ。

 
//背面パネル用スプライト
var bg : Sprite = newSprite();
bg.graphics.beginFill(0xc6d5cd);
bg.graphics.drawRect(-200, -75, 400, 150);
bg.graphics.endFill();
 
var errorDialog : ErrorDialog = new ErrorDialog("デザインカスタマイズ", "デザイン変更しました", new Error(), 300, 300, 5);
errorDialog.background = bg;//※コンストラクタで指定したサイズ無効になる
errorDialog.closeButton = new PushButton(null, 0, 0, "pushbutton");//Minimalcompのプッシュボタン
errorDialog.titleTextFormat = new TextFormat(null, 20, 0xcc0000,null,null,null,null,null,TextFormatAlign.CENTER);
addChild(errorDialog);
errorDialog.titleTextField.y += 10;
errorDialog.closeButton.y -= 5;

上記をパブリッシュすると、

[SWF] ErrorDialogCustomizeSample.swf

と、如何様にでも出来ます。

フェードイン、フェードアウト演出を変更したい

この場合、 AbstractErrorDialog の継承クラスを作成します。
( ※ ErrorDialog クラスもこの継承です )

サンプルとして OrigineErrorDialog クラスを作成しました。

[SWF] OriginErrorDialogSample.swf
[AS] OriginErrorDialogSample.as

継承ポイントは下記です

・初期表示状態はsetLayout()内で定義。(これがaddChild時に呼ばれる)
・open()をoverrideしフェードイン演出を実装
・フェードイン完了時、openComplete()を必ず呼ぶ
・close()をoverrideしフェードアウト演出を実装
・フェードアウト完了時、closeComplete()を必ず呼ぶ

また、背景パネルやクローズボタンも当然ここで変えられます。

背景パネルは、createBackground() 内で作成し、return するだけ。
同じくクローズボタンは、createCloseButton() 内で作成しreturn するだけ。

です。

背面全体を覆っているカバーを変更したい

これも簡単。

 
errorDialog.cover= [任意のDisplayObjectContainer];

で変更でき、自動で拡縮し画面全体を覆います。
ただ注意点として、複数ダイアログでcoverを変更しても、
全て最後に設定されたものになってしまいます。

ダウンロード

Github にアップしました。

※要Tweener

その他

今後こんな機能も追加したい

・複数表示される場合、キャンセルできる。
・マージンは上下左右別々に設定できる。
・非表示切り替え。(リリースビルドなどの時用)
・メッセージテキストフィールドにスクロールバーを付ける

修正履歴

-2011.4.24 複数同時addChild時、2番目以降の表示オブジェクト位置を調整しても反映されないバグを修正しました。
-2011.4.24 クローズボタンにオーバーを追加しました。

※2011.4.24 teraco – 東京てら子Vol.15 『Error Handling&Security』の回で発表しました。

以上、バグ発見されましたら教えていただけるとありがたいです。

では!

[AS3] ビット演算で属性検索!

Category:{ actionscript }  Tag:{ } Comments:{ 1 Comment }
Posted:{ 2011.03.06 04:25:20 }

「ビット演算」って聞いただけで、「ややこしそうっ!」ってなりますよね。
自分もそうでした。

まずは理解!

そもそもビット演算の理解には、下記サイトが参考になりました。

馬鹿全 – (AS3)ビット演算を倒す

BeInteractive! [ビット演算って面白いですよね]

符号つき2進数
 ↑このページ中央あたりにあるJAVAアプレット分かりやすいっ!

ピンっとくるまでには時間がかかりますが、なんか便利そうだ!?
と言う事がわかると思います。

で、何に使うの?

馬鹿全さんのブログでは、「RGB値、ターンチェンジ、移動フラグ、簡易3D座標 etc..」に使える、とありました。
が、僕はさらに「属性検索」に使える!と思いました。

サンプル

例えばゲームなら「勇者、戦士、僧侶…」みたいな、どの職を経験したか?などを、
その数ぶん Boolean 変数で管理したら大変 なので、そんな場合に2進数で保持しておいて、
それを元に検索すると便利だと思いました。
※その他「アイテム1 アイテム2 アイテム3…」など大量のアイテムを持っているユーザーを絞り込み検索するとか。

上記SWFは、
・ボタンの、オン状態を1、オフ状態を0 で管理。
・ボタン群のオンオフ状態の変化時、100100など、状態をイベントで配信。
・その状態に応じて、該当する属性をビット演算で検索。
みたいな感じです。

検索部のコードはこんな感じです
_arr はこんな XML をパースしたものです。

補足

当記事は東京てら子12(2011.1.11) での発表内容「ビット演算っておいしいの?」プラスアルファです。

[AIR][Android]「BlackBerry SDK for AIR」の ボタンパッケージサンプル

Category:{ AIR, Android }  Tag:{, , , } Comments:{ No Comments }
Posted:{ 2011.02.22 03:26:56 }

先日のエントリ
「日本の Flasher が誰も知らない? “BlackBerry SDK for AIR” が実は便利なんじゃないか!?」
の続きとして手始めに
SDK内ボタンクラスのサンプルを作成しました

qnx.ui.buttons パッケージサンプルSWF

[SWF] R o m a t i c a : dev | BlackBerry SDK for AIR | Button Package Sample

前回のエントリでも書きましたが AS3ベースなので、
普通にウェブにも利用できます。
デザインスキンの変更のやり方がまだわからず。。。(そこ一番重要!)
デザイン変更に自由度があれば、
Web にも Airアプリ にも、かなり使えそうです。

ソースコードダウンロード

上記SWFのソースをアップしました。
※ SDK自体 は含まれていませんので、BlackBerry のサイトから Download して下さい。

サンプルコードを一部抜粋で載せます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
//〜略〜
// _____________________________________________________________________
//
//  BackButton
//
_containerBackButton = roundRectLabelContainer("BackButton");
var backButton : BackButton = new BackButton();
backButton.sizeUnit = SizeUnit.PIXELS;
backButton.label = "BackButton";
backButton.setSize(150, 45);
_containerBackButton.addChild(backButton);
 
// _____________________________________________________________________
//
// IconButton
// ※setIconには、  URL か bitmap か bitmapdata を渡す
//
_containerIconButton = roundRectLabelContainer("IconButton");
var SMALL : TextFormat = new TextFormat(null, 15, 0x666666);
 
var iconLabel1 : Label = new Label();
iconLabel1.text = "IMGURL";
iconLabel1.sizeUnit = SizeUnit.PIXELS;
iconLabel1.setSize(60, 20);
iconLabel1.format = SMALL;
_containerIconButton.addChild(iconLabel1);
var iconButton : IconButton = new IconButton();
iconButton.setSize(100, 44);
iconButton.setIcon("commons/images/imgres.jpeg");
_containerIconButton.addChild(iconButton);
_containerIconButton.addChild(new Spacer(10));
 
var iconLabel2 : Label = new Label();
iconLabel2.text = "BitmapData";
iconLabel2.sizeUnit = SizeUnit.PIXELS;
iconLabel2.setSize(90, 20);
iconLabel2.format = SMALL;
_containerIconButton.addChild(iconLabel2);
var iconButton2 : IconButton = new IconButton();
iconButton2.setSize(100, 44);
iconButton2.setIcon(createIconBMD());
_containerIconButton.addChild(iconButton2);
 
_containerIconButton.addChild(new Spacer(10));
var iconLabel3 : Label = new Label();
iconLabel3.text = "Bitmap";
iconLabel3.sizeUnit = SizeUnit.PIXELS;
iconLabel3.setSize(65, 20);
iconLabel3.format = SMALL;
_containerIconButton.addChild(iconLabel3);
var iconButton3 : IconButton = new IconButton();
iconButton3.setSize(100, 44);
iconButton3.setIcon(new TestIconBitmap());
_containerIconButton.addChild(iconButton3);
 
// _____________________________________________________________________
//
//  LabelButton
//
_containerLabelButton = roundRectLabelContainer("LabelButton");
var labelButton : LabelButton = new LabelButton();
labelButton.setSize(150, 44);
labelButton.label = "LabelButton";
_containerLabelButton.addChild(labelButton);
_containerLabelButton.addChild(new Spacer(10));
 
var labelButton2 : LabelButton = new LabelButton();
labelButton2.setSize(170, 44);
labelButton2.toggle = true;
labelButton2.label = "LabelButton Toggle";
traceTextFormatState(labelButton);
_containerLabelButton.addChild(labelButton2);
 
// labelButton.embedFonts = true;
// labelButton.setTextFormatForState( new TextFormat( null , 20 , 0xcc0000 ) , SkinStates.UP )//各ステーとにTextFormatを適用できる
 
// _____________________________________________________________________
//
//  ToggleSwitch
//
_containerToggle = roundRectLabelContainer("ToggleSwitch");
var toggleSwitch : ToggleSwitch = new ToggleSwitch();
toggleSwitch.defaultLabel = "Default";
toggleSwitch.selectedLabel = "Select";
toggleSwitch.width = 250;
_containerToggle.addChild(toggleSwitch);
traceTextFormatState(toggleSwitch);
// toggleSwitch.setTextFormatForState( new TextFormat( null , 20 , 0xcc0000 ) , SkinStates.UP )//各ステーとにTextFormatを適用できる
 
// _____________________________________________________________________
//
//  CheckBox
//
_containerCheckBox = roundRectLabelContainer("CheckBox");
 
var checkBox1 : CheckBox = new CheckBox();
checkBox1.labelPlacement = LabelPlacement.LEFT;
checkBox1.label = "CheckBox1";
checkBox1.width = 120;
_containerCheckBox.addChild(checkBox1);
 
var checkBox2 : CheckBox = new CheckBox();
checkBox2.labelPlacement = LabelPlacement.BOTTOM;
checkBox2.label = "CheckBox2";
checkBox2.sizeUnit = SizeUnit.PIXELS;
checkBox2.setSize(120, 50);
_containerCheckBox.addChild(checkBox2);
 
var checkBox3 : CheckBox = new CheckBox();
checkBox3.labelPlacement = LabelPlacement.RIGHT;
checkBox3.label = "checkBox3";
checkBox3.width = 120;
_containerCheckBox.addChild(checkBox3);
 
var checkBox4 : CheckBox = new CheckBox();
checkBox4.labelPlacement = LabelPlacement.TOP;
checkBox4.label = "checkBox4";
checkBox4.sizeUnit = SizeUnit.PIXELS;
checkBox4.setSize(120, 50);
_containerCheckBox.addChild(checkBox4);
 
// _____________________________________________________________________
//
//  RadioButton
//
_contanerRadioButton = roundRectLabelContainer("RadioButton");
var rb1 : RadioButton = new RadioButton();
rb1.label = "RadioButton 1";
rb1.groupname = "rbGroup";
_contanerRadioButton.addChild(rb1);
var rb2 : RadioButton = new RadioButton();
rb2.label = "RadioButton 2";
rb2.groupname = "rbGroup";
_contanerRadioButton.addChild(rb2);
var rb3 : RadioButton = new RadioButton();
rb3.label = "RadioButton 3";
rb3.groupname = "rbGroup";
_contanerRadioButton.addChild(rb3);
 
_radioButtonGroup = RadioButtonGroup.getGroup("rbGroup");
_radioButtonGroup.addButton(rb1);
_radioButtonGroup.addButton(rb2);
_radioButtonGroup.addButton(rb3);
_radioButtonGroup.addEventListener(Event.CHANGE, rbgChange);
_radioButtonGroup.setSelectedRadioButton(rb1);
//〜略〜

ドキュメント

qnx.ui.buttons パッケージのドキュメントは下記。
qnx.ui.buttons package – BlackBerry® Tablet OS SDK for Adobe® AIR® API Reference

[Android][AIR][AS3] 「日本の Flasher が誰も知らない? “BlackBerry SDK for AIR” が実は便利なんじゃないか!?」

Category:{ actionscript, AIR, Android }  Tag:{, , , , , } Comments:{ 1 Comment }
Posted:{ 2011.02.16 08:20:13 }

ちょっとっ!!!
そこの 「BlackBerryとか関係ないっ!」って思ったジャポネゼ!

騙されたとおもってちょいと聞いてください。

BrackBerry SDK for AIR

ググっても日本語サイトがほぼ無いのこの SDK。
(※ PlayBook が日本で未発売なのでしようがないですが)

これ、ヒジョーーにざっくり言うと「 Spark コンポネントの AS3 版」といった感じ。
(※ よく調べてないので言い過ぎかもしれない(;´Д`))

AS3 ベースで記述できて、 UI コンポーネントもひと通り揃っており
普通の WEB 用 SWF にも利用できるし、
他の Andorid 機でも全然使えるのです!
(※幾つかのクラスを GaraxyTab で動作確認しただけですが)

そしてそして!
なにより、AS3 なのに MXML っぽく「相対レイアウト」を記述できたりなんかして、
縦だの横だのグリグリ変化する、マルチなスクリーン時代にぴったり?なんじゃないかと思いました。
(もちろんWEBのリキッドレイアウトにも全然利用出来るのではないかと)

相対レイアウトサンプル

例えば、下記サンプルSWF。ウィンドウサイズをグリグリ変えてみてください。
[SWF] http://www.romatica.com/dev/blackberry_sdk/index.html
各パーツが中央揃えで、それぞれの間隔が相対に保たれています。

コードは下記。

[AS3] http://www.romatica.com/dev/blackberry_sdk/TestContainer.as
※一部抜粋

// 〜略〜
//  コンテナクラス
_container = addChild(new Container()) as Container;
_container.flow = ContainerFlow.VERTICAL;// ★このコンテナ内、縦並び
_container.align = ContainerAlign.MID;	// ★このコンテナ内、縦中央揃え
 
// コンテナ上部から20% スペースを空ける
_container.addChild(new Spacer(20));
 
// タイトルラベル
var titleLabel : Label = _container.addChild(new Label()) as Label;
titleLabel.text = "Liquid Layout Sample";
titleLabel.format = _TFM;
titleLabel.setSize(300, 35);
titleLabel.sizeMode = SizeMode.BOTH;			
 
// 10% スペースを空ける
_container.addChild(new Spacer(10));
// 〜略〜

qnx.ui.core.Container クラス に、縦並びや、中央揃えなどのプロパティを設定すれば、
あとは、DisplayObject を addChild するだけで相対レイアウトに!
new Spacer() で空きスペースを指定出来たりする所なんかステキ!です。
(かたくなにMXMLを書きたくない!なんて人 (自分) には最高?)

さっそくSDKの入手

BlackBerry(PlayBook) SDK for AIR のページへアクセスし、
3段目の「BlackBerry Tablet OS for AIR for ◯◯」から自分の環境にあったものをダウンロード。
※インストール時にFlash Builder Burrito (以下FB) のパスを聞かれますので先にインストールしておいたほうがよいかも?です。

[※追記] SDK はMPL ライセンスみたいですので基本、なにも気にせず利用してよいかと。

SDK は FB 内の sdks フォルダ にインストールされるので、
そのままFBで開発するなり、
そこにパスを通すなり、
必要な swc や as をそこからコピーしてくるなりして、利用します。

ドキュメント

http://www.blackberry.com/developers/docs/airapi/1.0.0/index.html

最後に

その他、UIコンポーネントなどもひと通りあるので、追って調査中。
間違いなどございましたら@itoz宛に教えていただけると助かりますm(__)m

では、
Happy AS Life!!

[Progression] テキストフィールドに文字を1つづつ追加/削除するコマンドリスト

Category:{ Progression }  Tag:{, , } Comments:{ No Comments }
Posted:{ 2011.02.12 04:30:39 }

下記2つの Progression 用のコマンドリストクラスを作成しました。

TextAddAnimationList クラス

 テキストフィールドに文字を1文字づつ “追加” するアニメーションをするコマンドリスト。

TextCutAnimationList クラス

 テキストフィールドの文字を1文字づつ “削除” するアニメーションをするコマンドリスト。

いずれも、スピードなど調整が可能です。

ダウンロード

github で公開しています。
TextAddAnimationList.as
TextCutAnimationList.as

サンプルコード

上記 swf のコードをサンプルとして上げておきます。
src/com/romatica/sample/Test_TextAddandCutAnimationList.as

使い方

サンプルコードを見て頂ければ分かると思うのですが、
ざっくり解説。
ちょっとデフォで設定する項目が煩雑な気もするので、
もっと良いやり方あったら誰か教えてー。

1
2
3
4
5
6
7
8
9
10
11
12
13
//テキストを1文字づつ追加する
new TextAddAnimationList(null
        ,_textField        /*対象のテキストフィールド*/
        ,"hogehoge"     /*表示したい文字*/
        ,0.03                /*追加スピード(秒)※省略可*/
        ,_texFormat     /*適用したいテキストフォーマット※省略可*/
).execute();
 
//テキストを1文字づつ削除する
new TextCutAnimation(null
        , _textField    /*対象のテキストフィールド*/
        ,0.01       /*削除スピード(秒)※省略可*/
).execute();

バグなど発見しましたら、教えていただけると助かります。

[GitHub] オレオレクラス (AS3) を公開しました。

Category:{ actionscript }  Tag:{, } Comments:{ 1 Comment }
Posted:{ 2011.01.26 12:41:42 }

GitHub

流行りのバージョン管理システム Git に手を出してみまして、使い方の学習も兼ねて、今までちまちま作っていたオレオレクラス群を GitHub にアップしました。
(README.textile に 逆引きINDEX を書いてあります。)
※使い勝手悪かったり、バグがあったり、何でこんなつくりやねん!って部分も多々ありますが、多めにみて(;´Д`)。

Gitクライアント

Gitクライアントは幾つか使ってみましたが、
コマンドで実行するのがやっぱり一番確実な感じ。
下記クライアントの印象。

Egit

Eclips から Git を利用するプラグイン。
FDT4 からも下記の方法で問題なくセットアップできました。
【コラム】イマドキのIDE事情 (52) EclipseでGitを使おう! EGitを試してみる | エンタープライズ | マイコミジャーナル
(ただ、commit が上手くいかない?ファイルがあったりしたので調査中)

Tower

デザイン的にもTower はなかなかいい感じ。
push がうまくいかない?時があり調査中)

参考書籍

下記 入門Git よかったです。thx! @funnythingz

[AS3] 2つのDataクラスから差(日/時/分/秒/ミリ秒)を取得するクラス

Category:{ actionscript, flash }  Tag:{, } Comments:{ No Comments }
Posted:{ 2010.11.24 03:47:29 }

AS3で2つのDataクラスの差を取得するクラスを作成しました。
特にカウントダウン等を作成する時、使えると思います。
戻り値はObject型で(日/時/分/秒/ミリ秒)が入っています。

(探せば誰かがこういうクラスを公開してそうですが、探すのが面倒くさかったので。)

Spark Project にアップしました。
svnで下記から取得してください。

http://www.libspark.org/svn/as3/Romatica/src/
以下の
src/com/romatica/utils/DataUtil.as
です。

srcフォルダを取得し、fla等からクラスパスを通して利用して下さい。

サンプルデータ

[fla] TestDateUtil.fla

[swf] TestDateUtil.swf

[svn] http://www.libspark.org/svn/as3/Romatica/sample

使い方

//
// 現在の時刻から2012/1/1 0:0:0 までの差(日/時/分/秒/ミリ秒)を取得
//
import com.romatica.utils.DateUtil;
var nowDate : Date = new Date();
var trgDate : Date = new Date( 2012, 1 - 1, 1, 0, 0, 0, 0 );
var diffDate : Object = DateUtil.diff( trgDate, nowDate, true );
trace( diffDate["d"] + "日と " 
       + diffDate["h"]+"時間 "
       + diffDate["m"]+"分 "
       + diffDate["s"]+"秒 "
       + diffDate["ms"]+"ミリ秒 ");
//trace結果 402日と 7時間 14分 25秒 768ミリ秒

その他

正確にデバッグしていないので、バグなど発見しましたら、報告頂けると有難いです。

[AS3] 簡単にカレント切り替えメニューが実装出来る SwitchMenuクラス

Category:{ actionscript }  Tag:{, } Comments:{ No Comments }
Posted:{ 2010.10.11 04:22:36 }

意外とこういうクラスを探しても無いので、自分用に作っていた、カレント切り替えメニューが簡単に実装出来る SwithMenuクラス [AS3]を公開します。

ポイント(というか設計思想というか)

スクリプトのみでメニュー群にマウスアクションの演出や、オーバーエリアの設定するのって、結構手間がかかったりして、意識して作らないと、すごく味気ないものになっちゃいますよね?
 このクラスは、出来るだけそういう負荷を減らすため、マウスアクションやオーバーエリアを、タイムライン上で設定する事を目的としています。(一応スクリプトでも出来ます)

動作サンプル

SwitchMenuクラスサンプル

(続きを読む…)


レンタルサーバー豆知識