ActionScript

バグ

気づかないうちにハマってしまう……それがActionScriptの天敵、バグの存在。時間を浪費する前に、チェックしてみては?

  • [AS3] ()を使った式が戻り値に指定された関数を[自動フォーマット]すると

    [自動フォーマット]が、またやらかしてくれました。

    つぎのフレームアクション(スクリプト001)を、[自動フォーマット]してから、[ムービープレビュー]で確認すると、答えとしていくつが[出力]されるでしょう。

    スクリプト001■functionの戻り値に括弧()のある式を指定
    function xTest(a:Number, b:Number, c:Number):Number {
      return (a + b) * c;
    }
    trace(xTest(1, 2, 3));

    >>全文へ

  • [AS3][Windows] クラスが見つからない・定義されていないというエラーが出る

    Flash Professional 9 ActionScript 3.0 PreviewのWindows版で、クラスの定義もActionScript (AS)ファイルの保存場所も正しいはずなのに、コンパイルエラーを発生する場合があります。

    >>全文へ

  • イリュージョン − 消えるif条件ブロック内の関数

    少々マニアックな現象です。if条件のステートメントブロック{}内に設定した関数(function)が、こつ然と消えてなくなります。

    >>全文へ

  • [AS3] Stage.stageWidth/Stage.stageHeightの戻り値がウィンドウサイズで変わる

    ActionScript 3.0のStage.stageWidth/Stage.stageHeightプロパティは、1.0/2.0のStage.width/Stage.heightと同じく、現在のステージ幅と高さを返します。具体的には、Stage.scaleModeプロパティが"noScale"(StageScaleMode.NO_SCALE)に設定されている場合以外は、SWFファイルのドキュメントプロパティに設定されたサイズが返されるべきです(図001)。ところが、Flash Player 9.0r16では、実際にはFlash Playerのウィンドウサイズが返されてしまうようです。

    >>全文へ

  • NumericStepperで奇数を表示する

    Flash 8のNumericStepperインスタンスに、つぎのような[パラメータ]設定をしてみましょう(図001)。maximum = 10、minimum = 1、stepSize = 2、value = 1。[ムービープレビュー]してNumericStepperインスタンスを操作すると、値はどのように変化するでしょう?

    図001■NumericStepperの[パラメータ]設定
    FF0608231_001.gif

    >>全文へ

  • [Flash 8] 滅びの呪文

    たった1行のスクリプトで、Flash 8.0のアプリケーションが落ちます。

    >>全文へ

  • newlineの謎

    「ActionScript 2.0リファレンスガイド」によれば、newline定数は「キャリッジリターン文字 (¥r) を挿入します」。しかし、これは嘘です。挿入されるのは、改行文字(¥n)です。この点は、「ActionScript 2.0 の学習」の「エスケープ文字について」の解説を、英語版で確認すると理解できます(図001)。

    >>全文へ

  • \r\nが改行コードとして認識されない[Flash 8/Mac OS X]

    Flash 8/Mac OS Xで、つぎのスクリプトを実行してみます(図001)。

    図001■[アクション]パネルに記述したスクリプト
    FN051217_001.gif

    >>全文へ

  • Key.onKeyUpイベントが受取れない[Flash 8]

    Flash Player 8でパブリッシュしたSWFにおいて、確認された問題です。Key.onKeyUpイベントを受取れないことがあります。

    >>全文へ

  • カンマ演算子は必ず右の値を返す

    カンマ(,)演算子は、あまり使われることがありません。使用するメリットがあるのは、forステートメントくらいで、かぎられたものでしょう。しかし、「ActionScriptリファレンスガイド」に、かなり基本的な間違いがあります。

    >>全文へ

  • スケルトンのScrollPane

    ちょっとしたはずみで、スケルトンのScrollPaneができました。ScrollPaneに設定したMovieClipが、ScrollPaneインスタンスの外枠をはみ出して表示されます。

    >>全文へ

  • Stage.heightが100ピクセル足りない

    怪談の「番町皿屋敷」ではありませんが、Stage.heightが100ピクセル足りなくなる現象です。怪談と違い、四季に関係なく、[ムービープレビュー]で発生します。

    >>全文へ

  • true/falseは小文字で書きましょう

    大文字小文字の区別は、Flash Player 7から採用された仕様変更です。しかし、ブーリアン(論理)値true/falseは、Flash MX 2004 (7.2)を使ってFlash Player 6以前でパブリッシュした場合でも、大文字小文字を誤ると正しく認識されません。

    >>全文へ

  • 入れ子のMovieClipに設定したContextMenuが表示されない

    Flash MX 2004(Flash Player 7)から、ContextMenuクラスを使って、コンテキスト(ショートカット)メニューをカスタマイズできるようになりました。ContextMenuオブジェクトは、MovieClipインスタンスに対して設定します。ところが、そのMovieClipインスタンスが他のMovieClipに入れ子になっていると、設定したコンテキストメニューが表示されません。

    >>全文へ

  • ダイナミックに作成するインスタンスの型指定

    タイムラインに配置するMovieClipやTextFieldインスタンスについても、ActionScript 2.0の型指定を行うことが可能です。型指定を行うと、型のシンタックスチェックが行われるほか、コードヒントを表示することができて便利です。しかし、インスタンスをダイナミックに作成する際には、注意が必要です。

    >>全文へ

  • 意外と使えないMovieClip.getNextHighestDepth()

    MovieClip.getNextHighestDepth()メソッドは、現在使用されている最も数値の大きい深度のつぎ(+1)の値を返します。この値をスクリプトで新規に配置するMovieClipインスタンスの深度に設定すれば、他のMovieClipと重複せずに1番手前に配置することができます。しかし、このメソッド、実はあまり使えません。

    >>全文へ

  • <img>タグで挿入した画像にテキストを回り込ませたくない

    TextFieldインスタンスにHTMLテキストで<img>タグを設定したとき、その後に書かれたテキストは画像を回り込みます。この回り込みを、直接解除する方法はないようです。

    >>全文へ

  • MenuBarがボタンを狂わす?!

    Flash MX 2004のMenuBarコンポーネントのインスタンスを配置すると、ボタンが不思議な動作をし始めます。

    >>全文へ

  • forステートメントの変数に型指定

    [自動フォーマット]すると...

    >>全文へ

  • Number.toString()メソッドの限界

    trace((0x7fffffff+1).toString(16)); // 出力: 7fffffff // 1足りない?

    >>全文へ

  • undefined.toString()?!

    Flash MX 2004 7.2オンラインヘルプ[ActionScriptリファレンスガイド] > [undefined]より:
    「Flash Player 6以前用にパブリッシュされたファイルでは、undefined.toString()は""(空のストリング)になります。Flash Player 7以降用にパブリッシュされたファイルでは、undefined.toString()はundefinedになります。」

    ひと言でいって「嘘」、ふた言なら「無茶」です。

    >>全文へ

  • 名前のない関数を定義と同時に呼出す

    名前のない関数を定義すると同時に呼出すことができません。そういう必要があるかどうかは別として。

    >>全文へ

  • 動的に作成したComboBoxを削除して再作成すると項目が表示されない

    UI Componentsのインスタンスは、UIObject. createObject()メソッドで動的に作成することができます。ところが、動的に作成したComboBoxインスタンスを一旦削除して再作成すると、設定した項目は正しく表示されないことがあります。

    >>全文へ

  • TextFieldに<img>タグで画像が表示できない

    Flash MX 2004から、TextFieldインスタンスに設定するHTMLテキストとして<img>タグが使えるようになりました。しかし、<img>タグで指定した画像を、表示できないことがあります。

    >>全文へ

  • ActionScript 2.0で「this必須宗」の復活

    ActionScript 2.0のクラス定義では、クラスのインスタンスを参照する場合に、原則としてthis参照は不要です。thisは、自動的に補われるからです。ところが、this参照をつけないと、スクリプトが正しく動作しない場合があります。「this必須宗」が、一部で復活の兆しです。

    >>全文へ

  • 自動フォーマットの勝手な行動[Flash MX 2004]

    【問1】つぎのスクリプトを記述して、[自動フォーマット]を実行するとどうなるでしょう? いずれも、何かしらやらかしてくれます。

    >>全文へ

  • continueの勘違い

    continueステートメントは、ループ処理において、以降のステートメントをスキップして、つぎのループに処理を移します。ifswitchステートメントは、continueが制御を移す対象ではありません。ところが、switchステートメントで、この勘違いが起こるようです。Flash MX 2004で確認された問題です。

    >>全文へ

  • 静的プロパティに設定した配列の値が取出せない[ActionScript 2.0]

    ActionScript 2.0でクラスに静的(static)プロパティとして配列を設定した場合、クラスのメソッドで配列エレメントを取出せないという問題が発見されました。

    >>全文へ

  • Windowsで「〜」が逆転

    Macintosh環境でテキストフィールドに入力した文字「〜」が、Winodows上で上下反転して表示されることがあります。SWFをブラウザあるいはStandalone Playerで再生しても、プロジェクタに書出しても、同じ結果です。

    >>全文へ

  • MovieClipのコードヒントにattachAudioがない

    Flash MX 2004でMovieClipのコードヒントを表示すると、リストの中にattachAudioが見当たりません。一瞬、MoiveClipでなくSoundクラスのメソッドだったろうか、などと不安にかられます。

    >>全文へ

  • 荀?の気も引くテキストバグ[MX 2004/OS X]

    FLASH-Japan報告されたテキストのバグです。Flash MX 2004/MacOS Xで、「血」という文字が「荀」に変わります。

    >>全文へ

  • 論理和演算子||(OR)二重のバグ

    【質問】Flash MX 2004(Flash Player 7書出し)で、以下のスクリプトの[出力]結果は、どうなるでしょう?

    マニュアルを参照すると、結果を正しく予測することはできません。しかも、Flash MX 2004のコンパイラにバグがあるようです。Flashcodersで議論された問題です。

    >>全文へ

  • 定義済みクラスの.asファイルでシンタックスエラー

    Flash MX 2004の定義済みクラスの.asファイルを開いて、[シンタックスチェック]を行うと、エラーになる場合があります。

    >>全文へ

  • interfaceの型をObject型の引数で受取れない

    ActionScript 2.0のinterfaceに関するバグです。クラスのメソッドにObject型の引数として、interfaceで型指定した値を渡すと、シンタックスエラーが発生します。

    >>全文へ

  • コンポーネントへのツールチップの追加

    Flash MX 2004オンラインヘルプの[Flashコンポーネントガイド] > [コンポーネントの作成] > [コンポーネントの利便性向上] > [ツールチップの追加]には、つぎのように説明されています。「コンポーネントにツールチップを追加するには、コンポーネントのActionScriptクラスファイル内のクラス定義の外部にtiptextキーワードを使用します」。嘘です。追加できません。

    >>全文へ

  • 外部SWFのComboBoxが開かない[MX 2004]

    Flash MX 2004で、外部SWFに配置したComboBoxをロードすると、クリックしてもドロップダウンリストを開けないことがあります。FLASH-Japanでも報告された問題です。

    >>全文へ

  • 失われるcapabilitiesの記憶[MX 2004]

    System.capabilitiesオブジェクトにアクセスすると、あるとき突然そんなものは知らないといわれることがあります。コンパイラが記憶喪失になるという悲しいバグです。

    >>全文へ

  • MX形式で保存するとエスケープ記号が変わる[MX 2004/OS X]

    またMacOS X版Flash MX 2004の[アクション]パネルで、問題発見です。エスケープ文字(\)が、Flash MXフォーマットで保存すると、別の文字に変換されてしまいます。

    >>全文へ

  • int関数は整数を丸めない

    「ActionScript辞書」(Flash MX/MX 2004)には、int()関数が値を整数に丸める(四捨五入する)かのように記載されています。ドキュメントバグでしょう。

    >>全文へ

  • 1度入ると抜けられないイベントリスナー[MX 2004]

    Flash MX 2004のコンポーネントは、イベントリスナーを使って必要な処理を定義します。ところが、イベントリスナーの登録メソッドはあるものの、削除のメソッドが見当たりません。1度入ったら抜けられない怪し気な団体のようです。

    >>全文へ

  • IE/WinでgetURLのウィンドウ指定ができない

    getURL()アクションまたはMovieClip.getURL()メソッドでウィンドウの指定をしても、Internet Explorer/Windowsでは、新規のブラウザウィンドウを開いてしまうことがあるようです。

    >>全文へ

  • アクションパネルの怪しいテキスト表示[MX 2004/MacOS X]

    Flash MX 2004/OS Xの[アクション]パネルは、テキストのレンダリングがどうも怪しいようです。

    >>全文へ

  • String.splitの引数に複数文字を渡した場合[MX 2004]

    Flashcodersで話題になったString.splitメソッドのバグです。Flash MX 2004で発生します(英語版Trial/Flash Player 7.0r14調べ)。

    >>全文へ

  • コンポーネントのラベルの文字が切れる

    ラベルのテキスト下1ピクセルが切れる
    コンポーネントにラベルを設定すると、テキストの下1ピクセルが切れてしまうことがあります。たとえば図1は、RadioButtonコンポーネントのインスタンスにラベルを設定した例です。左がデフォルトの下1ピクセルが切れたテキスト、右がその問題を修正した後のラベルの状態です。

     
    図1■テキストの下1ピクセルが切れたラベル(左)と、その問題を修正したラベル(右)

    >>全文へ

  • TextField.textプロパティをwatchすると既定値が取得できない

    Object.watchメソッドは、指定したプロパティの値が変更されたときにコールバック関数を呼出します。ところが、TextField.textプロパティを対象にすると、コールバック関数呼出し時に必ずしもすべての情報が正しく受取れません。

    >>全文へ

  • 自動フォーマットでスクリプトの動作が変わる

    ひさし貸し母屋取られるelseかな
    「ひさし(庇)を貸して母屋を取られる」ということわざがあります。[アクション]パネルの[自動フォーマット]をは、シンタックスをチェックしたり、フォーマットを整えてくれる便利な機能です。しかし、たまに余分なことをしてくれる場合があります。

    >>全文へ

  • MovieClipの_widthと_heightが混乱

    MovieClipの三半器官障害?
    人間をぐるぐると回してやると、目が回ってまっすぐに歩けなくなります。平衡感覚を司る三半器官に、一時的な障害が発生するためということらしいです。

    >>全文へ

  • ()喰い虫(カッコクイムシ)

    生息場所:ノーマルモード
    危険度:中(だけどしつこく、駆除しにくい)
    [見る]

  • まるめ虫

    生息場所:浮動小数点付計算
    危険度:中(駆除はできるが、根絶は不可能)
    [見る]

  • 二星まるめ虫(フタボシマルメムシ)

    生息場所:浮動小数点付計算
    危険度:大(ただし、駆除は簡単)
    [見る]

  • 別冊:「おじゃま虫図鑑」

    生息場所:あちこち
    危険度:ひょっとして一番大(駆除不可能)
    [見る]

  • MovieClip.onRollOverが動作しなくなる

    問題ムービーのレシピ
    この不思議な現象を再現するには、いくつかの条件を満たす必要があります。問題のムービーのつくり方は、つぎの3つのステップです。

    >>全文へ

  • MovieClip.attachMovieで配置したインスタンスがButtonになる

    attachMovieはMovieClipを配置するメソッドのはず
    MovieClip.attachMovieメソッドのシンタックスは、つぎのとおりです。

    myMovieClip.attachMovie( idName, newName, depth [, initObject] )

    >>全文へ

  • #includeが正しく動作しない

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

    #include "filename.as";

    >>全文へ

  • キーフレームをまたいだMovieClip

    MovieClip私は誰?
    2フレームから10フレームにわたるMovieClipを、メインのタイムラインにひとつ配置します。インスタンスの名前は「mc1」とします。そして、以下のオブジェクトアクションを設定しましょう。

    >>全文へ

  • 0.01+0.09=0.0:

    「:」って何?
    「ゲジラって何よ?」というCMがありますが、Flash 5でも思わずそう聞きたくなることがあります。

    n = 0.01+0.09;
    trace (n);
    //出力ウィンドウの結果
    0.0:

    「0.0」までは、まがりなりにも数字です。その後の「:」が何なのでしょう。まるで意味のない値になってしまった、という訳ではないようです。

    >>全文へ

  • getVersionの()が消える[Flash 5]

    ノーマルモードのお節介
    上級者でもシンタックスチェック代わりに、「アクション」パネルを「エキスパートモード」から「ノーマルモード」に切換えるという方は少なくないと思います(筆者もそのひとり)。そうするとこの「ノーマルモード」、たまに、というよりはよく余計なお節介をしてくれます。

    >>全文へ

インタラクティブな演出をしたいときには、ActionScriptが必須。Flashのバージョンが上がるごとに多機能になってきましたが、覚えることも増えました。まずは基本から始めましょう。