今月2冊(Adobe AIR/なでしこ)出版しました

今月は、なんと、2冊同時に本が出ました!
1冊は、10倍のプレミアがついていた「なでしこ」の公式ガイドブックの後継に当たる本。

日本語プログラム言語なでしこ公式バイブル

日本語プログラム言語なでしこ公式バイブル

もう1冊は、Adobe AIR の本です。

Adobe AIRプロフェッショナルガイド Windows & Macintosh対応

Adobe AIRプロフェッショナルガイド Windows & Macintosh対応

ちなみにブログは下記に移転しました

Flashで覚えるアセンブラ・スタックマシン入門

より、以下引用です。

八角研究所 http://www.hakkaku.net/ で連載中の技術コラムですが、Flasm について書いたものが掲載されましたのでお知らせします。

Flasmを使って、Flashアセンブラを、いろいろ書き換えて遊んでみるという講座になっています。ActionScript ByteCode (ABC)を始めるには、この辺りからやってみると、面白いと思います。
また、swfmill を使ってSWFファイルをゼロから生成する方法なども紹介しています。

すべてのキーボードイベントを取る方法

Flex2でのキーボードイベントは、ActionScript2.0の頃のように、キーイベントをすべて取るのが少し難しくなっています。
すべてのキーボードイベントを取るには、stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp) を登録するのですが、
MXMLプロジェクトでは、の initialize イベントの時、
stage が null になっているため、アプリが起動した直後からイベントを取ることができません。
ActionScriptプロジェクトでは、コンストラクタでstageが正しく設定されています。)

そこで、click イベントなどで取ると良いです。ゲームを作る時は、一度、画面をクリックさせるなどの工夫が必要かも
しれませんね。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
    layout="absolute"
    click="onClick()"
    >
    <mx:TextInput x="20" y="10" id="a_txt"/>
    <mx:Script><![CDATA[
        import mx.core.UIComponent;
         private function onClick():void {
             a_txt.text = "ready";
             stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
         }
         private function onKeyUp(event:KeyboardEvent):void {
             a_txt.text = "code = " + event.keyCode;
         }
    ]]></mx:Script>
</mx:Application>

あと、Flex2のマニュアルに載っている方法では、適当なを作り、
そこにフォーカスを移動させておくという方法が紹介されています。
確かに、この方法なら、creationCompleteイベントでフォーカスを指定できます。

先日、教えてもらった stageを参照できるすばらしい方法です。

 <?xml version="1.0" encoding="utf-8"?>
 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
 layout="absolute">
      creationComplete="completeHandler()">
      <mx:Script>
          <![CDATA[
              private function completeHandler():void
              {
                  callLater(initializeHandler);
              }
 
              private function initializeHandler():void
              {
                  trace(stage); // is not null
              }
          ]]>
      </mx:Script>
 </mx:Application>

参考)中国語ですが、以下のサイトが役に立ちました。
http://www.nshen.net/blog/article.asp?id=496
最近、flex2のページ探していると、中国のページが多くヒットします。
※幸いにも、英語以上に中国語が読めるので、没問題ですが。

Flex Builder2 で背景色を指定する方法

デフォルトの青っぽい背景色は、Adobe(Macromedia)っぽいけど、
普通の人には変な色なので、白にして欲しかったです。

デフォルトの背景色の変え方、ちょっと迷いましたが以下のようにすれば良いです。

Flex2プロジェクトなら

タグに、属性「backgroundColor」を追加します。
たとえば、白色なら、以下の感じです。

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
 backgroundColor="#FFFFFF">

ActionScriptプロジェクトなら

  1. メニューから[プロジェクト - プロパティ]を選択。
  2. ActionScriptコンパイラを選択
  3. 追加コンパイラ引数に、「-default-background-color=(背景色)」と指定

背景色は、白なら、0xFFFFFF を、黒なら、0x000000と書きます。

Flex2 SDKなら

mxmlcコンパイルするとき、コンパイルオプションに
「-default-background-color=(背景色)」を追加します。
例えば、Test.mxmlコンパイルで背景所を青色にする時は
以下のように書きます。

mxmlc -default-background-color=0x0000FF Test.mxml

もしくは、ソース内にメタデータで埋め込み

package {
    import flash.display.Sprite;
    import flash.text.TextField;

    [SWF(width="800",height="600",frameRate="24",backgroundColor="#FFFFFF")]
    public class FirstAS extends Sprite
    {
        public function FirstAS()
        {
            var a_txt:TextField = new TextField();
            a_txt.text = "Hello, World!";
            this.addChild(a_txt);
        }
    }
}