ここが変だよFlash CS3

AS3.0を弄り始めて1ヶ月。Flash CS3で制作しているにも関わらず、意外にも「タイムラインは使わない」という制作スタイルに落ち着きました。

僕のようなデザインのほうからFlashを始めた人間には、タイムラインを使わないという制作スタイルは、ちょっとクールに思えてしまうのです、というアホ丸出し、見栄張りまくりの理由も少なからずあるのは否定しませんが、タイムラインのあちこちにコードが記述されているよりは、外部クラスに全てのコードが書かれているほうが見通しが良いのは確かだと思います。

それに加え、トゥイーン系のモーションもTweenerflashのTweenクラスでスクリプト制御した方が、タイミングの修正などを行うのが容易だというのも大きな理由だと思います。

ただ場合によってはやはり「あぁ、メンドクセー」と思うことも多々あります。例えばテキストフィールドを生成する場合。Flash IDEならテキストツールとプロパティパネルを使えばものの数秒でできてしまうこのような処理も、クラスで生成する場合は大抵以下みたいな記述をしなければなりません。

package {
	
  import flash.display.Sprite;
  import flash.text.TextField;
  import flash.text.TextFieldAutoSize;
  import flash.text.TextFormat;
	
  public class TextTest extends Sprite {
	
    private var textfield:TextField;
		
    public function TextTest() {
      textfield = createTextField();
      addChild(textfield);
    }
	
    private function createTextField():TextField {
      var textformat:TextFormat = new TextFormat();
      with (textformat) {
        font = "_sans";
        color = 0x333333;
        size = 10;
      }
			
      var textfield = new TextField();
      with (textfield) {
        autoSize = TextFieldAutoSize.LEFT;
        selectable = false;
        defaultTextFormat = textformat;
        text = "Just a text."
      }
			
      return textfield;
    }
		
  }
	
}

確かに同じようなフォーマットのテキストならば、テキスト表示用のクラスファイルを使い回せるようにすれば作業効率も増すのでしょうが、多様なバリエーションのテキストが必要な場合はなかなかそうもいきません。正直これはしんどいです。TextFieldAutoSizeのimportし忘れなんて、これからも何百回もコンパイラに指摘されることでしょう。

Flashのテキストツールで作ったTextFieldにクラス名を割当てることができればいいのですが、ご存知の通りFlash IDEでクラス名を付けてやれるのはButtonとMovieClipだけです。テキストの表示のためだけに、MovieClipクラスを生成するのも、あまり気が進みません。*1

そもそもAS3.0になってクラス編成というのかパッケージ構成というのか分からないけれど、とにかくオブジェクの在り方がAS2.0とは全く異なるようになったのに、相も変わらず「グラフィック、ボタン、ムービークリップ」という3タイプのクラスにしかシンボル化できないというのは、どうもおかしい気がします

Flashの得意とするグラフィカルなパーツ制作を、クラスベースの制作スタイルにももっと有効に活用できればいいと思うのですが、どうでしょう?

*1:MovieClipインスタンスのリンケージ設定で、基本クラスをSpriteに変更してやることは可能なんですね。SpriteにaddChildされてない状態のTextFieldとかは作れないのかなぁ?