#includeが正しく動作しない [Edit]

マニュアルどおりに書いたなら
マニュアルはきちんと読みましょう。これが開発の基本です。さらにつぎのステップは、マニュアルを鵜呑みにするのはやめましょう。「ActionScript辞書」で#includeの項には、そのシンタックスがつぎのように記載されています。

#include "filename.as";

このとおり正確に記載してスクリプトを実行すると、エラーになります。「#include指示子の書式が間違っています」というのです。こう書けといわれたとおり書いたのに、「間違っています」というのは納得いきません。最初にこのエラーに遭遇すると、ハマりがちです。実は、正解はオンラインヘルプでは、「ActionScriptリファレンス」の方にあります。オンラインヘルプあるいは『ActionScriptリファレンスガイド』に、「ActionScriptについて」という章があり、「アクションパネルの使用」の項で「外部エディタの使用」について説明されています。そこに、#includeの正しいシンタックスが、記載されています。

#include "externalfile.as"

間違い探しのようでわかりにくいですが、ステートメントの最後に;(セミコロン)があってはいけないのです。

サブフォルダにある外部ファイルを指定する
「外部エディタの使用」の解説には、「ActionScript辞書」に説明のないサブフォルダの外部ファイルを指定する方法が記載されています。Flashファイルと同階層の"scripts"というサブフォルダ内にあるファイルは、つぎのように指定するものとされています。

#include "scripts/externalfile.as"

これが、Macintoshでは、動作しません。Macromediaテクニカルノート「includeアクションでサブフォルダ内にある.asファイルを指定するとエラーがでる」に掲載されているとおり、パス区切り文字には"/"でなく"\"を使う必要があるのです。これは、Macintosh版Flash MXのバグだと考えられます。

#include直後のステートメントが実行されない
さらに、#includeを行った直後のステートメントが実行されないというトラブルも報告されています。

#includeアクションには、ステートメントの最後に区切りを示す;(セミコロン)が使えませんでした。つまり、読込んだ外部asファイルの最後の行と、#include直後のステートメントとは連続したものとして扱われるのです。もし、外部asファイルの最後がコメント行で、おしまいに改行を入れていないと、#include直後のステートメントはコメントの続きと看做されてしまいます。そのために、実行されないという結果が生じる訳です。

この問題を避けるには、外部asファイルの最後に必ず空白の改行を入れておくのが安全です。この動作は、トラブルを誘発しやすいとはいえ、仕様ということになるのでしょう。

いろいろと問題の多い#includeアクションではあります。けれど、マニュアルバグとアクション自体のバグ、問題含みの仕様と、3冠揃うのは珍しいといえます。ある意味感心しないでもありません。

_____

作成者: 野中文雄
作成日: 2002年2月5日

コメント

この記事へのコメント

  1. 1.aquirax(2004年12月28日 15:47)

    ;(セミコロン)を付けないのは、他の言語から推測できますが、includeしたファイルの最後が改行されてないと…っていうのは。
    らしいっちゃ、らしいですが。
    見つけた野中さんに関心するばかりです。

  2. 2.野中 文雄(2004年12月29日 08:18)

    MX 2004では修正されたようです。やはり、結果が結果だけに、バグとして対処されたのですね。

  3. 3.mon(2006年01月29日 06:42)

    読み込まれる外部ASファイルというのは他のサイトにあるASファイルを読むことはできますでしょうか?

    #include "http://www.xxx.com/externalfile.as"

  4. 4.野中 文雄(2006年01月29日 17:35)

    > 他のサイトにあるASファイルを読むことはできますでしょうか?
    できません。試してご覧になれば、すぐに確認できるかと思います。

    #includeは、「パブリッシュ時」に外部ActionScriptファイルを該当箇所にいわばコピーする機能にすぎません。「ランタイム時」に、swfがダイナミックにスクリプトをロードするという訳ではありません。

    必要な外部asファイルはダウンロードして用いればよいことで、サイトから直接読込むという機能の必要性がわかりません。デバッグも、しづらいように思います。

その他の記事