with文の名前領域 – ActionScript3.0

2010年4月23日

Filed under: ActionScript3,Flash — admin @ 5:55 PM

AS3を本気で勉強しようと思い過去に何度入門したかわからないAS3を再び始めました。今回は本気です!(ってみんな言うよね。)
とりあえずTextField()から入門してHelloWorld的なことをやろうと思い頑張っていたら、with文がなかなか厄介でつまづきました。べつに使う必要ないんだけどね。

とりあえず、HelloWorld的な。

Actionscript:
  1. //************************************************************
  2. // HelloWorld - TextField()
  3. // とりあえず文字を書き出してみる。
  4. //
  5. package {
  6.     import flash.display.*;
  7.     import flash.text.*;
  8.     public class Main extends Sprite {
  9.         //------------------------------------------------------------
  10.         // Mainコンストラクタ
  11.         //
  12.         public function Main() {
  13.            
  14.             //h1 TextFormat() を定義
  15.             var tf_h1:TextFormat = new TextFormat();
  16.             tf_h1.color = 0x666666;
  17.             tf_h1.size = 30;
  18.             tf_h1.font = 'Times New Roman';
  19.             tf_h1.align = TextFieldAutoSize.CENTER;
  20.            
  21.             //titleを定義
  22.             var title:TextField = new TextField();
  23.             title.text = 'HelloWorld!! - TextField()';
  24.             title.width = stage.stageWidth;
  25.             title.height = 40;
  26.             title.x = 0;
  27.             title.y = (stage.stageHeight/2);
  28.             title.setTextFormat( tf_h1 );
  29.             title.background = true;
  30.             title.backgroundColor = 0xEEEEEE;
  31.            
  32.             //stageに要素を追加
  33.             stage.addChild( title );
  34.         }
  35.     }
  36. }

▽結果

インスタンスのプロパティをwith文を使ってまとめてみる。

Actionscript:
  1. //titleを定義
  2. var title:TextField = new TextField();
  3. with( title ){
  4.     text = 'HelloWorld!! - TextField()';
  5.     width = stage.stageWidth;
  6.     height = 40;
  7.     x = 0;
  8.     y = (stage.stageHeight/2);
  9.     setTextFormat( tf_h1 );
  10.     background = true;
  11.     backgroundColor = 0xEEEEEE;
  12. }

・・・これがですね、実は思わぬ落とし穴があって動いてくれないんです。

with文の中身というのは、親オブジェクトの名前領域の中にいる状態(表現あってる?)です。ここで問題になっているのは、stageオブジェクトです。"stage.stageWidth" の部分。
親が"title"オブジェクトなので、with文の中では、"title.stage.stageWidth" というように見られてしまいます。もちろん、titleインスタンスにはそんな階層のプロパティをもっていません。
それでもwith文を使いたい場合はこのように書きます。

Actionscript:
  1. //titleを定義
  2. var title:TextField = new TextField();
  3. var stageInstance:Object = stage;
  4. with( title ){
  5.     text = 'HelloWorld!! - TextField()';
  6.     width = stageInstance.stageWidth;
  7.     height = 40;
  8.     x = 0;
  9.     y = (stageInstance.stageHeight/2);
  10.     setTextFormat( tf_h1 );
  11.     background = true;
  12.     backgroundColor = 0xEEEEEE;
  13. }

一旦、上のスコープ内でstageを参照するオブジェクト"stageInstance" を生成して、"stageInstance" を参照しに行きます。この手間を考えると、そこまでしてwith文使う必要ないんじゃない?という気になります。名前領域に気を使うのはめんどくさ過ぎる気がします。

そんなwith文ちゃんでした。

ActionScript3.0でiPhoneアプリ開発がAdobe CS5で実現!?

2009年10月9日

Filed under: ActionScript3,Flash — admin @ 1:43 AM

ActionScript3.0、はじまったな・・・。
iPhoneアプリをObjective-CじゃなくてもAS3で開発できちゃうってんなら、かなり敷居が下がりまくりだよね。

Flash Professional CS5(英語サイト)
Flash Professional CS5 のアナウンスと iPhone

こんなことができるらしい。

  • AS 3 のプロジェクトから iPhone, iPod Touch 用アプリケーションの書き出し
  • Text Layout Framework (TLF) を用いた新規のテキストコントロールによる新しい表現
  • XML ベースの FLA ファイル (ソース管理システムを使ったバージョン管理が可能に)
  • コードスニペットパネル (事前に作成済みのコードをプロジェクトでそのまま利用)
  • Flash Builder の統合 (ActionScript エディタとして使用できる)
  • ActionScript エディタの改良 (コードヒントや自動補完機能など)

これはActionScript3.0の開発者が一気に増えそうな予感がしまくりんぐですよ!

それに比べ、googleのAndroid使ったみましたが、動きはもっさりだし、あいつイマイチっす。やっぱりJavaってとこがあかんじゃないのかなー。重いし、iPhoneに慣れてしまっていると、どうしてもiPhoneと同じような操作しちゃうんだけど、けっこう融通が利かない。ユーザビリティもいまいちでwebブラウジングもイマイチだし、売れても流行らないと思う。結果、売れないと思う。

JavaScriptやってる人は今からActionScript3.0にどっぷりいっちゃって良いと思うよ!(^ω^)

.asファイルを外部で読み込む

2009年6月10日

Filed under: ActionScript3,Flash — admin @ 6:04 PM

FlashのActionScriptエディタがものすごく使いにくいので、EmEditorで編集できるようにする。
方法は簡単。ASで実行したいパーツにinclude文を書くだけ。

Actionscript:
  1. include "sample.as";

パスは相対パスで合わせればおk。

ActionScript3を入門してみた。

2009年3月19日

Filed under: ActionScript3,Flash — admin @ 2:00 AM

ActionScript3を入門してみた。

Actionscript:
  1. /*******************************
  2. *
  3. *  Hello world ActionScript
  4. *
  5. */
  6.  
  7. /*==============================
  8. *  型のないCorpオブジェクトの定義
  9. */
  10. var Corp = {
  11.   //名前を定義
  12.   setName: 'no name',
  13.  
  14.   //setNameプロパティを出力する関数を定義
  15.   traceName: function(){
  16.     trace(this.setName);
  17.   }
  18. }
  19.  
  20. /*  CorpオブジェクトのtraceNameメソッドを実行すると、
  21. *  デフォルトで定義されている "no name" が出力される。
  22. */
  23. Corp.traceName();
  24.  
  25.  
  26. /* CorpオブジェクトをfunnyCorpオブジェクトに代入。
  27. */
  28. var funnyCorp = Corp;
  29.  
  30. /*  setNameプロパティに "funnythingz" を代入。
  31. */
  32. funnyCorp.setName = 'funnythingz';
  33.  
  34. /*  funnyCorpオブジェクトのtraceNameメソッドを実行すると、
  35. *  上記で代入された "funnythingz" が出力される。
  36. */
  37. funnyCorp.traceName();
  38.  
  39. /*  ただし、ただの代入のため、CorpオブジェクトのtraceName();を
  40. *  実行しても同じ結果として、"funnythingz" が出力される。
  41. */
  42. Corp.traceName();

結局、ASっぽいことやってないので、JSと書き方がまったく同じです。
しかも特にクラスベースっぽいことも何もしてない。

これからがんばることにするお!