allowDomain() メソッドを呼び出して、外部サンドボックスのドメインを許可する必要があります。詳しくは、作成者 (開発者) コントロールを参照してください。
しかし、このプロパティを変更できるのは、ステージ所有者のセキュリティサンドボックス内にあるか、Security
これらのメソッドを呼び出すには、コードは、ステージ所有者と同じドメイン内にある必要はなく、影響を受ける子オブジェクトの所有者と同じドメイン内にある必要があります。
表示リスト内の移動
SWF ファイルから他のサンドボックスからロードされた表示オブジェクトにアクセスする機能は制限されます。
SWF ファイルが別のサンドボックス内にある別の SWF ファイルによって作成された表示オブジェクトにアクセスするには、アクセス先の SWF ファイルが Security
詳しくは、作成者 (開発者) コントロールを参照してください。
Loader オブジェクトでロードされた Bitmap オブジェクトにアクセスするには、URL ポリシーファイルはイメージファイルの元のサーバ上に存在する必要があり、その URL ポリシーファイルは、SWF ファイルのドメインに、Bitmap オブジェクトにアクセスする許可を付与する必要があります(Web サイトのコントロール(ポリシーファイル)を参照)
表示オブジェクトに関連するイベントには、イベントを送出する表示オブジェクトのサンドボックスに基づくセキュリティアクセスの制限があります。
表示リストのイベントは、バブリング段階とキャプチャ段階に分けられます(イベント処理を参照)
バブリングおよびキャプチャ段階では、イベントは表示リスト内のソース表示オブジェクトから親表示オブジェクトに移行します。親オブジェクトがソースの表示オブジェクトと異なるセキュリティサンドボックス内にある場合、キャプチャおよびバブリング段階はその親オブジェクトの下で停止します。ただし、親オブジェクトの所有者とソースオブジェクトの所有者の間に相互の信頼関係がある場合は除きます。この相互の信頼関係は、次のようにして達成できます。
親オブジェクトを所有する SWF ファイルは、ソースオブジェクトを所有する SWF ファイルのドメインを信頼するために、Security
ソースオブジェクトを所有する SWF ファイルは、親オブジェクトを所有する SWF ファイルのドメインを信頼するために、Security
表示オブジェクト以外のオブジェクトから送出されたイベントの場合、セキュリティチェックやセキュリティ関連の影響はありません。
0| お使いのバージョンではない場合
0 およびコンポーネント
前述の例をよく理解しておくと、この例を理解しやすくなります。この例は、次のことを示しています。
このサンプルのアプリケーションのファイルを入手するには、www
このアプリケーションは次のファイルで構成されています。
アプリケーションでロードされる SWF ファイル
NET オブジェクトに変換するタスクを実行するクラス
アプリケーションでロードされる SWF ファイル
NET によって作成されたラッパーアセンブリ
このインターフェイスには、Windows Forms IM クライアントを構成するいくつかのテキストフィールドも含まれています。
コントロールをツールボックスに追加するには :
関数の呼び出し方法と応答方法の詳細は、プレイヤー間で受け渡しできるようフォーマットされ、ブラウザは認識されません。ActiveX コンテナアプリケーションの開発者は、適切なフォーマットの関数呼び出しと応答を認識し、作成可能なコードを作成する必要があります。このイベントへのサブスクライブは、C# コードが ActionScript からの関数呼び出しを受信し、応答する方法になっています。この例のインスタンス名は e です。Call() ステートメントで指定された関数名が格納されています。この場合、イベントを処理するメソッドは、トラフィックマネージャのように機能する switch ステートメントです。前述のコードの switch ステートメントのブランチは、一般的なメソッド呼び出しシナリオを示しています。第 1 パラメータはストリングで、呼び出す関数の名前になります。ActiveX コントロールのプロキシラッパーを使用することは必ずしも重要ではなく、独自のプロキシクラス (例えば、別のプログラミング言語や別のプラットフォーム用) を作成することもできます。プロキシの作成についてはここで詳しく説明しませんが、この例におけるプロキシクラスの内部処理を理解することは有益です。このメソッドにはパラメータが 1 つあり(この例では request)、このパラメータは XML フォーマットされた命令の含まれたストリングです。このプロパティは、関数名やパラメータなど、関数呼び出しに関する情報が XML フォーマットで格納された文字列になっています。この情報をコンテナで使用すると、実行するコードを判別できます。NET オブジェクトに変換しています。
0| お使いのバージョンではない場合
0 およびコンポーネント
ブラウザタイプの検出
この例で示す方法では、次のことを行います。
ブラウザが通信可能なことを確認してから通信を設定することによる、通信の正しい初期化
このサンプルのアプリケーションのファイルを入手するには、www
このアプリケーションは次のファイルで構成されています。
コンテナからメッセージを受信したときに IMManager クラスから送出されるカスタムイベントタイプ
このファイルには、アプリケーションのコンテナ部分を構成するすべての JavaScript 関数が格納されています。ブラウザの仕組みは複雑であり、また、ブラウザ内部で実行されるページレンダリング処理が不明であることから、HTML ページ上の JavaScript コードが最初に実行される前に SWF ドキュメントのコールバックを登録できる保証はありません。したがって、JavaScript から SWF ドキュメントの関数を呼び出す前に、SWF ドキュメント側の接続受け付け準備ができたことを通知するために、必ず SWF ドキュメントから HTML ページへの呼び出しを実行してください。ブラウザの通信準備ができたことを判定する最初の手順は、次のように IMManager コンストラクタで実行されます。利用可能であれば、通信の設定手順が開始されます。
外部アプリケーションと通信しようとするとセキュリティ例外やその他のエラーが発生することがあるため、コードは try ブロックでラップされています(簡単にするため、対応する catch ブロックは省略されています)
コンテナが初期化されると、このメソッドから true が返されます。上記の例で示したように、ブラウザの準備ができたことがコードで判定されると、setupCallbacks() メソッドが呼び出されます。このメソッドは、ユーザーが自分の「交信パートナー」に新しいメッセージを送信するときに呼び出されます。call() を使用して呼び出され、ブラウザに新しいメッセージが通知されます。通信は双方向形式でサポートされ、Introvert IM アプリケーションも例外ではありません。コードのこの行では、次の 3 つのことが行われます。getSWF() に渡されたパラメータによって、HTML ページ内に複数の SWF ファイルが存在する場合にどのブラウザオブジェクトが返されるかが決まります。
ブラウザタイプの検出
ブラウザがコンテンツにアクセスする方法は様々であるため、この例の getSWF() JavaScript 関数に示すように、必ず JavaScript を使用してユーザーが実行しているブラウザを検出すること、およびウィンドウまたはドキュメントオブジェクトを使用して、ブラウザ固有のシンタックスに従ってムービーにアクセスすることが重要です。スクリプトによってユーザーのブラウザタイプが検出されない場合、HTML コンテナの SWF ファイルを再生したときに予期しない動作が発生することがあります。
0| お使いのバージョンではない場合
0 およびコンポーネント
例外および戻り値に対する処理
ページプロパティの操作
ベクター形式またはビットマップ形式のレンダリング
プリントジョブステートメントのタイミング
Flash Player と AIR では、プリントジョブの開始、プリンタのページ設定の読み込み、OS に対するプリントジョブのコンテンツの送信、およびユーザーまたはシステムによってプリントジョブがキャンセルされたかどうかの確認を実行します。その他の処理(プリンタ固有のダイアログボックスの表示、スプールされたプリントジョブのキャンセル、プリンタのステータスに関するレポートなど)は、すべて OS で実行されます。Flash Player と AIR はプリントジョブの開始や書式指定に問題がある場合に応答できますが、OS のプリントインターフェイスから取得した特定のプロパティや状態についてのみレポートを返すことができます。アプリケーション開発者は、レポートされたプロパティや条件に応じて何らかの処理を実行するコードを用意する必要があります。
例外および戻り値に対する処理
これらのメソッドに対する呼び出しを次のように if ステートメントで囲むと、続行する前にキャンセルされたかどうかを簡単にチェックできます。これらのエラーをキャッチすることにより、ユーザーに情報と対処方法の選択肢を示すことができます。addPage() メソッドが失敗した場合は、別の関数を呼び出すか、現在のプリントジョブを停止する方法もあります。catch ステートメント内に埋め込むことによってキャッチできます。この例では、[params] はパラメータのプレースホルダで、実際にプリントする内容を指定します。addPage() を使用してコンテンツを追加し、それによって例外(ユーザーがプリントジョブをキャンセルした場合など)が発生するかどうかを確認できます。例外が発生した場合は、catch ステートメントにロジックを追加して、ユーザー(または Flash Player か AIR)に情報と対処方法の選択肢を示すか、現在のプリントジョブを停止できます。
Flash Player または AIR がプリントジョブをプリンタに送信する際に問題が発生した場合(プリンタがオフラインになっていた場合など)も、同様にその例外をキャッチし、情報と対処方法の選択肢をユーザー(または Flash Player か AIR)に示すことができます(メッセージテキストと警告をアニメーションで表示することなどが考えられます)
例えば、次のコードに示すように、テキストフィールドに if
else ステートメントで新しいテキストを割り当てることができます。実際に動作するサンプルについては、例 : 拡大 / 縮小、トリミング、および応答を参照してください。
ページプロパティの操作
したがって、設定を変更することはできませんが、これらの情報を使用することで、コンテンツを現在の設定に適した形式に整形してプリンタに送信できます。詳しくは、サイズ、拡大率、用紙の向きの設定を参照してください。
ベクター形式またはビットマップ形式のレンダリング
プリントジョブで各ページをベクターグラフィックとしてスプールするか、ビットマップイメージとしてスプールするかは、手動で設定できます。場合によっては、ベクター形式でプリントするとスプールファイルが小さくなり、画質もビットマップ形式でプリントするより向上することがあります。ただし、コンテンツにビットマップイメージが含まれている場合、アルファ透明度やカラー効果を再現するには、ページをビットマップイメージとしてプリントする必要があります。また、PostScript 非対応のプリンタでは、ベクターグラフィックは自動的にビットマップイメージに変換されます。第 3 パラメータの値を指定しない場合、そのプリントジョブではデフォルトのベクター形式のプリントが実行されます。
プリントジョブステートメントのタイミング
ただし、印刷ダイアログボックスで「OK」ボタンをクリックすると印刷ステータス情報が表示されるので、ページをスプーラに送信した直後に PrintJob
send() 呼び出しの格納されたフレームに遅延が到達すると、印刷処理が遅延します。0 には、15 秒間のスクリプトタイムアウトの制限があります。したがって、プリントジョブのシーケンスにおける主要なステートメント間の時間が 15 秒を超えてはなりません。つまり、15 秒間のスクリプトタイムアウトの制限は、次の間隔に適用されます。
0| お使いのバージョンではない場合
0 およびコンポーネント
ネットワーキングとコミュニケーション
ソケットの接続
0 で可能なソケットの接続には、XML ソケット接続とバイナリソケット接続の 2 種類があります。XML ソケットでリモートサーバーに接続する場合は、明示的に接続を閉じるまで維持されるサーバー接続を確立できます。これにより、サーバー接続を確立し直す処理を繰り返すことなくサーバー/クライアント間で XML データの交換を継続できます。XML ソケットサーバを使用するもう 1 つのメリットは、ユーザが明示的にデータを要求する必要がないことです。要求がなくてもサーバーからのデータ送信ができ、また、XML ソケットサーバーに接続済みのクライアントすべてに対してデータを送信できます。XML ソケット接続では、ターゲットサーバー上にソケットポリシーファイルが置かれている必要があります。詳しくは、Web サイトのコントロール(ポリシーファイル)およびソケットへの接続を参照してください。バイナリソケット接続は、XML ソケットに似ていますが、クライアント / サーバ間で交換するデータが XML パケットである必要はないという点が異なります。データはバイナリ情報として伝送されます。これは XMLSocket クラスに似ていますが、送受信するデータの形式に制約がありません。Socket クラスは、バイナリプロトコルを使用するサーバーとの通信に役立ちます。したがって、Flash Player から電子メールサーバーやニュースサーバーに接続することもできます。Flash Player からサーバーに直接接続するには、サーバーが使用するバイナリプロトコルに従う必要があります。バイト順序にビッグエンディアンを使用するサーバーと、リトルエンディアンを使用するサーバーがあります。標準の「ネットワークバイト順序」がビッグエンディアンとされているので、インターネット上の大部分のサーバはビッグエンディアンのバイト順序を使用しています。また、Intel® x86 アーキテクチャでリトルエンディアンが採用されているので、リトルエンディアンのバイト順序が使用されることもよくあります。データを送受信する対象のサーバーに適したエンディアンバイト順序を使用してください。これは、Java および公式なネットワークバイト順序に適合するためです。utils パッケージ) で実装するすべてのメソッドを継承しています。Socket の読み書きにはそれらのメソッドを使用してください。接続が維持されるため待ち時間の問題が解消されるので、チャットやマルチプレーヤーゲームなどのリアルタイムアプリケーションによく使用されます。従来の HTTP ベースによるチャットソリューションでは、サーバーへのポーリング処理を頻繁に実行し、HTTP リクエストを使用して新しいメッセージをダウンロードします。それに対し、XMLSocket によるチャットソリューションではサーバーとの接続を開いたまま維持するため、クライアントから要求されなくても、新着メッセージをサーバーから直ちに送信できます。ソケット接続を確立するには、ソケット接続の要求を受け付けて SWF ファイルに応答を送るサーバーサイドアプリケーションを作成する必要があります。XMLSocket クラスを使用するには、サーバーコンピュータで動作するデーモンが XMLSocket クラスで使用するプロトコルを処理できる必要があります。プロトコルの説明を次の一覧に示します。XMLSocket クラスは、ファイアウォールをトンネリングによって自動的に通過することはできません。注意: XMLSocket オブジェクトと通信できるようにサーバーを設定することは、場合によっては困難が伴います。リアルタイムのインタラクティブ機能を必要としないアプリケーションでは、XMLSocket クラスではなく URLLoader クラスを使用してください。send() メソッドを使用し、ソケット接続を介してサーバとの間で XML を送受信できます。send() メソッドは、ソケット接続で指定されたサーバに XML オブジェクトを送信します。
接続が切れる (モデムの切断など)
接続を受け付け、受信したメッセージをコマンドプロンプトウィンドウに表示します。デフォルトでは新しいサーバーをローカルマシンのポート番号 8080 に作成しますが、サーバーを起動する際のコマンドラインでポート番号を変更することもできます。新しいテキストドキュメントを作成し、次のコードを入力します。class ファイルはローカルコンピュータ上またはネットワーク上のどこに配置しても使用できます。Web サーバのルートディレクトリに置く必要はありません。send() メソッドは、データが正常に転送されたかどうかを示す値を返しません。データの送信中にエラーが発生した場合は、IOError エラーがスローされます。XML ソケットサーバに送信する個々のメッセージには、末尾に終端の改行文字(¥n)を付ける必要があります。
0| お使いのバージョンではない場合
0 およびコンポーネント
ネットワーキングとコミュニケーション
外部データの操作
外部ドキュメントからのデータのロード
外部スクリプトとの通信
0 には、外部ソースからデータをロードするメカニズムが含まれます。ソースは、テキストファイルなどの静的コンテンツや、データベースからデータを取得する Web スクリプトなどの動的コンテンツである場合があります。このデータは様々な方法でフォーマットすることができ、ActionScript の機能によりデータのデコードやアクセスが可能になります。また、データ取得のプロセスの一部として、外部サーバーにデータを送信することもできます。onLoad の各イベントハンドラのサポートに比べて大きく改良されています。イベント処理について詳しくは、イベント処理を参照してください。
ダウンロードの進捗状況(ロード済みバイト数と合計バイト数)は、flash
ファイルのダウンロードが正常に完了すると、flash
ロードされたデータは、UTF-8 または UTF-16 のエンコード形式からストリングにデコードされます。0 コードは次のようになります。load() メソッドを使用してリモートスクリプトに要求を送信しています。URL リクエストで渡すパラメータを指定するには、次の 3 つの方法があります。アンパサンドには特別な意味があり、区切り文字として機能するからです。例えば、アンパサンドを渡す場合、アンパサンドはパラメータの区切り記号として機能するので、& から %26 に変更することによってアンパサンドを URL エンコードする必要があります。
外部ドキュメントからのデータのロード
0 で作成する場合、外部のファイルまたはサーバサイドスクリプトからデータをロードするようにすると、ActionScript ファイルの編集と再コンパイルを必要としない動的なアプリケーションを実現できます。例えば、「今日の一言」アプリケーションを作成する場合、サーバサイドスクリプトで、データベースからランダムに選んだ一言を取得して 1 日 1 回テキストファイルに保存するようにします。そうすれば、ActionScript アプリケーションでは静的なテキストファイルをロードするだけでよく、毎回データベースへのクエリを発行する必要はなくなります。txt" という外部のテキストファイルから内容をロードします。上記のコードの一部を、次のように簡素化できます。
実行時にロードされる外部ドキュメント params
txt には、次のデータが含まれています。各パラメータの内容は、ストリングとして解析されるカンマ区切りリストです。split() メソッドを使用して分割し、配列に変換できます。外部データファイル内の変数名には、予約語やプログラミング言語の構成要素を含めないでください。そのような変数名を使用すると、コードの解読やデバッグ作業が困難になります。リモートドキュメントに名前と値のペアが含まれる場合、次のように URLVariables クラスを使用してロードされたファイルのコンテンツを渡すことにより、データを解析することができます。外部ファイルからの個々の名前と値のペアは、URLVariables オブジェクトのプロパティとして作成されます。このコード例にある variables オブジェクトの各プロパティは、ストリングとして扱われます。
名前 / 値ペアの値がアイテムのリストである場合は、次のように String
split() メソッドを呼び出すことによってストリングから配列に変換できます。外部テキストファイルから数値データをロードするには、トップレベル関数の int()、uint()、Number() などを使用して値を数値に変換する必要があります。
ファイルのダウンロードが完了すると、Event
このインスタンスは XML のメソッドとプロパティを使用して解析できます。
外部スクリプトとの通信
URLVariables クラスを使用すると、外部データファイルからデータをロードできるだけでなく、サーバサイドスクリプトに変数を送信し、サーバの応答を処理することもできます。例えば、ゲームを作成する場合、ユーザの得点をサーバに送信して高得点者リストに掲載できるかどうかを確認したり、ユーザのログイン情報をサーバに送信して検証したりする場合などが考えられます。サーバーサイドスクリプトでは、ユーザー名とパスワードを処理してデータベースに照会し、入力されたユーザー情報が有効かどうかの確認を応答として返します。load() メソッドを呼び出してリクエストを送信します。cfm ドキュメントのコンテンツが含まれています。
0 * 高度なテキストレンダリング
0| お使いのバージョンではない場合
0 およびコンポーネント
高度なテキストレンダリング
埋め込みフォントの使用
シャープ、太さ、およびアンチエイリアスの制御
0 では、埋め込みフォント、アンチエイリアス設定、アルファチャンネル制御、およびその他固有の設定を含む、表示するテキストのプロパティを制御する様々なクラスが flash
text パッケージに用意されています。0 言語およびコンポーネントリファレンス』で詳細に説明しています。
埋め込みフォントの使用
そのようなフォントがシステムに見つからない場合や、名前が同じでバージョンが若干異なるフォントが存在している場合には、テキストの表示が、意図したものとはかなり異なるものになることがあります。意図したとおりに適切なフォントがユーザーに表示されるようにするには、アプリケーションの SWF ファイルにそのフォントを埋め込みます。埋め込みフォントにはいくつかの利点があります。埋め込みフォントの文字はアンチエイリアス処理されるので、エッジが滑らかに見えます。テキストのサイズが大きい場合に特によくわかります。埋め込みフォントを使用しているテキストは回転することができます。埋め込みフォントを使用しているテキストは透明や半透明にすることができます。埋め込みフォントを使用する場合の最大の制約は、そのためにアプリケーションのファイルサイズまたはダウンロードサイズが増加することです。フォントファイルをアプリケーションの SWF ファイルに埋め込む方法は、開発環境によって異なります。フォントを埋め込んだ後は、次の作業を行って、TextField で正しい埋め込みフォントが使用されるようにします。埋め込みフォントを指定するとき、 fontFamily プロパティに格納する名前は 1 つだけにする必要があります。このプロパティでは、複数のフォント名を含むカンマ区切りリストを使用することはできません。埋め込みフォントを指定する場合、font-family プロパティに格納する名前は 1 つだけにする必要があります。名前のリストを格納しないでください。アプリケーションでは次のような様々な方法でフォントを埋め込むことができます。ステージ上にある TextField のフォントとスタイルのプロパティを設定し、[フォントを埋め込む] チェックボックスをクリックします。
フォントシンボルの作成と参照
埋め込みフォントシンボルを含むランタイム共有ライブラリの作成と使用
アプリケーションでフォントを埋め込む方法について詳しくは、『Flash ユーザガイド』の「ダイナミックテキストフィールド用またはテキスト入力フィールド用の埋め込みフォント」を参照してください。
シャープ、太さ、およびアンチエイリアスの制御
Flash Player または AIR では、テキストのサイズ変更、色の変更、または様々な背景でテキストを表示する場合に、シャープネス、太さ、アンチエイリアスなどのテキスト表示制御の設定がデフォルトで決定されます。非常に小さなテキスト、非常に大きなテキスト、様々な独自の背景を使用するテキストを使用する場合など、これらの設定を制御したい場合があります。これらのクラスにより、埋め込みテキストのレンダリング品質を正確に制御することができます。埋め込みフォントについて詳しくは、埋め込みフォントの使用を参照してください。
0| お使いのバージョンではない場合
0 およびコンポーネント
表示オブジェクトのフィルタ処理 / 使用可能な表示フィルタ
GlowFilter クラスでは、表示オブジェクトに照明効果を適用し、オブジェクトの下から光を輝かせ、弱いグローを作成します。ドロップシャドウフィルタと同様に、グローフィルタも光源の距離、角度、およびカラーを変更できるプロパティを備えており、様々な効果を生成できます。また、グローフィルタには、内側グロー、外側グロー、ノックアウトモードなどのグローのスタイルを変更するためのオプションもいくつか用意されています。次のコードでは、Sprite クラスを使用して十字形を作成し、その十字形にグローフィルタを適用します。
0 * 正規表現のインスタンスの作成
0| お使いのバージョンではない場合
0 およびコンポーネント
正規表現の使用 / 正規表現のシンタックス
正規表現のインスタンスの作成
正規表現のインスタンスを作成するには 2 つの方法があります。1 つは正規表現を区切り文字のスラッシュ(/)で囲んで記述する方法であり、もう 1 つは new コンストラクタを使用する方法です。例えば、次の正規表現はいずれも同等です。ストリングリテラルを引用符で囲むのと同じように、正規表現リテラルを記述する場合はスラッシュで囲みます。正規表現のうち 2 つのスラッシュで囲んだ部分がパターンです。それに加え、後ろのスラッシュに続いてフラグを指定することもできます。フラグは正規表現を構成する要素と見なされますが、パターンとは区別されています。new コンストラクタを使用する場合は、2 つのストリングによって正規表現を定義します。次のように、第 1 のストリングでパターンを指定し、第 2 のストリングでフラグを指定します。スラッシュで囲んだ正規表現定義の中にスラッシュを含める場合は、中のスラッシュの直前にエスケープ文字の円記号(¥)を置く必要があります。例えば、次の正規表現は 1/2 というパターンに一致します。new コンストラクタによる正規表現定義の中に引用符を含める場合は、ストリングリテラルの場合と同じように、中の引用符の直前にエスケープ文字の円記号(¥)を置く必要があります。スラッシュで囲んだ正規表現定義の中に引用符を含める場合は、エスケープ文字の円記号を付けないでください。同じように、 new コンストラクタによる正規表現定義の中にスラッシュを含める場合は、エスケープ文字の円記号を付けないでください。また、new コンストラクタによる正規表現定義の中で、円記号(¥)から始まるメタシーケンス(任意の数字を意味する ¥d など)を使用する場合は、次のように円記号を二重に入力する必要があります。この場合は、 RegExp() コンストラクタメソッドの最初のパラメータがストリングで、ストリングリテラルの中で単一の円記号を認識させるためには円記号を二重に入力する必要があるため、円記号を二重に入力します。以降のセクションでは、正規表現パターンの定義に使用するシンタックスについて説明します。フラグについて詳しくは、フラグとプロパティを参照してください。
0| お使いのバージョンではない場合
0 およびコンポーネント
エラーの種類
アプリケーションの開発中および実行中に発生するエラーは、様々な種類があり、使用する用語が異なります。主要なエラーの種類と用語について簡単に説明します。コンパイル時エラーは、コードに文法的な問題があるためアプリケーションを構築できないことを示します。ランタイムエラー : コンパイル済みのアプリケーションを実行している際に発生します。多くの場合、発生と同時にランタイムエラーを処理してユーザに報告し、アプリケーションの実行を継続するために必要な処置をとることができます。致命的なエラー (リモート Web サイトへの接続失敗、必須データのロード失敗など) の場合は、アプリケーションを安全に終了するための手段としてエラー処理を使用できます。同期エラー:関数呼び出しの際に発生するランタイムエラーです。ほとんどのエラーは同期的に発生(該当するステートメントを実行した時点で発生)するので、制御フローはすぐに最も適切な catch ステートメントに渡されます。次の抜粋コードの例では、プログラムがファイルをアップロードしようとする前に browse() メソッドを呼び出していないのでランタイムエラーがスローされます。この場合、ファイルをアップロードしようとする前に browse() メソッドが呼び出されていないことが Flash Player によって検出されるので、ランタイムエラーが同期的にスローされます。同期エラー処理について詳しくは、アプリケーションの同期エラーの処理を参照してください。非同期エラー:実行時の様々な時点で発生するランタイムエラーで、イベントを生成して、イベントリスナーによってキャッチされるエラーです。非同期操作とは、関数が操作を開始してその完了を待たない操作です。アプリケーションまたはユーザーが何らかの操作を試すのを待つために、エラーイベントリスナーを作成し、その操作が失敗した場合にはイベントリスナーでエラーをキャッチして、そのエラーイベントに応答することができます。イベントリスナーはイベントハンドラ関数を呼び出して、エラーイベントに有効な方法で応答します。例えば、イベントハンドラは、ユーザーにエラーの解決を促すダイアログボックスを起動できます。前に示した、ファイルアップロードの同期エラーの例で考えてみます。例えば、アップロードが開始したときには open イベントが送出され、ファイルのアップロードが正常に完了したときには complete イベントが送出されます。イベント処理は非同期なので(つまり、事前に設定済みの時刻に発生するのではないので)、次のように addEventListener() メソッドを使用して、これら特定のイベントを監視する必要があります。非同期エラー処理について詳しくは、エラーイベントへの応答とステータスを参照してください。不明な(キャッチされない)例外:それらのエラーに応答するための catch ステートメントなどの対応ロジックがないままスローされたエラーです。アプリケーションでエラーがスローされたとき、エラー処理のための該当する catch ステートメントまたはイベントハンドラが現在のレベルまたはその上位レベルで見つからない場合、そのエラーは不明な例外と見なされます。実行時に Flash Player は、エラーによって現在の SWF ファイルが停止しない場合、不明なエラーを意図的に無視して再生を継続しようとします。ユーザ自身が必ずしもエラーを解決できるとは限らないからです。不明なエラーを無視するプロセスは「説明のない異常終了」と呼ばれ、アプリケーションのデバッグを困難にする可能性があります。不明なエラーに応答するために、デバッガバージョンの Flash Player では、実行中のスクリプトを終了し、その不明なエラーを trace ステートメントの出力に表示するか、エラーメッセージをログファイルに書き込みます。また、例外オブジェクトが Error クラスまたはそのサブクラスのインスタンスである場合は、getStackTrace() メソッドが呼び出され、スタックトレース情報が trace ステートメントまたはログファイルに出力されます。
0| お使いのバージョンではない場合
0 およびコンポーネント
インデックス配列では、格納した一連の値に、符号なし整数値によるインデックスを指定してアクセスします。配列内の先頭の要素は常にインデックス 0 で示され、それに続く個々の要素は順に 1 ずつ大きい数のインデックスで示されます。インデックス配列のインデックスに使用する数値は、符号なし 32 ビット整数です。この最大サイズより大きい配列を作成しようとすると、ランタイムエラーが発生します。インデックス配列の個別の要素にアクセスするには、配列アクセス([])演算子を使用して、アクセスする要素のインデックスの位置を指定します。
配列変数名とその後に続く角括弧で囲まれたインデックスの組み合わせは、単一の識別子として機能します(つまり、変数名として可能などのような組み合わせでも使用できます)
代入ステートメントの左側に名前とインデックスを使用して、インデックス配列要素に値を割り当てることができます。同様に、代入ステートメントの右側に名前とインデックスを使用して、インデックス配列要素の値を取得できます。
また、明示的な値を指定するのではなく、角括弧で囲まれた変数を使用することもできます(変数は、uint、正の int、正の整数の Number インスタンスなど、負でない整数値を含む必要があります)
このテクニックは、一般的に、インデックス配列内の要素を「ループ処理」して一部またはすべての要素に対して処理を実行する場合に使用されます。このテクニックを説明するコード リストを次に示します。インデックス配列の最初の型は、Array クラスです。Array インスタンスには、あらゆるデータ型の値を格納できます。同一の Array オブジェクトに、異なるデータ型のオブジェクトを格納できます。つまり、Vector インスタンスのすべての要素は必ず同一のデータ型を含みます。5 以降で使用できます。Vector 変数を宣言するか、または Vector オブジェクトをインスタンス化するときは、ベクターが含むことのできるオブジェクトのデータ型を明示的に指定します。指定したデータ型は、ベクターのベース型と呼ばれます。実行時およびコンパイル時(strict モード)には、Vector 要素の値を設定したりベクターから値を取得したりするコードはすべて検証されます。追加または取得されるオブジェクトのデータ型がベクターのベース型と一致しない場合は、エラーが発生します。データ型の制限に加えて、Vector クラスには Array クラスと区別される次のようなその他の制限があります。ベクターは高密度の配列です。ただし、ベクターはインデックスに値(つまり、null)を含む必要があります。ベクターは、必要に応じて固定長にすることができます。固定長の場合、ベクターが含む要素数を変更することはできません。Vector の要素へのアクセスは範囲チェックが行われます。
現在の最後のインデックスを越えて値を設定することはできません(つまり、既存のインデックスまたはインデックス [length] でのみ値を設定することができます)
このような制限の結果として、ベクターでは、要素がすべて単一クラスのインスタンスとなる Array インスタンスにはない、次の 2 つの主要な利点が得られます。パフォーマンス: Array インスタンスを使用するよりも、Vector インスタンスを使用する方が、配列要素のアクセスと繰り返しが高速になります。型の安全性: strict モードでは、コンパイラでデータ型エラーを特定できます。このようなエラーの例としては、ベクターに不正なデータ型の値を割り当てたり、ベクターから値を読み取るときに誤ったデータ型を要求したりすることが挙げられます。実行時には、Vector オブジェクトにデータを追加するときや、このオブジェクトからデータを読み取るときにもデータ型が検証されます。ただし、push() メソッドまたは unshift() メソッドを使用してベクターに値を追加する場合、引数のデータ型はコンパイル時にチェックされないことに注意してください。これらのメソッドを使用する場合でも、実行時には値が検証されます。これらの追加の制限および利点以外では、Vector クラスは Array クラスに非常によく似ています。Vector オブジェクトのプロパティとメソッドは、配列のプロパティとメソッドと似ており、ほとんどの部分は同じです。すべての要素が同じデータ型を持つ配列を使用する場合は、Vector インスタンスが推奨されます。
配列要素の挿入
値の取得と配列要素の削除
配列のソート
配列のクエリ
0 * カレンダー日付と時刻の管理
0| お使いのバージョンではない場合
0 およびコンポーネント
日付と時刻の操作
カレンダー日付と時刻の管理
時間単位の値の取得
日付と時刻の加算および減算
タイムゾーン間の変換
0 では、カレンダー日付と時刻の管理に関するすべての機能がトップレベルの Date クラスにまとめられています。Date クラスには、世界標準時 (UTC) または何らかのタイムゾーンに基づくローカル時間において日付と時刻を処理するメソッドおよびプロパティがあります。UTC は時刻の基準となるもので、グリニッジ標準時 (GMT) と基本的には同じです。Date クラスは、すべてのコアクラスの中で最も多くの用途に使用できるコンストラクタメソッドを備えています。このコンストラクタは次のように 4 つの方法で使用できます。(1)パラメータを指定しない場合、Date() コンストラクタでは、動作環境のタイムゾーンにおけるローカル時間で現在の日付と時刻を格納した Date オブジェクトを返します。次に、その例を示します。パラメータは UTC の 1970 年 1 月 1 日を起点とする経過ミリ秒数として解釈されますが、 返される Date オブジェクトが示す値は、(UTC 用メソッドを使用して取得および表示しない限り) ローカルのタイムゾーンで表示されます。ミリ秒数を表す 1 個のパラメータを指定して Date オブジェクトを新規作成する際は、ローカル時間と UTC の間のタイムゾーンの時差に注意してください。(3)複数の数値パラメータを Date() コンストラクタに渡すこともできます。その場合、コンストラクタでは各パラメータを順に年、月、日、時、分、秒、ミリ秒の値と解釈し、それらに基づいた Date オブジェクトを返します。パラメータの値は UTC ではなくローカル時間を表すものと見なされます。(4)1 つのストリングパラメータを Date() コンストラクタに渡した場合、コンストラクタではそのストリングを解析して日付と時刻の要素を抽出しようと試み、それらに基づいた Date オブジェクトを返します。catch ブロックで囲んで、解析エラーをトラップします。0 言語およびコンポーネントリファレンス』に示されています。次のステートメントでは、新しい Date オブジェクトの初期化にストリング値を使用しています。Date() コンストラクタがストリングパラメータの解析に失敗した場合、例外が発生するのではなく、作成した Date オブジェクトに無効な日付値が格納されます。
時間単位の値の取得
Date オブジェクトに格納された各種の時間単位の値は、Date クラスのプロパティとメソッドを使用して取得できます。Date オブジェクトに格納されている時間単位の値を取得するには、次の各プロパティを使用します。また、Date クラスにはそれぞれの時間単位の値を取得する方法が複数用意されています。例えば、Date オブジェクトに格納された月の値は次の 4 とおりの方法で取得できます。4 つの方法は効率面ではいずれも同等なので、必要に応じて便利な方法を使用してください。上記のプロパティはそれぞれ、日付の値全体の一部を構成する要素を表しています。
日付と時刻の加算および減算
Date クラスでは、日付と時刻に対して加算および減算を実行できます。日付値は、内部的にはミリ秒換算で維持されているので、Date オブジェクトとの間で加算または減算を行う前に、その他の値をミリ秒に変換する必要があります。日付と時刻の加算および減算を数多く実行するアプリケーションの場合は、次のように、共通の時刻単位値をミリ秒換算で保持する定数を作成すると便利です。これで、標準の時刻単位を使用して容易に日付の演算を実行できます。日付値を設定するもう 1 つの方法は、ミリ秒を表す 1 個のパラメータを使用して新しい Date オブジェクトを作成することです。例えば、次のコードでは、ある日付に日数を 30 加えた日付を計算します。
タイムゾーン間の変換
日付と時刻の演算処理は、あるタイムゾーンを別のタイムゾーンに換算する必要がある場合に便利です。値が分単位で返されるのは、タイムゾーンによっては 1 時間未満の単位で時差が設定されており、隣接するタイムゾーンとの差が 30 分という場合があるためです。次の例では、タイムゾーンのオフセットを使用してローカル時間の日付を UTC に変換します。まずミリ秒単位のタイムゾーン値を算出し、それに基づいて Date オブジェクトの値を調整するという方法で処理を実行しています。
0| お使いのバージョンではない場合
0 およびコンポーネント
クラスによる列挙
列挙は、値の小さなセットをカプセル化するために作成するカスタムデータ型です。ただし、クラスと静的定数を使用して列挙を作成できます。慣例では、列挙クラスはクラスを拡張する必要がないので、final 属性で宣言されます。このクラスは静的メンバーのみで構成されます。つまり、クラスのインスタンスを作成しません。代わりに、次の抜粋されたコードに示すように、クラスオブジェクトを通じて直接列挙値にアクセスします。リテラルのストリング値または数値ではなく列挙を使用する利点は、表記ミスを見つけやすいことです。リテラル値を使用した場合、単語を間違って入力するか数値を間違って使用してもコンパイラに認識されません。前の例では、次のコードの抜粋に示すように、列挙定数の名前が間違っている場合にコンパイラはエラーを生成します。しかし、次のようにリテラルストリング値にスペルミスがある場合、コンパイラはエラーを生成しません。列挙を作成するもう 1 つの方法でも、列挙の静的プロパティで別のクラスを作成することが必要になります。ただし、この方法は、静的プロパティにストリング値または整数値ではなくクラスのインスタンスが含まれる点で異なります。例えば、次のコードは、曜日に対する列挙クラスを作成します。0 ではこの方法は使用されていませんが、この方法により型チェックの向上を希望する多くの開発者によって採用されています。例えば、列挙値を返すメソッドは、その戻り値を列挙データ型に制限することができます。次のコードは、曜日を返す関数だけでなく、列挙型を型注釈として使用する関数呼び出しも示します。Day クラスを拡張することにより、整数を各曜日に関連付け、曜日のストリング表現を返す toString() メソッドを提供することもできます。必要に応じて、この方法で Day クラスの機能拡張を実習として試してみることができます。
0| お使いのバージョンではない場合
0 およびコンポーネント
メソッドは、クラス定義に含まれる関数です。クラスのインスタンスが作成されると、メソッドはそのインスタンスにバインドされます。メソッドは、クラス外で宣言された関数とは異なり、その関連付けられているインスタンスと別個に使用することはできません。次の関数ステートメントを使用できます。または、関数式を割り当てる変数を次のように使用することもできます。多くの場合、関数式ではなく関数ステートメントを使用するのは、次のような理由のためです。関数ステートメントは、関数式より簡潔で読みやすくなります。詳しくは、メソッドのオーバーライドを参照してください。関数ステートメントでは、識別子 (関数の名前) とメソッド本体内のコードがより強力に結合されます。変数の値は代入ステートメントで変更できるので、変数とその関数式の結合をいつでも切り離すことができます。var ではなく const で変数を宣言するとこの問題を回避できますが、コードが読みにくくなり、override キーワードと final キーワードが使用できなくなるので、最適な方法とは言えません。関数式を使用する必要があるのは、関数をプロトタイプオブジェクトに関連付ける場合などです。詳しくは、プロトタイプオブジェクトを参照してください。コンストラクタメソッドは、単にコンストラクタと呼ばれることもあり、定義されたクラスと同じ名前を共有する関数です。コンストラクタメソッドに含まれるコードは、クラスのインスタンスが new キーワードで作成されるときに実行されます。status 変数の初期値は、コンストラクタ関数内で設定します。コンストラクタメソッドにはパブリックだけを指定できますが、public 属性を使用するかどうかは任意です。また、ユーザー定義の名前空間をコンストラクタメソッドで使用することもできません。コンストラクタは、super() ステートメントを使用して直接のスーパークラスのコンストラクタを明示的に呼び出すことができます。スーパークラスのコンストラクタを明示的に呼び出さない場合は、コンパイラによってコンストラクタ本体の最初のステートメントの前に呼び出しが自動的に挿入されます。スーパークラスへの参照として super 接頭辞を使用し、スーパークラスのメソッドを呼び出すこともできます。そうしないと、super 参照が意図したとおりに動作しません。コンストラクタ内で return ステートメントを使用することはできますが、値を返すことはできません。つまり、return ステートメントに式または値を関連付けることはできません。したがって、コンストラクタメソッドは値を返すことができず、戻り値の型を指定できません。クラスでコンストラクタメソッドを定義しなかった場合、コンパイラが自動的に空のコンストラクタを作成します。クラスが別のクラスを拡張する場合、コンパイラには、そのコンパイラが生成するコンストラクタ内の super() 呼び出しが含まれます。静的メソッドは、クラスメソッドとも呼ばれ、static キーワードで宣言されたメソッドです。静的メソッドは、クラスのインスタンスではなくクラスに関連付けられ、個々のインスタンスの状態以外のものに影響を与える機能のカプセル化に役立ちます。静的メソッドはクラス全体に関連付けられるため、クラスのインスタンスではなくクラスからのみアクセスできます。静的メソッドは、クラスインスタンスの状態に影響を与えるだけではない機能のカプセル化に役立ちます。つまり、メソッドにクラスインスタンスの値に直接影響しない機能がある場合、そのメソッドは静的です。例えば、Date クラスには、ストリングを取得して数値に変換する parse() という静的メソッドがあります。このメソッドは、クラスの個々のインスタンスに影響を与えないため静的です。parse() メソッドは、日付値を表すストリングを取得し、そのストリングを解析して、Date オブジェクトの内部表現と互換性がある形式で数値を返します。このメソッドは、Date クラスのインスタンスに適用しても意味がないため、インスタンスメソッドではありません。getMonth() メソッドは、Date インスタンスの特定のコンポーネント月を取得することで、インスタンスの値に対して直接実行されるため、インスタンスメソッドです。静的メソッドは個々のインスタンスにバインドされていないので、静的メソッドの本体内で this または super キーワードを使用できません。this 参照と super 参照は、インスタンスメソッドのコンテキスト内でのみ有効です。0 では静的メソッドは継承されません。詳しくは、継承されない静的プロパティを参照してください。インスタンスメソッドは、static キーワードを使用せずに宣言されたメソッドです。インスタンスメソッドは、クラス全体ではなくクラスのインスタンスに関連付けられ、クラスの個々のインスタンスに影響を与える機能の実装に役立ちます。インスタンスメソッドの本体内では、静的変数およびインスタンス変数はスコープ内にあります。つまり、同じクラス内で定義された変数は、単純な識別子を使用して参照できます。これは、スーパークラスの静的変数でも同じです。0 では静的プロパティは継承されませんが、スーパークラスの静的プロパティはスコープ内です。インスタンスメソッドの本体内の this 参照の値は、メソッドが関連付けられているインスタンスへの参照です。次のコードは、this 参照がメソッドを含むインスタンスを参照していることを示します。override 属性を使用して、継承されたメソッドを再定義できます。また、final 属性を使用して、サブクラスによってメソッドがオーバーライドされないようにできます。詳しくは、メソッドのオーバーライドを参照してください。getter および setter とも呼ばれる get および set アクセサ関数を使用すると、作成したクラスの使いやすいプログラミングインターフェイスを提供すると同時に、情報の非表示およびカプセル化というプログラミング原則に従うことができます。get および set 関数を使用して、クラスプロパティをクラスに対してプライベートに保持できますが、クラスのユーザーは、クラスメソッドを呼び出すのではなくクラス変数にアクセスしている場合と同じように、これらのプロパティにアクセスできます。また、getter および setter には、読み取りおよび書き込みアクセスを可能にする各プロパティに対して 2 つの公開関数を持つ必要がないという利点もあります。getter および setter 関数でも、スーパークラスから継承されるプロパティをオーバーライドできますが、通常のクラスメンバー変数を使用したときにはオーバーライドできません。var キーワードで宣言されたクラスメンバー変数は、サブクラスではオーバーライドできません。バインドメソッドは、メソッドクロージャとも呼ばれ、単にインスタンスから抽出されるメソッドです。バインドメソッドの例には、関数にパラメータとして渡され、関数から値として返されるメソッドがあります。0 で新しく導入されたバインドメソッドは、インスタンスから抽出されたときでもレキシカル環境が保持されるメソッドクロージャに似ています。バインドメソッドとメソッドクロージャの主な違いは、バインドメソッドの this 参照は、バインドメソッドを実装するインスタンスにリンクされたまま、つまりバインドされたままであるという点です。つまり、バインドメソッドの this 参照が、常にこのメソッドを実装する元のオブジェクトを指していることを意味します。関数クロージャの場合、this 参照は汎用です。すなわち、この関数が呼び出された時点で関連付けられているオブジェクトが何であっても、そのオブジェクトを参照します。this キーワードを使用する場合は、バインドメソッドを理解していることが重要です。this キーワードを使用すれば、メソッドの親オブジェクトを参照できます。ほとんどの ActionScript プログラマは、this キーワードが常にメソッドの定義を含むオブジェクトまたはクラスを参照すると考えますが、メソッドのバインディングがないと必ずしもそうなりません。旧バージョンの ActionScript では、例えば、this 参照はメソッドを実装するインスタンスを常に参照するわけではありませんでした。0 でインスタンスからメソッドを抽出すると、this 参照が元のインスタンスにバインドされないだけでなく、インスタンスのクラスのメンバー変数もメソッドも使用できません。0 では、メソッドをパラメータとして渡すとバインドメソッドが自動的に作成されるため、これは問題にはなりません。バインドメソッドにより、this キーワードは常に、メソッドが定義されたオブジェクトまたはクラスを参照します。このクラスには、バインドメソッドを定義するメソッド foo()、およびバインドメソッドを返すメソッド bar() が含まれます。さらに、myFunc 変数に格納されているバインドメソッドは、引き続き ThisTest クラスのメンバー変数にアクセスできます。addEventListener() メソッドでは関数またはメソッドをパラメータとして渡す必要があるため、バインドメソッドの追加が最もわかりやすいのはイベントハンドラを使用する場合です。詳しくは、イベントリスナーにクラスメソッドとして定義されたリスナー関数を参照してください。
0| お使いのバージョンではない場合
0 およびコンポーネント
var キーワードで宣言した変数は、スクリプトの実行中に複数回その値を変更できます。const キーワードで宣言した変数は定数と呼ばれ、1 回だけ値を割り当てることができます。初期化された定数に新しい値を割り当てようとすると、エラーが発生します。詳しくは、定数を参照してください。クラスのインスタンスではなく、クラスに関連付けられた静的変数は、オブジェクトのクラス全体に適用される情報の格納および共有に役立ちます。例えば、静的変数は、クラスがインスタンス化された回数を記録する場合や可能なクラスインスタンスの最大数を格納しておく場合に適しています。次の例では、クラスのインスタンス化の回数を追跡する totalCount 変数およびインスタンス化の最大回数を格納する MAX_NUM 定数を作成します。例えば、次のコードは正常に動作します。クラスのインスタンスから静的変数にアクセスできないため、次のコードはエラーを返します。コンストラクタまたはインスタンスメソッド内の MAX_NUM に値を割り当てることはできません。次のコードは静的定数を初期化する有効な方法でないため、エラーが生成されます。インスタンス変数には、var および const キーワードを使用し、static キーワードを使用せずに宣言されたプロパティが含まれます。クラス全体ではなくクラスインスタンスに関連付けられたインスタンス変数は、インスタンス固有の値の格納に便利です。例えば、Array クラスには、この Array クラスの特定のインスタンスが保持する配列エレメントの数を格納する length という名前のインスタンスプロパティがあります。インスタンス変数は、var または const として宣言されたかどうかにかかわらず、サブクラスではオーバーライドできません。ただし、getter および setter メソッドをオーバーライドすることにより、変数をオーバーライドするのに似た機能を実現できます。詳しくは、get および set アクセサメソッドを参照してください。
0| お使いのバージョンではない場合
0 およびコンポーネント
高度なトピック
0 のクラスオブジェクト
その後、プログラマは ActionScript を使用してより複雑なアプリケーションを作成し始めました。プログラマのニーズに応えるために、その後の各リリースには複雑なアプリケーションの作成を容易にする言語機能が追加されてきました。この開発初期段階でも、ActionScript オブジェクトモデルは基本的なデータ型としてのオブジェクトの概念をベースにしていました。オブジェクトモデルについて説明するとき、プロパティという用語には、変数、関数、メソッドなど、オブジェクトに関連付けられるあらゆるものが含まれます。第 1 世代の ActionScript では、class キーワードによるクラスの定義はサポートされていませんが、プロトタイプオブジェクトと呼ばれる特殊なオブジェクトを使用してクラスを定義できます。0 のようなプロトタイプベース言語では、既存オブジェクトを他のオブジェクトのモデル(またはプロトタイプ)として使用します。クラスベース言語のオブジェクトはテンプレートになるクラスを示す場合がありますが、プロトタイプベース言語のオブジェクトはテンプレートになる別のオブジェクト、つまりプロトタイプを示します。0 でクラスを作成するには、クラスのコンストラクタ関数を定義します。作成したコンストラクタ関数は、そのクラスのインスタンスのプロトタイプ的なオブジェクトになります。このコンストラクタ関数は、new 演算子でインスタンス化できる Shape クラスを次のように定義します。Shape() コンストラクタ関数オブジェクトが Shape クラスのインスタンスのプロトタイプとして機能するのと同様に、これは Shape のサブクラスのプロトタイプ、すなわち Shape クラスを拡張する他のクラスとしても機能します。Shape クラスのサブクラスであるクラスを作成するには、次の 2 つの手順を実行します。最初に、次のようにクラスのコンストラクタ関数を定義して、クラスを作成します。デフォルトでは、作成したクラスはそのプロトタイプとして Object クラスを使用します。これで、Shape クラスと Circle クラスは、プロトタイプチェーンと呼ばれる継承関係内で相互にリンクされました。次の図は、プロトタイプチェーン内の関係を示しています。各プロトタイプチェーンの最後にある基本クラスは Object クラスです。
0 で作成されたすべてのオブジェクトの基本プロトタイプオブジェクトを参照する Object
このプロトタイプチェーン例の次のオブジェクトは Shape オブジェクトです。prototype プロパティは明示的に設定されていないので、依然として汎用オブジェクト(Object クラスのインスタンス)を保持しているからです。このプロトタイプチェーンの最後のリンクは Circle クラスで、それ自体のプロトタイプである Shape クラスにリンクされています。次の例に示すように、Circle クラスのインスタンスを作成すると、インスタンスは Circle クラスのプロトタイプチェーンを継承します。
簡潔にするために、このセクションではプロトタイプチェーンの詳細および複雑さに関する説明の多くを省略し、代わりに ActionScript 3
0 オブジェクトモデルの理解に役立つ情報を提供します。0 で変わりがないことを理解する必要があります。0 では、クラスの定義に使用する新しいシンタックスが追加されたにすぎません。プロトタイプチェーンは、両方の言語バージョンで同じように機能します。0 で導入された新しいシンタックスでは、より直観的な方法でクラスを定義できます。0 では、コンパイル時の型チェックに使用するための型注釈も導入されました。これにより、前述の例の visible プロパティにはブール値だけが含まれることを宣言できます。また、新しい extends キーワードにより、サブクラスを作成するプロセスが簡略化されます。コンストラクタは、クラス定義の一部として宣言されるようになりました。0 ではインターフェイス定義のサポートも追加され、オブジェクト間の通信用に正式に定義されたプロトコルでオブジェクト指向プログラムをさらに改良できるようになりました。
0 のクラスオブジェクト
通常 Java や C++ に関連付けられる一般的なオブジェクト指向プログラミングパラダイムでは、クラスを使用してオブジェクトの型を定義します。このパラダイムを採り入れたプログラミング言語も、クラスにより定義されるデータ型のインスタンスを作成するためにクラスを使用する傾向にあります。ActionScript では、この両方の目的でクラスを使用しますが、プロトタイプベース言語であることから興味深い特徴が付け加えられています。ActionScript ではクラス定義ごとに、動作と状態の両方を共有できる特別なクラスオブジェクトを作成します。
とは言え、コーディングする上でこの違いが実質的な影響があると感じる ActionScript プログラマはほとんどいないでしょう
0 は、この特別なオブジェクトを使用しなくても、さらには理解していなくても、高度なオブジェクト指向 ActionScript アプリケーションを作成できるように設計されています。このセクションでは、クラスオブジェクトを活用したいと考える上級者のプログラマを対象に、この問題を詳細に説明します。次の図は、class A {} ステートメントで定義された A という名前の単純なクラスを表すクラスオブジェクトの構造を示しています。
フルサイズのグラフィックを表示
図中の四角形はオブジェクトを表します。図中の各オブジェクトには、クラス A に属していることを表す添え字 A が付いています。クラスオブジェクト(CA)には、その他の重要なオブジェクトへの参照が多数含まれています。インスタンス特性オブジェクト(TA)は、クラス定義内で定義されたインスタンスプロパティを格納します。
クラス特性オブジェクト(TCA)はクラスの内部型を表し、そのクラスによって定義された静的プロパティを格納します(添え字 C は「クラス」を表します)
プロパティオブジェクト(PA)は、常に constructor プロパティを通じて関連付けられた元のクラスオブジェクトを参照します。0 で新しく導入された特性オブジェクトは、パフォーマンスを考慮して実装されました。0 では、継承されたプロパティが、スーパークラスからサブクラスの特性オブジェクトにコピーされます。このため、名前のルックアップが効率的になり、所要時間も短縮されています。特性オブジェクトはプログラマコードに直接アクセスできませんが、パフォーマンスが向上しメモリ使用量が削減することからオブジェクトの存在がわかります。特性オブジェクトは、AVM2 にクラスのレイアウトと内容に関する詳細情報を提供します。この情報を使って、AVM2 は多くのマシン命令を直接生成することができます。このため、時間のかかる名前のルックアップを行わずにプロパティにアクセスしたり、メソッドを直接呼び出したりすることができ、実行時間を大幅に短縮できます。特性オブジェクトによって、旧バージョンの ActionScript の類似オブジェクトに比べると、オブジェクトのメモリフットプリントをかなり小さくできます。例えば、クラスが sealed の場合 (つまり、クラスが dynamic と宣言されていない場合)、クラスのインスタンスは動的に追加するプロパティにハッシュテーブルを必要とせず、このクラスで定義された固定プロパティの特性オブジェクトおよびスロットへのポインタを保持するだけです。注意: 特性オブジェクトは、内部実装の詳細です。プロトタイプオブジェクトは、ActionScript のプロトタイプベース言語としてのルーツのレガシーです。prototype プロパティは読み取り専用で、別のオブジェクトを指すように変更することはできません。旧バージョンのプロパティでは、別のクラスを指すようにプロトタイプを再割り当てできました。prototype プロパティは読み取り専用ですが、参照されるプロトタイプオブジェクトは読み取り専用ではありません。つまり、プロトタイプオブジェクトに新しいプロパティを追加することができます。プロトタイプオブジェクトに追加されたプロパティは、クラスのすべてのインスタンス間で共有されます。0 では二次的な役割を果たすだけです。主な継承メカニズムである固定プロパティの継承は、特性オブジェクトによって内部的に処理されます。固定プロパティは、クラス定義の一部として定義される変数またはメソッドです。プロトタイプチェーンは、固定プロパティの継承より動的な代替継承メカニズムになります。プロパティは、クラス定義の一部としてだけでなく、実行時にクラスオブジェクトの prototype プロパティからもクラスのプロトタイプオブジェクトに追加できます。ただし、コンパイラを strict モードに設定した場合は、クラスを dynamic キーワードで宣言しない限り、プロトタイプオブジェクトに追加されたプロパティにアクセスできない場合があります。いくつものプロパティがプロトタイプオブジェクトに関連付けられているクラスの好例として、Object クラスがあります。次の例は、これらのメソッドの宣言が理論的にどのように見えるかを示します。ただし、実装の詳細により実際の実装はやや異なります。前述のとおり、プロパティは、クラス定義外部でクラスのプロトタイプオブジェクトに関連付けることができます。ただし、固定プロパティの継承とは異なり、プロトタイプの継承では、サブクラスでメソッドを再定義する場合、override キーワードは必要ありません。以下に例を挙げます。1 つ目は、クラス定義内部のサブクラスのプロトタイプオブジェクトで、valueOf() メソッドを定義します。2 番目に、クラス定義外部の Foo のプロトタイプオブジェクトで valueOf() メソッドを次のコードのように再定義できます。この方法は、固定プロパティの継承とプロトタイプの継承が混在するという点で他の 2 つとは異なります。固定プロパティの継承およびプロトタイプの継承という 2 つの別個の継承メカニズムが混在することで、コアクラスのプロパティおよびメソッドに関して留意すべき互換性の問題が生じます。つまり、コアクラスのプロパティおよびメソッドは、そのクラスのプロトタイプオブジェクトで定義されます。0 との互換性では、固定プロパティの継承を使用することが要求されます。さらに、プロトタイプではなく固定プロパティの継承を使用すると、ランタイムパフォーマンスの大幅な向上につながります。0 では、この問題を解決するために、コアクラスにプロトタイプの継承と固定プロパティの継承の両方を使用しています。各コアクラスに、2 セットのプロパティおよびメソッドが含まれます。0 との互換性のために固定プロパティおよび AS3 名前空間で定義されます。AS3 名前空間は、この 2 セットのプロパティおよびメソッド間の選択のために便利なメカニズムを提供します。AS3 名前空間を使用しない場合、コアクラスのインスタンスは、コアクラスのプロトタイプオブジェクトに定義されているプロパティおよびメソッドを継承します。AS3 名前空間を使用することに決めた場合は、固定プロパティがプロトタイププロパティよりも常に優先されるため、コアクラスのインスタンスは AS3 バージョンを継承します。つまり、固定プロパティが利用可能な場合には、同じ名前のプロトタイププロパティではなく、その固定プロパティが必ず使用されます。AS3 名前空間で修飾することによって、AS3 名前空間バージョンのプロパティまたはメソッドを選択的に使用することができます。0 では、プロパティセットごとにコンパイラオプションを備えており、AS3 名前空間をプログラム全体に適用できます。プロトタイプバージョンを使用するには、両方のコンパイラオプションを反対の値に設定します。いずれかのコアクラスを拡張してメソッドのいずれかをオーバーライドする計画がある場合には、オーバーライドメソッドの宣言方法に AS3 名前空間がどのように影響する可能性があるかを理解しておく必要があります。AS3 名前空間を使用する場合は、コアクラスメソッドのいずれのメソッドオーバーライドも、override 属性で AS3 名前空間を使用する必要があります。AS3 名前空間を使用せずにコアクラスメソッドをサブクラスで再定義する場合は、AS3 名前空間も override キーワードも使用しないでください。
0| お使いのバージョンではない場合
0 およびコンポーネント
値または参照によってパラメータを渡す方法は、ほとんどのプログラマが使い慣れている方法ですが、 arguments オブジェクトと
(rest) パラメータは、多くのプログラマにとって初めての方法と思われます。
引数の値渡しと参照渡し
多くのプログラミング言語では、値渡しと参照渡しによるパラメータの受け渡しの違いを理解しておくことが重要です。この違いは、コードの設計方法に影響します。値渡しとは、関数内で使用するためにパラメータの値がローカル変数にコピーされることです。参照渡しとは、実際の値ではなく、パラメータへの参照のみが渡されることです。実際の値がコピーされるのではなく、 パラメータとして渡される、変数への参照が作成され、関数内で使用するためにローカル変数に割り当てられます。関数外の変数への参照では、ローカル変数は元の変数の値を変更する機能を提供します。0 では、値はすべてオブジェクトとして格納されているため、すべてのパラメータは参照渡しです。パラメータはプリミティブなので、値渡しのように動作します。これは、関数内の xValue および yValue は関数の外部にある同じ名前の変数とは別に存在するメモリ内の新しい位置を参照するためです。プリミティブデータ型に属さないその他すべてのオブジェクトは、常に参照によって渡され、元の変数の値を変更する機能を提供します。オブジェクトはプリミティブ型ではないため、参照渡しで渡されるだけではなく、参照のままでもあります。つまり、関数内のパラメータを変更すると、関数の外側にあるオブジェクトのプロパティも影響を受けます。
デフォルトのパラメータ値
0 では、関数のデフォルトのパラメータ値を宣言する機能が新しく追加されました。デフォルトのパラメータ値を使用した関数の呼び出しでデフォルト値のパラメータが省略されると、そのパラメータの関数定義で指定された値が使用されます。デフォルト値のパラメータはすべてパラメータリストの末尾に配置する必要があります。デフォルト値として割り当てられた値はコンパイル時定数である必要があります。パラメータのデフォルト値が存在すると、そのパラメータはオプションパラメータになります。デフォルト値を持たないパラメータは、必須パラメータと見なされます。例えば、次のコードは、3 つのパラメータで関数を作成します。このうち、2 つのパラメータにはデフォルト値があります。パラメータ 1 つだけで関数を呼び出す場合、そのパラメータのデフォルト値が使用されます。パラメータが関数に渡されると、arguments オブジェクトを使用して関数に渡されたパラメータについての情報にアクセスできます。arguments オブジェクトには、次のようないくつかの重要な側面があります。arguments オブジェクトは、関数に渡されるすべてのパラメータを含む配列です。length プロパティは、関数に渡されるパラメータの数を報告します。callee プロパティを使用すると、関数自体を参照することができます。これは関数式の再帰呼び出しに便利です。0 では、関数呼び出しで関数定義内で定義されているパラメータより多いパラメータを指定できますが、パラメータ数が必須パラメータ数(およびオプションで任意パラメータ数)と一致しない場合は strict モードでコンパイルエラーが生成されます。arguments オブジェクトの配列を使用すると、関数に渡されるパラメータが関数定義内で定義されたかどうかにかかわらず、このパラメータにアクセスできます。callee プロパティは、再帰を作成する場合に匿名関数でよく使用されます。このプロパティを使用すると、コードに柔軟性を持たせることができます。
開発過程で再帰関数の名前が変更された場合でも、関数名ではなく arguments
callee を使用していれば、関数本体内の再帰呼び出しの変更について考慮する必要はありません。callee プロパティは、次の関数式で使用して再帰を有効にします。代わりに、宣言したパラメータ名を使用してパラメータにアクセスする必要があります。ストリング「arguments」をパラメータ名として使用しないようにする必要があります。次のコードは出力を作成しません。これは、現在の関数を呼び出した関数への参照です。0 には caller プロパティはありませんが、呼び出し関数の参照が必要な場合は、それ自体を参照する特別なパラメータを渡すように呼び出し関数を変更することができます。(rest) パラメータと呼ばれる新しいパラメータ宣言を導入しています。このパラメータを使用すると、任意の数のカンマ区切りのパラメータを受け入れる配列パラメータを指定できます。パラメータには、予約語ではない名前を指定することができます。このパラメータ宣言は、指定される最後のパラメータである必要があります。このパラメータを使用すると、 arguments オブジェクトにアクセスできなくなります。(rest) パラメータは、最後にパラメータとしてリストする限り、他のパラメータと共に使用することもできます。
最初のパラメータは
(rest) パラメータで作成された配列の一部でなくなっているので、出力は最初の値をスキップします。
0| お使いのバージョンではない場合
0 およびコンポーネント
データ型の記述
0 では、32 ビット符号付および符号なし整数の低レベルマシン型にアクセスすることができるようになりました。変数が浮動小数点数を使用しない場合、Number データ型ではなく int データ型を使用する方が速く、効率的です。int データ型である変数のデフォルト値は 0 です。これは、String データ型および Object クラスを含む複合データ型を定義するすべてのクラスのデフォルト値です。このデータ型を型注釈として使用することはできません。0 では、Number データ型は、整数、符号なし整数、および浮動小数点数を表すことができます。ただし、パフォーマンスを最大化するために、32 ビット int および uint 型より大きい整数値に対してのみ、Number データ型を使用する必要があります。また、Number データ型には、浮動小数点数を格納することができます。浮動小数点数を格納するには、数値に小数点を含めます。小数点を省略すると、数値は整数として格納されます。この規格では、64 ビットを使用して浮動小数点数を格納する方法が指定されています。1 ビットを使用して数値が正か負かを指定します。指数には 11 ビットが使用され、2 を底として格納されます。残りの 52 ビットは、指数で指定される累乗した数値である仮数部(仮数とも呼ばれます)を格納するために使用されます。Number データ型では、ビットの一部を使用して指数を格納することで、仮数のビットすべてを使用する場合より大きな浮動小数点数を格納できます。この数値の範囲が膨大である一方で、この範囲の精度が犠牲になっています。その結果、分数 1/3 など、正確に表すためには 53 ビット以上必要な数値は近似値にしかなりません。アプリケーションで小数値を持つ絶対精度が必要な場合、2 進浮動小数点数計算ではなく、10 進浮動小数点計算を実装するソフトウェアを使用する必要があります。Number データ型で整数値を格納する場合、仮数の 52 ビットだけが使用されます。例えば、負の数値の平方根を計算しようとすると、その結果は NaN になります。その他の特殊な Number の値には正の無限大と負の無限大があります。0 による除算の結果は、被除数が正の場合に正の無限大、被除数が負の場合に負の無限大となります。ストリングは、Java プログラミング言語の場合と同様に不変値です。String 値に対する操作は、そのストリングの新しいインスタンスを返します。両方とも文字列が存在しないことを表しますが、値 null は、空のストリング("")と同じではありません。負以外の整数が必要な特別な場合に、uint データ型を使用します。例えば、ピクセルカラー値を表すためには uint データ型を使用する必要があります。これは、int データ型にはカラー値の処理には適していない内部符号ビットがあるためです。型指定されていない変数には、undefined という値のみを割り当てることができます。型指定されていない変数は、型注釈がないか、型注釈にアスタリスク記号(*)が使用されている変数です。void は、戻り値の型注釈としてのみ使用することができます。1 つ目は、Object データ型は、型注釈のない変数に割り当てられるデフォルトのデータ型ではなくなりました。0 ではこれは行われず、真に型指定されていない変数の概念が導入されました。型注釈のない変数は、型が指定されていないと見なされます。コード内で変数の型を指定しないままにしておくことを明確に示す場合、型注釈に新しくアスタリスク記号(*)を使用することができます。これは、型注釈を省略するのと同じことを示します。次の例は、いずれも型指定されていない変数 x を宣言する 2 つの同等のステートメントを示します。型指定されていない変数だけが値 undefined を保持することができます。
0| お使いのバージョンではない場合
0 およびコンポーネント
大文字と小文字の区別
キーワードと予約語
言語のシンタックスは、実行可能なコードを記述する際に遵守する必要がある一連の規則を定義します。
大文字と小文字の区別
0 は、大文字と小文字を区別する言語です。スペルが同じで大文字か小文字かだけが異なる識別子は、異なる識別子と見なされます。例えば、次のコードは 2 つの異なる変数を生成します。)は、オブジェクトのプロパティまたはメソッドにアクセスする方法を提供します。ドットシンタックスを使用すると、インスタンス名の後にドット演算子とプロパティまたはメソッドの名前を付けたものを使ってクラスのプロパティまたはメソッドを参照できます。例えば、次のようなクラス定義があるとします。ドットシンタックスを使用して、次のコードで作成されたインスタンス名を使用する prop1 プロパティと method1() メソッドにアクセスできます。パッケージを定義するときに、ドットシンタックスを使用することができます。ドット演算子を使用してネストされたパッケージを参照します。次の式を使用して、events パッケージを参照することができます。0 では、スラッシュシンタックスはサポートされていません。スラッシュシンタックスは、ActionScript の以前のバージョンで、ムービークリップまたは変数のパスを指定するために使用されていました。リテラルは、コードに直接表示される値です。次の例は、すべてのリテラルを示します。リテラルをグループ化して、複合リテラルを形成することもできます。配列リテラルは、角括弧([])で囲まれ、カンマを使用して配列エレメントが区切られます。配列リテラルを使用して配列を初期化することができます。次の例では、配列リテラルを使用して初期化される 2 つの配列を示します。リテラルは汎用オブジェクトの初期化にも使用できます。汎用オブジェクトは Object クラスのインスタンスです。オブジェクトリテラルは、中括弧({})で囲まれ、カンマを使ってオブジェクトプロパティが区切られます。各プロパティはコロン(:)で宣言されます。コロンにより、プロパティ名とプロパティ値が区切られます。new ステートメントを使用して汎用オブジェクトを作成し、オブジェクトリテラルをパラメータとして Object クラスコンストラクタに渡すか、宣言するインスタンスにオブジェクトリテラルを直接割り当てることができます。各プロパティの値は、1、2、および 3 に設定されます。詳しくは、ストリングの基礎、正規表現の基礎、および XML 変数の初期化を参照してください。セミコロン(;)を使用してステートメントを終了することができます。セミコロンを省略した場合は、コンパイラはコードの各行が 1 つのステートメントであると見なします。セミコロンを使用してステートメントの終了を示すことに慣れているプログラマが多いので、セミコロンを使用してステートメントを終了するとコードが読みやすくなります。セミコロンを使用してステートメントを終了すると、1 行に複数のステートメントを配置することができますが、こうするとコードが読みにくくなることがあります。1 つ目は、括弧を使用して、式内の演算の順序を変更します。括弧内にグループ化された演算は、常に最初に実行されます。例えば、括弧は次のコードの演算の順序を変更するために使用されます。2 つ目は、次の例に示すように、括弧にカンマ演算子(,)を使用して、一連の式を評価し、最後に実行された式の結果を返します。3 つ目は、次の例に示すように、括弧を使用して 1 つまたは複数のパラメータを関数またはメソッドに渡します。0 コードは、単一行コメントと複数行コメントの 2 種類のコメントをサポートします。このコメントメカニズムは、C++ や Java のコメントメカニズムに似ています。コンパイラは、コメントとしてマークされたテキストを無視します。単一行コメントは、2 つのスラッシュ(//)で始まり、その行の最後までです。例えば、次のコードには単一行コメントが含まれています。複数行コメントは、スラッシュとアスタリスク(/*)で始まり、アスタリスクとスラッシュ(*/)で終わります。
キーワードと予約語
予約語とは、単語が ActionScript で使用するために予約されているので、ユーザーがコードで識別子として使用できない単語です。予約語には、コンパイラによってプログラム名前空間から削除されるレキシカルキーワードが含まれます。レキシカルキーワードを識別子として使用すると、コンパイラはエラーを報告します。0 のレキシカルキーワードの一覧です。シンタックスキーワードと呼ばれるいくつかのキーワードがあります。このキーワードは識別子として使用できますが、コンテキストによっては特別な意味になります。0 シンタックスのキーワードを示します。さらに、将来の予約語と呼ばれる識別子もいくつかあります。0 を組み込んだソフトウェアでキーワードとして扱われることがあります。これらの識別子の多くはコードで使用可能ですが、使用しないことをお勧めします。今後のバージョンの言語でキーワードとして表示される可能性があるからです。0 では、定数を作成するために使用する const ステートメントがサポートされています。定数は、変更できない固定値を持つプロパティです。定数には値を 1 回だけ割り当てることができますが、定数の宣言のきわめて近くで割り当てる必要があります。例えば、定数がクラスのメンバーとして宣言されると、宣言の一部としてのみ、またはクラスコンストラクタ内でのみ、その定数に値を割り当てることができます。次のコードは、2 つの定数を宣言します。1 つ目の定数 MINIMUM には、宣言ステートメントの一部として値が割り当てられます。strict モードでは初期化時にのみ定数値を割り当てることができるので、この例は standard モードでのみコンパイルされることに注意してください。他の方法で定数に初期値を割り当てようとすると、エラーが発生します。例えば、クラス外部にある MAXIMUM の初期値を設定しようとすると、ランタイムエラーが発生します。0 では、使用する広範囲の定数が定義されます表記規則により、ActionScript の定数には大文字だけを使用し、単語はアンダースコア文字(_)で区切ります。例えば、MouseEvent クラス定義では、マウス入力に関連するイベントを表す定数にこの命名規則を使用します。
0| お使いのバージョンではない場合
0 およびコンポーネント
変数のスコープについて
変数を使用すると、プログラムで使用する値を格納できます。変数を宣言するには、変数名を使用した var ステートメントを使用する必要があります。0 では、型注釈を使用する場合にのみ var ステートメントを使用する必要があります。0 では、常に var ステートメントを使用する必要があります。変数を宣言するときに var ステートメントを省略すると、strict モードではコンパイルエラーが発生し、standard モードではランタイムエラーが発生します。例えば、次のコード行は、変数 i があらかじめ定義されていない場合はエラーになります。変数をデータ型に関連付ける場合は、変数を宣言するときに行います。変数の型を指定しないで変数を宣言することができますが、strict モードではコンパイラ警告が生成されます。変数の型は、変数名にコロン(:)を付け、その後に変数の型を追加することで指定します。代入演算子(=)を使用して、変数に値を割り当てることができます。例えば、次のコードは、変数 i を宣言し、その変数に値 20 を割り当てます。次の例に示すように、変数を宣言するときに同時に変数を割り当てる方が便利です。変数を宣言するときに変数に値を割り当てる手法は、整数やストリングなどのプリミティブな値を割り当てる場合だけではなく、配列を作成する場合やクラスのインスタンスをインスタンス化する場合にもよく使用されています。次の例は、コードを 1 行使用して宣言され、値が割り当てられる配列を示します。new 演算子を使用して、クラスのインスタンスを作成することができます。複数の変数を宣言する場合は、カンマ演算子(,)を使用して変数を区切り、1 行のコードですべての変数を宣言することができます。例えば、次のコードは、コード 1 行で 3 つの変数を宣言します。同じコード行で、各変数に値を割り当てることもできます。例えば、次のコードは 3 つの変数(a、b および c)を宣言し、各変数に値を割り当てます。カンマ演算子を使用して変数宣言を 1 つのステートメントにグループ化できますが、コードの可読性が低下する可能性があります。
変数のスコープについて
変数のスコープとは、レキシカル参照によって変数にアクセスできるコードの範囲です。グローバル変数は、コードのすべての範囲で定義される変数で、ローカル変数は、コードの一部分でのみ定義される変数です。0 では、変数には、常にその変数が宣言された関数またはクラスのスコープが割り当てられます。グローバル変数は、関数またはクラスの定義の外部で定義する変数です。この例では、グローバル変数は関数定義の内部および外部の両方で利用できることを示します。ローカル変数を宣言するには、関数定義内で変数を宣言します。ローカル変数を定義できるコードの最小範囲が関数定義です。関数内で宣言されたローカル変数は、その関数内でのみ存在します。ローカル変数に使用した変数名がグローバル変数として宣言されている場合、ローカル変数がスコープ内にある間は、ローカル定義がグローバル定義を非表示に (シャドウ) します。ただし、グローバル変数は関数の外でも存在しています。関数内の trace ステートメントはこの変数のローカル値を出力しますが、関数の外にある trace ステートメントはこの変数のグローバル値を出力します。コードブロックは、左中括弧(\{)と右中括弧(\})で囲まれたステートメントのグループです。C++ や Java などのプログラミング言語では、コードブロック内で宣言された変数は、コードブロック外では利用できません。このスコープ制限はブロックレベルのスコープと呼ばれますが、ActionScript にはありません。コードブロック内で変数を宣言すると、変数はそのコードブロック内だけではなく、コードブロックが属する関数の他の部分でも利用できます。例えば、次の関数には様々なブロックスコープで定義された変数が含まれています。すべての変数を関数全体で利用できます。ブロックレベルのスコープが存在しないので、関数が終了する前に宣言されている限り、変数を宣言する前に読み込んだり、変数に書き込んだりできます。これは、ホイストと呼ばれる手法によるもので、コンパイラによりすべての変数宣言が関数の最上位に移動されます。しかし、コンパイラは代入ステートメントをホイストしません。つまり、次の例に示すように、変数が宣言される前でも変数に値を割り当てることができます。デフォルト値とは、値を設定する前に変数に格納されている値です。変数に初めて値を設定する場合は、変数を初期化します。変数を宣言して、値を設定しない場合、その変数は初期化されません。初期化されていない変数の値は、そのデータ型によって異なります。次の表は、変数のデフォルト値をデータ型に整理して示します。
宣言されていない(型注釈 * と同じ)
ユーザー定義クラスを含むその他すべてのクラス
これは、IEEE-754 規格で定義されている特別な値で、数値を表さない値です。変数を宣言して、そのデータ型を宣言しない場合、デフォルトのデータ型 * が適用されます。これは、変数の型指定がないことを示します。型指定されていない変数を値で初期化しない場合も、デフォルト値は undefined です。0 で定義されたすべてのクラスおよび作成したカスタムクラスに適用されます。値 null をこれらの変数に割り当てようとすると、この値はそのデータ型のデフォルト値に変換されます。
0 * パッケージと名前空間
0| お使いのバージョンではない場合
0 およびコンポーネント
パッケージと名前空間
パッケージの作成
パッケージの読み込み
パッケージと名前空間は関連する概念です。パッケージを使用すると、コードを共有でき、名前のコンフリクトを最小限に抑えられるようにクラス定義をバンドルできます。名前空間を使用すると、プロパティ名やメソッド名などの識別子の可視性を制御でき、コードがパッケージ内部にあるのか外部にあるのかに関係なく適用できます。パッケージを使用してクラスファイルを構成でき、名前空間を使用して個々のプロパティおよびメソッドの可視性を制御できます。0 では、パッケージは名前空間で実装されますが、名前空間と同義ではありません。パッケージを宣言すると、コンパイル時に必ず既知である名前空間が暗黙的に作成されます。名前空間は、明示的に作成された場合はコンパイル時に既知である必要はありません。次の例では、package ディレクティブを使用して、クラスを 1 つ含む単純なパッケージを作成します。
クラスは samples パッケージ内にあるので、コンパイラはコンパイル時にクラス名を自動的に修飾し、完全修飾名の samples
多くの開発者、特に Java 開発者は、パッケージの最上位にクラスだけを配置することを選択します。0 では、パッケージの最上位でクラスだけではなく、変数、関数、ステートメントもサポートされています。この機能の高度な使用方法として、パッケージ内のすべてのクラスで使用できるようにパッケージの最上位で名前空間を定義できます。0 はネストされたクラスも、プライベートクラスもサポートしていません。0 のパッケージは Java のパッケージと似ています。
前の例を見ればわかるとおり、完全修飾パッケージ参照は、Java と同じようにドット演算子()を使用して表します。パッケージを使用すると、他のプログラマも使用できるように、直感的な階層構造にコードを構成できます。これにより、独自のパッケージを作成して他のプログラマと共有したり、他のプログラマが作成したパッケージを利用したりでき、コードの共有が容易になります。パッケージを使用することで、使用する識別子名が一意になり、他の識別子名と競合しなくなります。実際、これがパッケージの最も重要な利点であるという人もいます。例えば、コードを共有しようとしている 2 人のプログラマがそれぞれ SampleCode というクラスを作成したとします。パッケージを使用しなければ、名前の競合が発生し、いずれかのクラスの名前を変更するしかなくなります。ただし、パッケージを使用すると、一意の名前を持つパッケージ内のクラスのいずれか、またはできれば両方を配置することによって、名前の競合は簡単に回避されます。パッケージ名に埋め込みドットを入れて、ネストされたパッケージを作成することもできます。これにより、パッケージの階層構造を作成できます。
古い XML クラスをパッケージに移動するのは最初の手順として適していますが、古い XML クラスを使用するほとんどの場合で、flash
xml パッケージが読み込まれます。XML) を使用しなければ、同じ名前の競合が発生します。events パッケージには新しいイベントモデルが含まれています。
パッケージの作成
0 では、パッケージ、クラス、およびソースファイルを整理する方法に大きな柔軟性を持たせています。旧バージョンの ActionScript では、ソースファイルごとにクラスが 1 つだけ許可され、ソースファイルの名前がクラスの名前と一致する必要がありました。0 では、1 つのソースファイルに複数のクラスを含めることができますが、ファイルの外部にあるコードで使用できるのは各ファイルのクラス 1 つだけです。つまり、各ファイルのクラスを 1 つだけパッケージ宣言内で宣言できます。その他のクラスはパッケージ定義の外部で定義する必要があります。これにより、追加されるクラスはソースファイル外部にあるコードに対して表示されなくなります。パッケージ定義内で定義されたクラスの名前は、ソースファイルの名前に一致している必要があります。0 では、パッケージをより柔軟に宣言することができます。旧バージョンの ActionScript では、パッケージはソースファイルを配置するディレクトリを表すだけでした。また、package ステートメントでパッケージを宣言するのではなく、クラス宣言内の完全修飾クラス名の一部としてパッケージ名を含めていました。0 でもパッケージはディレクトリを表しますが、パッケージに含めることができるのはクラスだけではありません。つまり、パッケージの最上位で変数、関数、および名前空間を宣言することもできます。パッケージの最上位に実行可能ステートメントを含めることもできます。パッケージの最上位で変数、関数、または名前空間を宣言した場合は、そのレベルで使用できる属性は public および internal だけです。また、この宣言がクラス、変数、関数、または名前空間のいずれであるかに関係なく、public 属性を使用できるのはファイルごとにパッケージレベルの宣言 1 つだけです。パッケージは、コードを構成したり、名前のコンフリクトを防いだりするのに便利です。パッケージの概念および関連のないクラス継承の概念を混同しないようにしてください。同じパッケージ内にある 2 つのクラスには共通する名前空間がありますが、この 2 つのクラスはその他で関連しているとは限りません。同様に、ネストされたパッケージは、親パッケージと意味的な関係がない場合があります。
パッケージの読み込み
パッケージ内部にあるクラスを使用する場合、パッケージまたは使用するクラスを読み込む必要があります。0 とは異なります。一般的に、import ステートメントは可能な限り明確にします。パッケージ全体の読み込みにより、予期しない名前の競合が発生する場合があります。クラスパス内にパッケージまたはクラスを定義するソースコードを配置する必要もあります。クラスパスは、読み込むパッケージおよびクラスをコンパイラが検索する場所を決定するローカルディレクトリパスのユーザー定義リストです。クラスパスはビルドパスまたはソースパスと呼ばれることもあります。
クラスまたはパッケージを適切に読み込むと、クラスの完全修飾名 (samples
完全修飾名は同じ名前のクラス、メソッド、またはプロパティが存在してコードがあいまいになるときに役立ちますが、すべての識別子に使用すると管理が困難になる可能性があります。例えば、SampleCode クラスのインスタンスをインスタンス化するときに完全修飾名を使用すると、コードが冗長になります。ネストされたパッケージのレベルが高くなるにつれて、コードの可読性が低下します。あいまいな識別子が問題ではないことが確実な場合、単純な識別子を使用してコードを読みやすくすることができます。例えば、クラス識別子のみを使用する場合、SampleCode クラスの新しいインスタンスのインスタンス化はかなり簡単になります。最初に適切なパッケージまたはクラスを読み込まずに識別子の名前を使用しようとすると、コンパイラがクラス定義を検出できない場合があります。また、パッケージまたはクラスを読み込んだ場合は、読み込んだ名前と競合する名前を定義しようとすると、エラーが生成されます。パッケージの作成時には、そのパッケージのすべてのメンバーのデフォルトのアクセス制御子は internal です。この場合、デフォルトではパッケージメンバーは、そのパッケージの他のメンバーに対してのみ表示されます。パッケージ外部のコードでクラスを使用できるようにする場合、public でクラスを宣言する必要があります。サンプルパッケージの外部にある CodeFormatter クラスにアクセスしようとすると、次の例に示すように、エラーが発生する場合があります。パッケージ外部で両方のクラスを使用する場合、両方のクラスを public として宣言する必要があります。パッケージ宣言に public 属性を適用することはできません。完全修飾名は、パッケージを使用するときに発生する可能性がある名前のコンフリクトを解決する際に役立ちます。例えば、同じ識別子でクラスを定義する 2 つのパッケージを読み込む場合などです。例えば、SampleCode という名前のクラスも持つ次のパッケージがあるとします。次に示すように両方のクラスを読み込むと、SampleCode クラスの参照時に名前の競合が発生することがあります。コンパイラには、どちらの SampleCode クラスを使用するのかを知る方法はありません。この競合を解決するには、次のように各クラスの完全修飾名を使用する必要があります。C++ コンパイラは一度に 1 つのファイルを処理するため、C++ では #include ディレクティブが必要で、このディレクティブはヘッダファイルが明示的に含まれていない限り、他のファイル内でクラス定義を探しません。0 には include ディレクティブがありますが、クラスやパッケージを読み込むように設計されていません。0 でクラスまたはパッケージを読み込むには、import ステートメントを使用して、パッケージを含むソースファイルをクラスパスに配置する必要があります。名前空間では、作成したプロパティおよびメソッドの可視性を制御することができます。これらのあらかじめ定義されているアクセス制御指定子が要件を満たさない場合は、独自の名前空間を作成することができます。ActionScript 実装のシンタックスおよび詳細は XML とは少し異なりますが、XML 名前空間を使い慣れていれば、ここでの説明は新しいものではないかもしれません。これまで名前空間を操作したことがない場合は、概念自体は単純ですが、その実装には特定の用語を習得する必要があります。名前空間の操作を理解するには、プロパティまたはメソッドの名前に識別子と名前空間の 2 つの部分があることを認識することが役立ちます。識別子は名前のようなものと考えることができます。定義の前に名前空間属性がない場合、名前は常にデフォルトの internal 名前空間によって修飾されます。つまり、名前は同じパッケージの呼び出し元だけに表示されます。コンパイラが strict モードに設定されている場合は、名前空間属性を変更せずに internal 名前空間がすべての識別子に適用されることを示す警告がコンパイラから出されます。識別子をどこでも使用できるようにするには、識別子名の前に public 属性を付ける必要があります。名前空間を使用するときは、次の 3 つの手順に従います。最初に、namespace キーワードを使用して名前空間を定義する必要があります。次に、プロパティまたはメソッドの宣言でアクセス制御指定子の代わりに使用して、名前空間を適用します。最後に、名前空間を適用すると、use ディレクティブを使用するか、識別子の名前を名前空間で修飾して参照できるようになります。
名前空間の定義
URI によって、名前空間定義を一意にすることができます。次のいずれかの方法で名前空間定義を宣言して、名前空間を作成します。XML 名前空間を定義するように、明示的な URI で名前空間を定義することも、URI を省略することもできます。次の例では、URI を使用して名前空間を定義する方法を示します。URI は、その名前空間の一意の識別ストリングとして機能します。次の例のように URI を省略した場合、コンパイラは URI の代わりに一意の内部 ID ストリングを作成します。この内部 ID ストリングにはアクセスできません。名前空間を定義すると、URI の有無に関わらず、その名前空間は同じスコープ内で再定義することはできません。同じスコープ内で以前に定義された名前空間を定義しようとすると、コンパイルエラーが発生します。名前空間がパッケージまたはクラス内で定義された場合は、適切なアクセス制御指定子が使用されていなければ、名前空間はそのパッケージまたはクラスの外部にあるコードに対して表示されません。utils パッケージ内のコードだけに表示され、パッケージ外のコードからは参照できないことを意味します。
名前空間の適用
名前空間を適用するとは、名前空間に定義を配置することです。名前空間に配置できる定義には、関数、変数、および定数があります。カスタム名前空間にクラスを配置することはできません。例えば、public アクセス制御名前空間で宣言された関数があるとします。関数定義に public 属性を使用すると、関数はパブリックの名前空間に配置され、すべてのコードで利用できるようになります。名前空間を定義した後は、public 属性を使用する場合と同様に定義した名前空間を使用でき、カスタム名前空間を参照できるコードでその定義を使用できるようになります。名前空間を適用する際には、次の点に注意してください。適用できる名前空間は宣言ごとに 1 つだけです。名前空間属性を一度に複数の定義に適用することはできません。つまり、10 個の異なる関数に名前空間を適用する場合、10 個の異なる関数それぞれに名前空間を属性として追加する必要があります。名前空間とアクセス制御指定子は相互に排他的であるため、名前空間を適用すると、アクセス制御指定子を指定することはできません。
名前空間の参照
このような特別な名前空間へのアクセスはコンテキストによって制御されるからです。例えば、private 名前空間に配置された定義は、自動的に同じクラス内のコードで利用できるようになります。しかし、定義した名前空間では、こうした状況依存性は存在しません。カスタム名前空間に配置したメソッドまたはプロパティを使用するには、名前空間を参照する必要があります。また、名前修飾子(::)を使用して名前空間で名前を修飾できます。use namespace ディレクティブで名前空間を参照すると、修飾されていない識別子に名前空間を適用できるように、名前空間が開きます。一度に複数の名前空間を開くことができます。use namespace で名前空間を開くと、名前空間はそれ自体が開かれたコードブロック全体で開かれたままになります。名前空間を明示的に閉じることはできません。しかし、複数の名前空間を開くと、名前のコンフリクトが起こりやすくなります。名前空間を開かない場合は、メソッドまたはプロパティの名前を名前空間と名前修飾子で修飾すると、use namespace ディレクティブを使用する必要はありません。
名前空間の使用
Proxy クラス内に名前の競合を避けるために使用されている名前空間の実際の例を見つけることができます。__resolve プロパティの代替クラスであり、エラーが発生する前に未定義のプロパティまたはメソッドへの参照を取得します。つまり、オブジェクト上で Proxy クラスのメソッドを使用する場合、そのオブジェクトのクラス定義は Proxy クラスを拡張する必要があります。名前空間の実装には通常、名前空間の定義、適用、および参照の 3 つの手順を実行します。しかし、Proxy クラスのメソッドを明示的に呼び出していないため、flash_proxy 名前空間は定義および適用されるだけで、参照されません。次の Proxy クラスからの抜粋に示すように、名前空間が Proxy クラスのメソッドに適用されます。次に、Proxy クラスを拡張するようにクラスを宣言する必要があります。1 つ目は、別の名前空間があると、Proxy クラスを拡張するクラスのパブリックインターフェイスを整理できます。Proxy クラスには、オーバーライドできるメソッドが 10 個以上ありますが、これらのメソッドは直接呼び出せるように設計されていません。これらすべてをパブリック名前空間に配置すると、混乱の元になります。2 つ目は、Proxy サブクラスに Proxy クラスのメソッドと一致する名前のインスタンスメソッドが含まれている場合、flash_proxy 名前空間を使用すると、名前のコンフリクトを回避することができます。例えば、複数のパッケージに分散するいくつかのユーティリティメソッドがあるとします。これらのメソッドをパブリックにしないで、すべてのパッケージで利用できるようにするには、新しい名前空間を作成して、独自のアクセス制御指定子として使用します。次の例では、ユーザー定義の名前空間を使用して、異なるパッケージにある 2 つの関数をグループ化します。これらを同じ名前空間にグループ化することにより、両方の関数を 1 つの use namespace ステートメントを介してクラスまたはパッケージに表示することができます。この例では、4 つのファイルを使用してその手法を示します。ファイルはすべてクラスパス内にある必要があります。名前空間は public とマークされているので、他のパッケージに読み込むことができます。as は、他のパッケージで使用できるメソッドを含むクラスを定義します。つまり、example フォルダのサブフォルダである alpha という名前のフォルダにファイルを配置する必要があります。つまり、example フォルダのサブフォルダでもある beta という名前のフォルダにファイルを配置する必要があります。beta の両方とも名前空間を使用する前に読み込む必要があります。as" は、メインアプリケーションクラスで、example フォルダと兄弟関係になければなりません。この例では、コードを簡略化するためにのみ静的メソッドを使用します。静的メソッドおよびインスタンスメソッドは両方とも myInternal 名前空間に配置することができます。
0| お使いのバージョンではない場合
0 およびコンポーネント
インスタンスプロパティと継承
メソッドのオーバーライド
継承されない静的プロパティ
静的プロパティとスコープチェーン
継承は、コード再利用の一形式です。プログラマは継承を使用して、既存のクラスに基づく新しいクラスを開発することができます。既存のクラスは、基本クラスまたはスーパークラスと呼ばれますが、新しいクラスは、通常はサブクラスと呼ばれます。継承の主な利点は、既存のコードをそのまま維持しながら、基本クラスのコードを再利用できることです。さらに、継承では他のクラスが基本クラスとやり取りする方法を変更する必要がありません。入念にテストされたか、既に使用されている既存クラスを変更するのではなく、継承を使用することでそのクラスを追加プロパティまたはメソッドで拡張できる統合モジュールとして使用できます。したがって、extends キーワードを使用して、クラスが別のクラスを継承することを示すことができます。継承を使用すると、コード内でポリモーフィズムを利用することもできます。ポリモーフィズムを使用すると、異なるデータ型に適用された場合に異なる動作を実行するメソッドに単一のメソッド名を使用できます。継承では、サブクラスが基本クラスからメソッドを継承し、再定義できるようにする、つまりオーバーライドを許可することで、ポリモーフィズムが有効になります。各クラスはデータ型を定義するため、継承を使用すると、基本クラスと基本クラスを拡張するクラスの特別な関係が作成されます。サブクラスは、基本クラスのすべてのプロパティを保有します。これは、サブクラスのインスタンスは常に基本クラスのインスタンスの代わりに使用できることを意味します。次に例を示します。
インスタンスプロパティと継承
インスタンスプロパティは、function、var、または const キーワードのいずれで定義されているかにかかわらず、プロパティが基本クラスの private 属性で宣言されていない限り、すべてのサブクラスに継承されます。0 の Event クラスには、すべてのイベントオブジェクトに共通するプロパティを継承する多数のサブクラスがあります。一部の型のイベントでは、Event クラスにイベントを定義するために必要なすべてのプロパティが含まれます。これらの型のイベントでは、Event クラスで定義されたもの以外のインスタンスプロパティは必要ありません。このようなイベントの例として、データが正常にロードされたときに発生する complete イベント、ネットワーク接続が確立されたときに発生する connect イベントなどがあります。次の例は、サブクラスに継承されるプロパティおよびメソッドの一部を示す Event クラスからの抜粋です。プロパティが継承されるので、あらゆるサブクラスのインスタンスは、これらのプロパティにアクセスできます。その他の型のイベントは、Event クラスで使用できない固有のプロパティを必要とします。これらのイベントは、Event クラスで定義されたプロパティに新しいプロパティを追加できるように、Event クラスのサブクラスを使用して定義されます。このようなサブクラスには、mouseMove イベント、click イベントなど、マウス操作またはマウスクリックに関連付けられているイベントに固有のプロパティを追加する MouseEvent クラスなどがあります。次の例は、MouseEvent クラスからの抜粋であり、サブクラスには存在するが基本クラスには存在しないプロパティの定義を示しています。
アクセス制御指定子と継承
プロパティが public キーワードで宣言された場合、このプロパティは任意の場所のコードから参照できます。プロパティが private キーワードで宣言された場合、このプロパティは定義されたクラス内でのみ参照でき、サブクラスに継承されません。protected キーワードは、定義されたクラス内だけでなく、すべてのサブクラスからもプロパティを参照できることを示します。0 の protected キーワードでは、同じパッケージ内の他のすべてのクラスからプロパティを参照できるわけではありません。0 では、サブクラスのみが protected キーワードで宣言されたプロパティにアクセスできます。また、protected 指定されたプロパティは、サブクラスが基本クラスと同じパッケージ内にあるか、または異なるパッケージ内にあるかにかかわらず、サブクラスから参照できます。プロパティが定義されているパッケージからのプロパティへの参照を制限するには、internal キーワードを使用するか、またはアクセス制御指定子を一切使用しないようにします。internal アクセス制御指定子は、アクセス制御指定子が指定されていないときに適用されるデフォルトのアクセス制御指定子です。internal とマークされたプロパティは、同じパッケージ内に存在するサブクラスによってのみ継承されます。次の例を使用して、各アクセス制御指定子がパッケージ境界を越えてどのように継承に影響するかを確認できます。str 変数は public として宣言され、この結果、次の抜粋に示すようにコードがコンパイルされて実行されます。
変数のオーバーライド禁止
var または const キーワードで宣言されたプロパティは継承されますが、オーバーライドすることはできません。プロパティをオーバーライドすると、サブクラスでプロパティが再定義されます。オーバーライドできるプロパティの型はメソッド、すなわち function キーワードで宣言されるプロパティのみです。インスタンス変数をオーバーライドすることはできませんが、インスタンス変数の getter および setter メソッドを作成し、これらのメソッドをオーバーライドすることで、同じ機能を実現できます。詳しくは、メソッドのオーバーライドを参照してください。
メソッドのオーバーライド
メソッドをオーバーライドすると、継承されたメソッドの動作が再定義されます。静的メソッドは継承されず、オーバーライドすることはできません。ただし、次の 2 つの条件が満たされていれば、インスタンスメソッドはサブクラスに継承され、オーバーライドできます。インスタンスメソッドが基本クラス内で final キーワードで宣言されていません。インスタンスメソッドで使用された場合、final キーワードは、サブクラスによってメソッドがオーバーライドされないように、プログラマが意図的に指定したことを示します。インスタンスメソッドが基本クラス内で private アクセス制御指定子で宣言されていません。基本クラス内でメソッドが private としてマークされていると、基本クラスのメソッドはサブクラスから参照できないので、サブクラス内で同じ名前のメソッドを定義するときに override キーワードを使用する必要はありません。上記の条件を満たすインスタンスメソッドをオーバーライドするには、サブクラス内のメソッドの定義は override キーワードを使用し、次の方法でメソッドのスーパークラスバージョンと一致する必要があります。オーバーライドメソッドには、基本クラスのメソッドと同じレベルのアクセス制御が必要です。internal とマークされたメソッドには、アクセス制御指定子を持たないメソッドと同じレベルのアクセス制御が必要です。オーバーライドメソッドには、基本クラスのメソッドと同じ数のパラメータが必要です。オーバーライドメソッドのパラメータには、基本クラスのメソッドのパラメータと同じデータ型注釈が必要です。オーバーライドメソッドには、基本クラスのメソッドと同じ戻り値の型が必要です。ただし、オーバーライドメソッドのパラメータの名前は、パラメータの数および各パラメータのデータ型が一致していれば、基本クラスのパラメータの名前と一致する必要はありません。
メソッドをオーバーライドするとき、多くのプログラマが、動作を完全に置き換えるのではなく、オーバーライドするスーパークラスメソッドの動作に追加したいと考えるでしょう
これには、サブクラス内のメソッドがそれ自体のスーパークラスバージョンを呼び出すメカニズムが必要です。super ステートメントは、直接のスーパークラスへの参照が含まれるそのようなメカニズムを提供します。スーパークラスで定義された変数をオーバーライドすることはできませんが、getter と setter をオーバーライドすることができます。
継承されない静的プロパティ
静的プロパティはサブクラスに継承されません。つまり、サブクラスのインスタンスから静的プロパティにアクセスすることはできません。静的プロパティは、そのプロパティが定義されたクラスオブジェクトからのみアクセス可能です。次の抜粋で記述されているコードは、strict モードではコンパイルされず、standard モードではランタイムエラーが生成されます。次のコードに示すように、静的変数 test には、クラスオブジェクトからアクセスする必要があります。ただし、静的プロパティと同じ名前を使用してインスタンスプロパティを定義することができます。このインスタンスプロパティは、静的プロパティと同じクラス内またはサブクラス内で定義できます。例えば、前述の例の Base クラスでは、test というインスタンスプロパティを定義できます。次のコードはコンパイルおよび実行されます。これは、インスタンスプロパティが Extender クラスに継承されるからです。test インスタンス変数の定義が Extender クラスにコピーされるのではなく、移動された場合も、コードはコンパイルされ、実行されます。
静的プロパティとスコープチェーン
静的プロパティは継承されませんが、そのプロパティが定義されたクラスおよびそのクラスのサブクラスのスコープチェーン内にあります。このため、静的プロパティは、定義されたクラスおよびサブクラスのスコープ内にあると言います。つまり、静的プロパティが定義されたクラスおよびそのサブクラスの本体内から直接静的プロパティにアクセスできます。次の例では、前述の例で定義したクラスを変更して、Base クラスで定義された静的変数 test が Extender クラスのスコープ内にあることを示します。インスタンスプロパティが、同じクラスまたはスーパークラス内で静的プロパティと同じ名前を使用するように定義されている場合は、インスタンスプロパティはスコープチェーン内で優先順位が高くなります。インスタンスプロパティは、静的プロパティをシャドウすると言います。つまり、静的プロパティの値ではなくインスタンスプロパティの値が使用されます。例えば、次のコードは、Extender クラスが test という名前のインスタンス変数を定義するときに、trace() ステートメントが静的変数の値ではなく、インスタンス変数の値を使用することを示しています。
0| お使いのバージョンではない場合
0 およびコンポーネント
ループステートメントを使用すると、一連の値または変数を使用して特定のコードブロックを繰り返し実行できます。コードブロックは常に中括弧({})で囲むことをお勧めします。コードブロックに含まれるステートメントが 1 つのみ場合は中括弧を省略できますが、条件の場合と同じ理由から省略することはお勧めしません。後で追加したステートメントがコードブロックから誤って除外される可能性が高くなるからです。コードブロックに含めるステートメントを後で追加するときに、必要な中括弧の追加を忘れた場合、そのステートメントはループの一部としては実行されません。for ループを使用して、特定の値範囲で変数を繰り返し処理することができます。for ステートメントには、3 つの式を指定する必要があります。3 つの式とは、初期値に設定する変数、ループがいつ終了するかを指定する条件ステートメント、および各ループで変数の値を変更する式です。例えば、次のコードは 5 回ループします。in ループは、オブジェクトのプロパティまたは配列のエレメントの繰り返し処理を行います。
in ループを使用して、汎用オブジェクトのプロパティを繰り返し処理することができます(オブジェクトプロパティは特定の順番で保持されないので、プロパティは一見ランダムな順番のように表示されます)
配列のエレメントの繰り返し処理を実行することもできます。クラスがダイナミッククラスでない限り、オブジェクトがユーザー定義クラスのインスタンスである場合、そのプロパティの繰り返し処理を実行することはできません。ダイナミッククラスのインスタンスの場合であっても、動的に追加されるプロパティによってしか繰り返し処理を実行できません。in ループは、XML または XMLList オブジェクトでタグ付けできるコレクションのアイテム、オブジェクトプロパティで保持される値、または配列のエレメントを繰り返し処理します。
in ループを使用して汎用オブジェクトのプロパティを繰り返し処理できますが、for
in ループのイテレータ変数にはプロパティの名前の代わりにプロパティによって保持される値が含まれます。次の例に示すように、XML または XMLList オブジェクトの繰り返し処理を実行することができます。以下の例が示すように、配列のエレメントの繰り返し処理を実行することもできます。オブジェクトが sealed クラスのインスタンスである場合、そのプロパティの繰り返し処理を実行することはできません。ダイナミッククラスのインスタンスの場合であっても、クラス定義の一部として定義されるプロパティである固定プロパティの繰り返し処理を実行することはできません。例えば、次のコードは for ループの例と同じ出力を生成します。for ループの代わりに while ループを使用する 1 つの短所は、while ループを使用すると無限ループを記述する可能性が高いことです。カウンタ変数をインクリメントする式を省略した場合、for ループのサンプルコードはコンパイルされませんが、while ループのサンプルコードはコンパイルされます。i をインクリメントする式がないと、ループは無限ループになります。while ループは、コードブロックが実行された後に条件がチェックされるので、少なくとも 1 回はコードブロックが実行される while ループです。
次のコードは、条件を満たさない場合でも出力を生成する do
0| お使いのバージョンではない場合
0 およびコンポーネント
関数 は、特定のタスクを実行し、プログラム内で再利用できるコードブロックです。0 には、メソッドと関数クロージャの 2 種類の関数があります。関数をメソッドと呼ぶか関数クロージャと呼ぶかは、関数が定義されたコンテキストによって決まります。関数をクラス定義の一部として定義した場合、またはオブジェクトのインスタンスに関連付けた場合は、メソッドと呼びます。関数がその他の方法で定義された場合は、関数クロージャと呼びます。0 では、例えば、class キーワードが存在しなかったので、「クラス」はコンストラクタ関数で定義されました。経験豊富なプログラマにとっては基本的な関数の定義や呼び出しは問題がありませんが、ActionScript の関数の高度な機能の中には説明が必要なものもあります。
基本的な関数の概念
オブジェクトとしての関数
関数のスコープ
0| お使いのバージョンではない場合
0 およびコンポーネント
演算子の優先順位と結合性
演算子とは、1 つまたは複数のオペランドを取り、1 つの値を返す特殊な関数です。オペランドとは、演算子が入力として使用する値で、通常はリテラル、変数、または式を取ります。例えば、次のコードでは、加算(+)および乗算(*)演算子をリテラルオペランド(2、3、および 4)と共に使用して、値を返します。演算子には、単項、二項、および三項があります。単項演算子は、オペランドを 1 つだけ取ります。例えば、インクリメント(++)演算子は、オペランドを 1 つだけ取るため、単項演算子です。二項演算子は、オペランドを 2 つ取ります。例えば、除算(/)演算子はオペランドを 2 つ取ります。三項演算子はオペランドを 3 つ取ります。
例えば、条件(:)演算子は 3 つのオペランドを取ります。一部の演算子はオーバーロードされます。つまり、渡されたオペランドの種類または数に応じて動作が異なります。加算(+)演算子は、オペランドのデータ型によって動作が異なるオーバーロード演算子の例です。オペランドが両方とも数値の場合、加算演算子は値の合計値を返します。オペランドが両方ともストリングの場合、加算演算子は 2 つのオペランドの連結を返します。次のコード例は、演算子の動作がオペランドによってどのように異なるかを示します。演算子は、指定されたオペランドの数によっても動作が異なります。除算(-)演算子は、単項および二項演算子です。オペランドが 1 つだけ指定されると、除算演算子はオペランドを否定し、その結果を返します。オペランドが 2 つ指定されると、除算演算子は 2 つのオペランドの差を返します。次の例では、最初に単項演算子、次に二項演算子として使用される除算演算子を示します。
演算子の優先順位と結合性
演算子の優先順位と結合性により、演算子を処理する順序が決まります。算術プログラミングに慣れている開発者にとって、コンパイラが乗算(*)演算子を加算(+)演算子より先に処理するのは自然なことですが、コンパイラは、どの演算子を最初に処理するかについて明示的な指示を必要とします。このような指示を、総称して演算子の優先順位と呼びます。例えば、次のコードは、前の例のデフォルトの優先順位を変更して、乗算演算子の前に加算演算子を処理するようにコンパイラに強制します。同じ優先順位の複数の演算子が同じ式にある状況があります。このような状況では、コンパイラは結合性のルールを使用して、最初に処理する演算子を決定します。代入演算子を除くすべてのバイナリ演算子は左結合となります。つまり、左にある演算子が右にある演算子よりも先に処理されます。
代入演算子と条件(:)演算子は右結合となります。つまり、右にある演算子が左にある演算子よりも先に処理されます。例えば、「より小さい」(<)および「より大きい」(>)演算子について考えてみます。これらの演算子の優先順位は同じです。両方の演算子を同じ式で使用すると、左の演算子が最初に処理されます。これは、両方の演算子が左結合であるためです。つまり、次の 2 つのステートメントでは同じ出力が得られます。「より大きい」演算子が最初に処理され、その結果は値 true になります。これはオペランド 3 がオペランド 2 より大きいためです。次のコードは、この中間状態を表します。デフォルトの左結合を括弧演算子を使用して変更できます。演算子とオペランドを括弧で囲んで、"より小さい" 演算子を最初に処理するようにコンパイラに指示できます。次の例では、括弧演算子を使用して、前の例と同じ数値で異なる出力を生成します。「より小さい」演算子が最初に処理され、その結果は値 false になります。これは、オペランド 2 がオペランド 1 より小さくないためです。次のコードは、この中間状態を表します。0 の演算子を優先順位の高いものから順に示します。同じ行に示されている演算子は優先順位が同じです。各行に示されている演算子はその下に表示される行の演算子より優先順位が高くなります。基本演算子は、Array リテラルおよび Object リテラルの作成、式のグループ化、関数の呼び出し、クラスインスタンスのインスタンス化、およびプロパティへのアクセスに使用する演算子です。次の表の基本演算子の優先順位はすべて同じです。
実行される演算
配列の初期化
オブジェクトの初期化
式のグループ化
関数の呼び出し
コンストラクタの呼び出し
プロパティへのアクセス
後置演算子は、1 つの演算子を取り、演算子の値をインクリメントまたはデクリメントします。これらの演算子は単項演算子ですが、優先順位が高いことと、その特別なビヘイビアにより、他の単項演算子からは区別して分類されます。後置演算子をより大きい式の一部として使用する場合、後置演算子が処理される前に、式の値が返されます。例えば、次のコードは、値がインクリメントされる前に、式の値 xNum++ が返される方法を示します。次の表の後置演算子の優先順位はすべて同じです。
実行される演算
単項演算子は 1 つのオペランドを取ります。このグループのインクリメント(++)演算子とデクリメント(--)演算子は前置演算子であり、式ではオペランドの前に表示されます。前置演算子が後置演算子と異なるのは、インクリメント演算またはデクリメント演算が、式全体の値が返される前に完了することです。例えば、次のコードは、値がインクリメントされてから、式の値 ++xNum が返される方法を示します。次の表の単項演算子の優先順位はすべて同じです。
実行される演算
プロパティの削除
タイプ情報を返す。未定義の値を返す。乗法演算子は、2 つのオペランドを取り、乗算、除算、または剰余計算を実行します。次の表の乗法演算子の優先順位はすべて同じです。
実行される演算
加算演算子は 2 つのオペランドを取り、加算または減算を実行します。次の表の加算演算子の優先順位はすべて同じです。
実行される演算
ビット単位シフト演算子は 2 つのオペランドを取り、2 番目のオペランドで指定された範囲で最初のオペランドのビットをシフトします。次の表のビット単位シフト演算子の優先順位はすべて同じです。
実行される演算
ビット単位の左シフト
ビット単位の右シフト
ビット単位の符号なし右シフト
関係演算子は 2 つのオペランドを取り、値を比較してブール値を返します。次の表の関係演算子の優先順位はすべて同じです。
実行される演算
より小さいか等しい。より大きいか等しい。
データ型のチェック
オブジェクトプロパティのチェック
プロトタイプチェーンのチェック
データ型のチェック
等価演算子は 2 つのオペランドを取り、値を比較してブール値を返します。次の表の等価演算子の優先順位はすべて同じです。
実行される演算
厳密な不等価
ビット論理演算子は 2 つのオペランドを取り、ビットレベルの論理演算を実行します。ビット論理演算子の優先順位は異なりますが、高いものから順に次の表に示します。
実行される演算
論理演算子は 2 つのオペランドを取り、ブール値の結果を返します。論理演算子の優先順位は異なりますが、高いものから順に次の表に示します。
実行される演算
条件演算子は三項演算子であり、3 つのオペランドを取ります。else 条件ステートメントを適用する簡易的な方法です。
実行される演算
代入演算子は 2 つのオペランドを取り、他のオペランドの値に基づいて 1 つのオペランドに値を割り当てます。次の表の代入演算子の優先順位はすべて同じです。
実行される演算
ビット単位での左シフト後代入
ビット単位での右シフト後代入
ビット単位での符号なし右シフト後代入
ビット単位の排他的論理和 (OR) を代入
0| お使いのバージョンではない場合
0 およびコンポーネント
これらのクラスは、XML データの処理に関する強力で扱いやすい機能を備えています。E4X を使用すれば、XML データを処理するコードを、従来のプログラミングテクニックと比べて短期間で開発できます。しかも、コードの読みやすさも従来より向上します。この章では、E4X による XML データの処理方法について説明します。
XML オブジェクトの構築と変形
外部 XML ドキュメントの読み込み
例:インターネットからの RSS データのロード
メディアのエンコード
読み込みでサポートされているファイル形式
MOV、AVI、MXF、FLV、F4V などの一部のファイル拡張子は、特定のオーディオ、ビデオまたは画像データ形式ではなく、コンテナファイル形式を表します。コンテナファイルは、さまざまな圧縮設定およびエンコード設定でエンコードしたデータを含むことができます。Adobe Media Encoder はこれらのコンテナファイルを読み込むことができますが、それらに含まれているデータを読み込むことができるかどうかは、インストールされているコーデック(特にデコーダ)によって決まります。追加のコーデックをインストールすると、Adobe Media Encoder の機能が拡張され、それに対応するファイルタイプを読み込めるようになります。特定のデバイスまたはアプリケーションによって作成されるファイル用のコーデックについて詳しくは、ハードウェアまたはソフトウェアの製造元にお問い合わせください。注意: Adobe Media Encoder ソフトウェアの体験版、およびインストールされているソフトウェアアプリケーションの体験版には、アドビ以外の製造元からソフトウェアのライセンスを受けているかどうかに応じて、一部の機能が含まれないことがあります。これらのファイル形式を読み込むには、ソフトウェアを登録する必要があります。
サポートされているビデオおよびアニメーションファイルの形式
264 コーデックを使用してエンコードされたビデオと AAC オーディオコーデックを使用してエンコードされたオーディオデータが含まれます。mod など)の付いたコンテナ形式内に格納されています。場合によっては、これらのファイルのファイル拡張子を認識されるいずれかのファイル拡張子に変更して、これらのファイルを Adobe Media Encoder に読み込むことができます。これらのコンテナ形式の実装方法は多種多様であるため、互換性については保証いたしません。
サポートされているオーディオファイル形式
Adobe サウンドドキュメント(ASND:統合された 1 つのトラックとして読み込まれたマルチトラックファイル)
サポートされている静止画およびシーケンスファイル形式
読み込み時に、ビット深度の低い画像は 8 bit/チャンネルに、ビット深度の高い画像は 16 bit/チャンネルに変換されます。ビット深度の高いファイルは、単精度浮動小数/チャンネル(16 byte/ピクセル)でサポートされます。
サポートされているビデオプロジェクトファイル形式
メディアのエンコード
エンコード設定のカスタマイズ
「フィルタ」書き出し設定
「ビデオ」書き出し設定
「オーディオ」書き出し設定
「配信先」書き出し設定
「その他」書き出し設定
XMP メタデータの書き出し
エンコード設定のカスタマイズ
カスタムビデオエンコード設定を作成する前に、様々なビデオエンコードオプションについて理解しておく必要があります。ビデオエンコードオプションについて詳しくは、ビデオとオーディオのエンコードについてを参照してください。エンコード設定を変更するファイル(複数可)を選択します。または、編集/すべてを選択を選択して、エンコードキュー内のすべてのファイルを選択することもできます。編集/書き出し設定を選択します。書き出し設定ダイアログボックスが表示されます。このダイアログボックスでは、次の操作を実行できます。異なるバンド幅やアプリケーション向けにビデオを配信するためのエンコード設定を指定します。キューポイントを作成してイベントを起動します。ビデオクリップのクロップやサイズ変更を実行して、クリップの大きさを変更します。ビデオの長さをトリミングして、開始フレームと終了フレームを変更します。
「フィルタ」書き出し設定
ブラー(ガウス)エフェクトは、画像をぼかして柔らかくし、ノイズを除去します。この手順によって、エンコーダでエンコードしなければならないノイズが最小化されます。結果として、エンコードが高速化され、出力ファイルサイズが減少し、画質が向上します。また、通常、モーションの表示が向上します。ブラーの方向を指定できます。「出力」タブを選択し、このエフェクトの結果をプレビューします。ブラーの量を設定します。数値を大きくすると、ブラーの量が増加します。ブラーの量を指定するには、ホットテキストをドラッグするか、数値を入力します。
ブラーの方向
ブラーの方向を設定します。メニューから、「水平および垂直」、「水平」、「垂直」のいずれかを選択します。注意: エンコードの品質の向上や圧縮ファイルサイズの縮小以外の理由でも、プロジェクトからノイズや粒子を削除できます。
「ビデオ」書き出し設定
書き出し設定ダイアログボックスの「ビデオ」タブで設定可能なオプションは、指定した形式によって異なります。「ビデオ」の設定には、次のオプションの一部またはすべてが含まれます。ビデオの設定は、「ビデオコーデック」、「基本ビデオ設定」、「詳細設定」、「ビットレート設定」、「ビデオヒントトラック設定」、「GOP 設定」などの見出しの下に表示されます。注意: 一部のキャプチャカードやプラグインソフトウェアアプリケーションには、特定のオプションを含む独自のダイアログボックスがあります。表示されるオプションが、ここで説明するオプションと異なる場合は、キャプチャカードやプラグインのマニュアルを参照してください。最終的なレンダリング時間を短縮するには、次のようにします。キャプチャと書き出しで同じコーデックを使用します。変更を行ったときにシーケンスのプレビューをレンダリングします。書き出しの品質設定をキャプチャの品質設定と一致するように設定します。
ビデオコーデックまたはコーデック
ビデオのエンコードに使用するコーデックを指定します。使用可能なコーデックは、選択する形式によって異なります。注意: ハードウェアベースのコーデックが提供するオプションが見つからない場合は、ハードウェア製造元の取扱説明書を参照してください。ビデオキャプチャハードウェアに含まれている一部のコーデックでは、独自のダイアログボックスで圧縮オプションを設定する必要があります。ビデオの画質を指定します。一般的に、値を大きくすると、レンダリング時間とファイルサイズが増加します。利用可能な場合は、スライダをドラッグするか、値を入力して、書き出す画質を調整します。元のキャプチャの画質より高い画質を設定しようとしても、画質は変わらず、レンダリング時間が長くなる場合があります。
幅またはフレームの幅
出力ファイルのフレームの幅をピクセル単位で指定します。
高さまたはフレームの高さ
出力ファイルのフレームの高さをピクセル単位で指定します。出力ファイルのフレームレートをフレーム/秒(fps)で指定します。コーデックによっては、サポートするフレームレートが制限されます。ソースクリップ、プロジェクトまたはシーケンスのフレームレートに応じて、フレームレートを上げるとモーションが滑らかになる場合がありますが、必要なディスク容量が増えます。色深度を bit/チャンネル(bpc)、つまりカラーチャンネルごとに割り当てられるビット数で指定します。
アルファチャンネルのエンコード
FLV など、アルファチャンネルをサポートする形式の書き出しファイルに、アルファチャンネルをエンコードします。
フィールドオーダーまたはフィールドタイプ
出力ファイルにプログレッシブフレームとインターレースフィールドのどちらが含まれるか、インターレースフィールドの場合は、どちらのフィールドを先に書き込むかを指定します。プログレッシブは、コンピュータディスプレイや、映画フィルムに適した設定です。NTSC、PAL などのインターレースメディア用のビデオを書き出す場合は、「奇数フィールドから」または「偶数フィールドから」を選択します。
縦横比またはピクセル縦横比
ピクセル縦横比を指定します。出力タイプで適切な設定を選択します。
ピクセル縦横比(括弧内に表示される)が 1
0 の場合、出力のピクセルは正方形になります。それ以外の場合は、ピクセルは長方形になります。コンピュータは一般的にピクセルを正方形として表示するので、正方形以外のピクセル縦横比を使用するコンテンツは、コンピュータのモニタでは引き伸ばされて表示されます。このコンテンツをビデオモニタで表示すると、正しい比率で表示されます。
最大深度でレンダリング
高ビット数のアセットを含んだシーケンスを Adobe Media Encoder でレンダリングする際に、それらのアセットの最高ビット数を使用するかどうかを指定します。
ビットレートモードまたはビットレートエンコーディング
コーデックで書き出すファイルで固定ビットレート(CBR)と可変ビットレート(VBR)のどちらを実現するかを指定します。限界値を指定してソースビデオの各フレームを圧縮し、固定ビットレートのファイルを生成します。したがって、複雑なデータを含むフレームの圧縮率は高くなり、複雑ではないフレームの圧縮率は低くなります。
制約付き可変ビットレート
書き出したファイルのデータレートが指定した範囲内で変化することを許可します。圧縮率が一定である場合、複雑な画像は単純な画像よりも画質が低下するので、VBR エンコーディングでは、複雑なフレームの圧縮率は低くし、単純なフレームの圧縮率は高くなります。
制約なし可変ビットレート
書き出したファイルのデータレートが制限なく変化することを許可します。エンコーダはファイルを先頭から末尾まで 1 パスで処理します。シングルパスエンコードでは、デュアルパスエンコードよりも処理時間は短くなりますが、出力の品質は低くなります。エンコーダはファイルを先頭から末尾へ、次に末尾から先頭へと 2 パスで処理します。2 回目のパスによって処理時間は長くなりますが、エンコードの効率は高くなり、通常、出力の品質が向上します。注意: 同じコンテンツとファイルサイズの CBR ファイルと VBR ファイルを比較した場合、一般的に次のように考えられています。CBR ファイルのほうが幅広いシステムで確実に再生されます。これは、固定ビットレートはメディアプレーヤーやコンピュータのプロセッサに対する負担が小さいからです。ただし、VBR は画像のコンテンツに合わせて圧縮率を調整するので、VBR ファイルのほうが高画質になります。
エンコードされるファイルに対して再生の値(Mbps)を指定します (この設定は、「ビットレートエンコーディング」オプションで「CBR」を選択した場合にのみ利用できます)
以下のオプションは、「ビットレートエンコーディング」オプションで「VBR」を選択した場合のみ表示されます。エンコーダでエンコード前にクリップを分析する回数を指定します。
2 パスによってファイルのエンコードにかかる時間は長くなりますが、一般的により効率的な圧縮が行われ、画質が高くなります (Adobe After Effects は 2 パスのエンコーディングをサポートしていません)
ビットレートを設定
出力ファイルのビットレートを一定にする場合に選択します。ビットレートを指定する場合に選択します。次に、ホットテキストに目的の値が表示されるまでスライダをドラッグします。エンコーダに許容する最大ビットレートを指定します。エンコーダに許容する平均ビデオビットレートを指定します。264 ビデオコーデックを使用しているビデオをエンコードするときにエンコーダに許容する平均ビデオビットレートを指定します。エンコーダに許容するピークビットレートを指定します。エンコーダに許容する再生の最小値(Mbps)を指定します。最小ビットレートは形式によって異なります。インターレース処理を可能にする。シーケンスのビデオがインターレース方式の場合、映画フィルムやプログレッシブスキャンビデオなど、ノンインターレースメディアに書き出す場合は、このオプションを選択します。インターレースを解除すると、After Effects などの別のプログラムで高度なエフェクトを簡単に適用することもできます。シーケンスコンテンツにフィールドがない場合は、このオプションを選択せずに、「フィールド」オプションで「なし」を選択します。連続する I フレーム(イントラフレーム)と P フレーム(予測フレーム)の間の B フレーム(双方向フレーム)の数を指定します。I フレーム(イントラフレーム)間のフレーム数を指定します。この値は「M フレーム」値の倍数にする必要があります。
静止画像の最適化または静止画像を表示
このオプションは、シーケンスに配置されている静止画をビデオクリップとして効率よく書き出しする場合に選択します。例えば、毎秒 30 フレームに設定されているプロジェクトにデュレーションが 2 秒の静止画がある場合は、1/30 秒のフレームを 60 個作成するのではなく、2 秒のフレームを 1 つ作成します。このオプションを選択すると、静止画像を含むシーケンスやクリップに必要なディスク容量を節約できます。書き出したビデオファイルが静止画をうまく再生できない場合にだけ、このオプションの選択を解除してください。
キーフレームの間隔(秒)またはキーフレームの間隔(フレーム)
ビデオの書き出し時にコーデックがキーフレームを作成する頻度をフレーム数で指定します。On2VP6 コーデックを使用して FLV ビデオ形式で書き出す場合にのみ使用できます。シンプルプロファイルを選択すると、メモリや処理リソースが少ない古いコンピュータやその他のデバイスで再生できるように、高解像度のビデオコンテンツを最適化できます。On2VP6 コーデックを使用して FLV ビデオ形式で書き出す場合にのみ使用できます。このオプションを選択すると、撮影するターゲットデータレートの割合を指定できます。これにより、難しいセクションを改善するためにバッファ内で他のデータを使用できるようになります。FLV 形式で書き出す場合にのみ使用できます。このオプションを選択すると、Adobe Media Encoder でビデオをエンコードするときに、エンコーディング品質とエンコードにかかる時間とのバランスを指定できます。ビデオをエンコードするときに、画像の品質と所要時間とのバランスをとります。これが初期設定値です。ビデオをエンコードするときに最も高い画像品質となりますが、時間がかかります。ビデオのエンコードにかかる時間を最短にしますが、画像の品質は下がります。テスト用のビデオコンテンツに適しています。注意: MPEG1 および MPEG2 形式には、ここには示されていない高度なオプションが数多く含まれています。多くの場合、ターゲット出力用の形式またはプリセットを選択すると、適切なオプションが自動的に設定されます。
「オーディオ」書き出し設定
書き出し設定ダイアログボックスの「オーディオ」タブに設定可能なオプションは、指定した形式によって異なります。「オーディオ」タブには、次のようなオプションが表示されます。
オーディオコーデックまたはコーデック
オーディオのエンコードに使用するコーデックを指定します。多くのモバイルデバイスがサポートしている高品質エンコーディング形式です。
このコーデックは、H
SBR は、特に低ビットレートでのオーディオコーデックを強化したテクノロジで、周波数ドメイン内の倍音の冗長に基づいています。オーディオコーデックそのものはスペクトルの低~中周波数を伝送しますが、SBR はデコーダで低~中周波数を倍音に置き換えることにより、より高い周波数のコンテンツを複製します。AAC+ Version 2 ビットストリームは、ステレオオーディオ信号をモノラルにダウンミックスすることで生成されます。デコーダは、Parametric Stereo 情報とモノラルオーディオストリームを組み合わせることにより、非常に低いビットレートを使用して、元のステレオパノラマを忠実に再現した空間を再生できます。非圧縮エンコード形式です。この形式のファイルは他の形式よりサイズが大きくなる傾向があります。エンコードされたオーディオデータを格納するために使用されるファイル形式です。一部のオーディオ形式では、非圧縮のオーディオだけをサポートしています。最高の音質が得られますが、より多くのディスク容量が必要になります。一部の形式は、1 つのコーデックにのみ対応しています。形式によっては、サポートされているコーデックの一覧からコーデックを選択できるものもあります。
サンプルレートまたは周波数
より高いレートを選択すると、オーディオを個々のデジタル値に変換、つまりサンプリングする際の周波数が高くなります。サンプルレートが高くなると、オーディオの品質が向上してファイルサイズが増加し、サンプルレートが低くなると、品質が低下してファイルサイズが減少します。ただし、書き出し設定ダイアログボックスでオーディオソースのサンプルレートよりも高いサンプルレートを設定しても、品質は向上しません。ソースファイルのサンプルレートと異なるサンプルレートを設定すると、リサンプリングが必要になり、処理時間が長くなります。リサンプリングを避けるためには、書き出すときと同じレートでオーディオを録音します。
チャンネルまたは出力チャンネル
書き出すファイルのオーディオチャンネルの数を指定します。シーケンスやプロジェクトのマスタートラックのチャンネル数よりも少ないチャンネル数を選択した場合は、Adobe Media Encoder によってオーディオがミックスダウンされます。高いビット数を選択すると、オーディオサンプルの精度が向上します。ビット数を高くすると、フィルタ処理やリサンプリングなどの追加処理を行う場合に、ダイナミックレンジが向上し、歪みが減少します。ビット数が高くなると処理時間やファイルサイズも大きくなり、ビット数が低いと処理時間やファイルサイズは減少します。ただし、書き出し設定ダイアログボックスでオーディオソースのビット数よりも高いビット数を設定しても、品質は向上しません。書き出すファイルのビデオフレームに挿入するオーディオ情報の挿入頻度を指定します。推奨設定については、キャプチャカードのマニュアルを参照してください。値を 1 フレームに設定すると、1 つのフレームが再生されるときにそのフレーム分のデュレーションのオーディオが RAM に読み込まれ、次のフレームが表れるまでそのフレームを再生することができます。再生時にオーディオが途切れる場合は、インターリーブの値を調整します。値を大きくすると、コンピュータにより長いオーディオセグメントを保存でき、処理の頻度が低くなります。ただし、インターリーブ値を大きくすると、より多くの RAM が必要になります。値を小さくすると、再生が滑らかになる場合があります。ほとんどのハードディスクでは、1/2 ~ 1 秒のインターリーブ値が最適な設定です。値を 0 に設定すると、オーディオインターリーブが無効になり、レンダリング時間が短縮されます。ピクセル寸法の大きいアセットを含むプロジェクトでは、オーディオインターリーブを無効にすることを検討してください。オーディオの出力ビットレートを指定します。一般的に、ビットレートを高くすると、品質は向上しますが、ファイルサイズも増加します。注意: ここに記載されていないオプションは、該当する形式に独自に設定されているものです。詳しくは、選択した形式の規格書を参照してください。
「配信先」書き出し設定
「配信先」タブのオプションを使用することで、さまざまなネットワーク速度に適合するムービーの出力バリエーションが広がります。各形式に関連付けられたプレーヤーソフトウェアは、滑らかな再生を行うために最適なバージョンを検出して選択します。注意: 一部のコーデック固有の設定は、ここには記載されていません。特定のコーデックについて詳しくは、コーデックの開発元から提供されているドキュメントを参照してください。「ビデオ」タブで選択したコーデックが適用されるように指定します。「圧縮」は初期設定で、ほとんどのユーザに適しています。圧縮を適用しないように指定します。この設定ではファイルサイズが大きくなるため、ほとんどのユーザには適していません。
「その他」書き出し設定
書き出し設定ダイアログボックスの「その他」タブでは、書き出したファイルを、ファイル共有のための領域が割り当てられている FTP(ファイル転送プロトコル)サーバにアップロードすることができます。FTP はネットワーク経由でファイルを転送するための一般的な方法であり、特にインターネット接続を使用して比較的大きいファイルを送受信するのに便利です。サーバへの接続方法について詳しくは、サーバの管理者にお問い合わせください。「その他」タブには、次のようなオプションがあります。FTP サーバのコマンドポートに割り当てられた数値を指定します。FTP サーバ上のアクセスする場所を、ファイルパス形式で入力します。サーバの管理者から指定されたユーザ ID を入力します。パスワードで保護されたサーバに対するパスワードを入力します。接続が確立されていない場合に、サーバへの接続を試行する回数を指定します。
ローカルファイルをごみ箱に移動
書き出したファイルが FTP サーバにアップロードされたら、ローカルディスクのファイルを削除します。FTP サーバとの接続を検証します。
XMP メタデータの書き出し
XMP メタデータとクリップの書き出し
クリップにメタデータが含まれている場合、クリップをエンコードするときにクリップのメタデータを書き出すことができます。書き出し設定ダイアログボックスで、必要に応じて、詳細設定モードボタン をクリックしてオプションパネルを表示します。オプションパネルの右側にあるパネルメニューボタン をクリックして、パネルメニューを開きます。「ソース XMP メタデータを含める」を選択します。
書き出し前のファイル内の XMP メタデータの編集
シーケンスやコンポジションにメタデータを追加して、シーケンスやコンポジションをエンコードするときにメタデータを書き出すことができます。書き出し設定ダイアログボックスで、オプションパネルが表示されていない場合は、詳細設定モードボタン をクリックします。オプションパネルの右側にあるパネルメニューボタン をクリックして、パネルメニューを開きます。「ファイル情報」を選択します。ダイアログボックスで、必要なメタデータフィールドに情報を入力し、「OK」をクリックします。
書き出し前のファイルへの XMP メタデータの追加
書き出し設定ダイアログボックスで、オプションパネルが表示されていない場合は、詳細設定モードボタン をクリックします。オプションパネルの右側にあるパネルメニューボタン をクリックして、パネルメニューを開きます。「ファイル情報」を選択します。ファイル情報ウィンドウで、読み込むメタデータの種類のタブを選択します。(オプション)「説明」タブなど、一部のタブには、様々な種類の著作権データなど、テンプレートメタデータを選択できるメニューが表示されます。目的の種類を選択します。「OK」ボタンの横にあるメニューから「読み込み」を選択し、オプションの読み込みポップアップメニューで目的のオプションを選択し、「OK」をクリックします。目的の XMP ファイルを探して選択し、「開く」をクリックします。
ビデオのクロップ、トリミングおよびサイズ変更
エフェクトについて
エフェクトおよびアニメーションプリセット / エフェクトおよびアニメーションプリセットの概要
エフェクトについて
After Effects には、レイヤーに適用する様々なエフェクトが用意されており、ビデオおよびオーディオの特性を追加または変更できます。例えば、エフェクトを使用すると、レイヤーイメージの露出やカラーの変更、新しいビジュアル要素の追加、サウンドの操作、イメージの変形、粒子の削除、様々な照明の追加、テキストのアニメート、トランジションの作成などを行うことができます。エフェクト&プリセットパネルを使用して、エフェクトを参照したり適用したりできます。これらのエフェクトプロパティは、エフェクトコントロールパネルまたはタイムラインパネルを使用したり、レイヤーパネルまたはコンポジションパネルでエフェクトコントロールポイントを移動することによって変更できます。1 つのレイヤーに対して同じエフェクトを複数回適用し、各インスタンスの名前を変更し、インスタンスごとに異なるプロパティを設定することができます。
エフェクトの適用と使用についてのビデオチュートリアルを利用するには、アドビ システムズ社の Web サイト(www
エフェクトはプラグインとして含まれるので、Adobe 以外の製品のエフェクトもインストールして使用できます。Plug-ins フォルダには、新しいエフェクトをファイル単体で追加することも、フォルダごと追加することもできます。After Effects を起動すると、Plug-ins フォルダとサブフォルダにインストールされたすべてのエフェクトが検索され、エフェクトメニューおよびエフェクト&プリセットパネルに追加されます。名前がかっこで囲まれたフォルダの内容は無視されます。アドビ システムズ社では、After Effects で使用する様々なサードパーティ製のエフェクトプラグインを提供しています。After Effects のエフェクトの各種カテゴリについての詳細は、エフェクトの使用方法を参照してください。
エフェクトのアニメート
他のプロパティをアニメートする場合と同じく、エフェクトのプロパティをアニメートするには、キーフレームやエクスプレッションを追加します。ほとんどの場合、ごく一般的な方法でアニメーションを使用するようなエフェクトでも、いくつかのキーフレームやエクスプレッションを設定する必要があります。例えば、トランジションエフェクトの変換終了プロパティや、フラクタルノイズエフェクトの展開設定をアニメートして、静的なエフェクトを動的なエフェクトに変換する場合などです。エフェクトが 8 bpc だけをサポートし、プロジェクトが 16 bpc または 32 bpc に設定されている場合、エフェクトコントロールパネルでは、エフェクト名の横に警告アイコン が表示されます。
エフェクト&プリセットパネルは、現在のプロジェクトの色深度をサポートするエフェクトだけを表示するように設定できます(色深度の設定を参照)
レンダリングの順序
マスク、エフェクト、レイヤースタイルおよびトランスフォームプロパティのレンダリング順序は、適用したエフェクトの最終結果に影響を与える場合があります。初期設定では、エフェクトは適用された順序でタイムラインパネルとエフェクトコントロールパネルに表示されます。エフェクトは、このリストの上から順にレンダリングされます。
エフェクトのレンダリング順序を変更するには、リスト内でエフェクト名を新しい位置にドラッグします(レンダリングの順序とトランスフォームのコラップスを参照)
調整レイヤーにエフェクトを適用すると、タイムラインパネルのレイヤーの重なり順で、下にあるすべてのレイヤーに反映されます(調整レイヤーを作成するを参照)
「エクスプレッション制御」エフェクトは、既存のレイヤーのプロパティを変更するのではなく、エクスプレッションが参照するレイヤーのプロパティを追加するのに使います(エクスプレッション制御エフェクトの使用を参照)
範囲拡張エフェクトによるエッジクリッピングの防止
エフェクトがレイヤーに適用されることにより、エフェクトの結果がレイヤーの境界内のみでしか有効とならず、エフェクトが唐突に途切れたように見える場合があります。「範囲拡張」エフェクトをレイヤーに適用すると、他のエフェクトの結果を計算するために一時的にレイヤーを拡張できます。この処理は、32 bpc 対応エフェクトなどの最近のエフェクトでは必要ありません。
プラグインについて
タイムラインパネルのレイヤースイッチと列
スマートマスク補間を使用する。スマートマスク補間は、マスクパスのキーフレームを細かく設定し、滑らかで自然なアニメーションを作成できるようにする機能です。補間するキーフレームを選択すると、設定に基づいて、中間キーフレームが作成されます。情報パネルには、補間の進行状況と作成されたキーフレームの数が表示されます。ウィンドウ/スマートマスク補間を選択します。マスクパスの連続するキーフレームを少なくとも 2 つ選択します。スマートマスク補間パネルでオプションを設定し、「適用」をクリックします。注意: 補間を中止するには、Esc キーを押します。情報パネルに処理が中止されたことが示され、作成されたキーフレームの数が表示されます。選択したキーフレームの間に、1 秒間に作成するキーフレームの数を指定します。1 秒に 1 つ新しいキーフレームが追加されます。「自動」を選択すると、コンポジションのフレームレートと同じレートが設定され、括弧内に表示されます。キーフレームを多くするとアニメーションがスムーズになり、少なくするとレンダリングにかかる時間が短くなります。注意: ただし、設定したキーフレームレートに関係なく、常に、マスクパスの最初のキーフレームの直後のフレームと、2 番目のキーフレームの直前のフレームに新しいキーフレームが追加されます。キーフレームレートを 2 倍に設定します。このオプションを選択し、キーフレームレートをコンポジションのフレームレートに設定した場合は、各ビデオフィールドにキーフレームが 1 つ追加されます。インターレースのビデオのアニメーションマスクには、このオプションを選択します。このオプションを選択しないと、キーアウトしようとしているオブジェクトがマスクされない場合があります。インターレースのビデオについての詳細は、インターレースビデオとノンインターレースビデオについてを参照してください。
直線の頂点パスの使用
最初のキーフレームの頂点が、直線パスに沿って 2 番目のキーフレームの対応する頂点に移動するように指定します。頂点を曲線パスに沿って補間する(回転する部分がある場合など)場合は、このオプションを選択しないでください。このオプションを選択しないと、マスクの自然なパスが作成されます。キーフレームの補間が、パスの伸縮と曲げにどの程度影響するかを指定します。値を 0 に設定すると、パスをアニメートするときに伸縮するよりも曲がるようになります。100 に設定すると、曲がるよりも伸縮するようになります。最初のキーフレーム上の頂点を 2 番目のキーフレーム上の頂点に、どれだけ厳密に一致させるかを指定します。値を 0 に設定すると、最初のキーフレーム上の特定の頂点は、2 番目のキーフレーム上の同じ番号の頂点のみに一致します。例えば、最初のキーフレーム上の 10 番目の頂点は、2 番目のキーフレーム上の 10 番目の頂点に必ず一致します。値を 100 に設定すると、最初のキーフレーム上の頂点は、2 番目のキーフレーム上の頂点のいずれかに一致することになります。通常、値が大きいほど、補間結果がよくなりますが、処理時間が長くなります。
マスクシェイプの頂点を追加
頂点を追加して、よい補間結果が得られるようにします。一般に、スマートマスク補間は、頂点が密な場合に最も効率的に動作します。また、最初のマスクパス上の頂点を、2 番目のマスクパスの曲線または直線のセグメントの途中には一致させられないので、最適な結果を得るには、一致させる前に頂点を追加しなければならないことがあります。スマートマスク補間で、元のキーフレームが変わることはありません。計算された新しいマスクパスのキーフレームだけに頂点が追加されます。設定した値によって、入力マスクパスがどの程度細分されるかが決まります。「頂点間のピクセル数」で、長いパスを細分する頂点間の距離をピクセル単位で指定します。「合計頂点数」は、補間するパスに置くすべての頂点の数です。「アウトラインのパーセント」で、マスクパスのアウトラインの長さの何パーセントごとに頂点を追加するかを指定します。例えば、値を 5 に設定すると、アウトラインの全長の 5%ごとに、それぞれのセグメントに頂点が追加されます。最初のフレームのパスにある頂点だけを使用する場合は、このオプションを選択しないでください。注意: スマートマスク補間では、「マスクシェイプの頂点を追加」オプションを選択していなくても、既存の頂点の場所に頂点が追加されることがあります。1 つのパスの 2 つの頂点が、別のパスの 1 つの頂点に一致する場合は、この 1 つの頂点が同じ場所に複製され、2 つの頂点間のセグメントがその場所で縮みます。最初のマスクパスの頂点を 2 番目のマスクパスの頂点に一致させるときに使用するアルゴリズムを指定します。「自動」に指定すると、選択した 2 つのキーフレームのどちらかに曲線が含まれている場合は、曲線用の一致アルゴリズムが使用されます。そうでない場合は、ポリライン用のアルゴリズムが使用されます。「カーブ」に指定すると、曲線のセグメントを含むマスクパス用のアルゴリズムが適用されます。「ポリライン」に指定すると、直線のセグメントだけのマスクパス用のアルゴリズムが適用されます。注意: 「一致方法」で「ポリライン」を選択すると、入力マスクパスに曲線のセグメントが含まれているかどうかにかかわらず、追加されるパスのキーフレームはポリラインになります。マスクパス間で同じ番号の頂点を一致させます。それぞれの入力マスクパスで、1 番目は 1 番目に、2 番目は 2 番目に、3 番目は 3 番目という要領で頂点を一致させます。2 つのマスクパスの頂点の数が異なる場合は、よい結果が得られないことがあります。
最初の頂点を一致
2 つのマスクパスキーフレームの最初の頂点を一致させます。このオプションを選択しないと、2 つの入力マスクパスの一致する最初の頂点が自動的に検出されます。注意: よい結果を得るには、入力マスクパスの最初の頂点が一致していることを確認してから、このオプションを選択してください。
オーディオピッチのタイムリマップ
タイムリマッププロパティの速度グラフは、オーディオファイルのピッチに連動します。速度グラフを微妙に変化させることで、様々なエフェクトを作成できます。甲高い耳障りな音が発生しないようにするには、速度を 200%より低い値に抑えます。速度が高すぎる場合は、「オーディオ」プロパティの下にあるレベルコントロールを使用して音量を制御します。タイムリマップグラフで新しいインポイントとアウトポイントを設定した後、オーディオレイヤー(またはオーディオ/ビデオレイヤー)の始めと終わりで、カチッというクリック音が聞こえることがあります。このようなノイズは、レベルコントロールを使用して除去できます。オーディオレイヤーのピッチを変更する。コンポジションパネルまたはタイムラインパネルで、タイムリマップするレイヤーを選択します。レイヤー/時間/タイムリマップ使用可能を選択します。必要に応じてタイムラインパネルのグラフエディタボタンをクリックして、グラフエディタを表示します。グラフエディタのグラフの種類とオプションを選択ボタンをクリックし、「速度グラフを編集」を選択します。グラフエディタで、変更を開始するフレームに現在の時間インジケータを移動してから、キーフレームを追加ボタンをクリックします。キーフレームの下の速度グラフで、マーカーをドラッグしながら、速度値の変化に注意します。ピッチを低くするには、速度グラフのマーカーを下にドラッグします。ピッチを上げるには、速度グラフのマーカーを上にドラッグします。新しいインポイントとアウトポイントからクリックノイズを除去する。必要に応じて、ウィンドウ/オーディオを選択します。タイムラインパネルで、タイムリマップを適用するオーディオ(またはオーディオ/ビデオ)レイヤーを選択します。レイヤーのアウトラインを拡張し、「オーディオ」プロパティを表示して「オーディオレベル」プロパティを表示します。現在の時間インジケータを新しいインポイントに移動し、アニメーション/オーディオレベルキーフレームを追加を選択します。
オーディオパネルで、デシベル値を 0
0 に変更します。キーボードの Page Up キーを押して、現在の時間インジケータを前のフレームに移動します。
オーディオパネルで、デシベルレベルを -96
0 に変更します。現在の時間インジケータを新しいアウトポイントに移動し、デシベルレベルを 0 に設定します。キーボードの Page Down キーを押して、現在の時間インジケータを次のフレームに移動します。
オーディオパネルで、デシベルレベルを -96
0 に変更します。デシベルスライダの最小値は、オーディオオプションダイアログボックスで変更できます。このダイアログボックスは、オーディオパネルメニューから表示できます。
ビデオとオーディオのプレビュー
レイヤーのタイムリマップ
タイムリマップは、レイヤー全体または一部で実行できます。たとえば、レイヤーの最初または最後のフレームでタイムリマップを行って固定フレームの結果を作成することも、レイヤーの中間部のフレームでタイムリマップを行って、数秒間だけのスローモーションの結果を作成することも可能です。速度を変更せずに最初のフレームを固定する。コンポジションパネルまたはタイムラインパネルで、タイムリマップするレイヤーを選択します。レイヤー/時間/タイムリマップ使用可能を選択します。ムービーを開始する時点に現在の時間インジケータを移動します。「タイムリマップ」プロパティ名をクリックして、開始キーフレームと終了キーフレームを選択します。
最初のキーフレームを現在の時間インジケータにドラッグすると、開始キーフレームと終了キーフレームが移動します(グラフエディタで作業している場合は、キーフレームやハンドルではなくバウンディングボックスをドラッグして、両方のキーフレームが移動するようにします)
グラフエディタを使用したタイムリマップ
グラフエディタモードとレイヤーバーモードを切り替えるには、Shift+F3 キーを押します。コンポジションパネルまたはタイムラインパネルで、タイムリマップするレイヤーを選択します。レイヤー/時間/タイムリマップ使用可能を選択します。タイムラインパネルで、タイムリマッププロパティの名前をクリックして選択します。キーフレームを追加する時間に現在の時間インジケータを移動し、キーフレームナビゲータのキーフレームボタン をクリックしてキーフレームを追加します。グラフエディタで、キーフレームマーカーを上下にドラッグしながら、タイムリマップ値の変化に注意します。別のキーフレームにスナップするには、Shift キーを押しながらドラッグします。キーフレームを下にドラッグして、レイヤーを遅くします。
レイヤーの動きを遅くするには、キーフレームを下へドラッグします(レイヤーを逆方向に再生している場合は、上にドラッグします)
レイヤーの動きを速くするには、キーフレームを上にドラッグします(レイヤーを逆方向に再生している場合は、下にドラッグします)
フレームを逆方向に再生するには、キーフレームを前のキーフレーム値より低い値にドラッグします。フレームを正方向に再生するには、キーフレームを前のキーフレーム値より高い値にドラッグします。前のキーフレームを停止するには、キーフレームマーカーを前のキーフレーム値と等しい値にドラッグして、グラフが水平になるようにします。キーフレームを選択して、アニメーション/停止したキーフレームの切り換えを選択し、モーションを再開する時点に別のキーフレームを追加する方法もあります。タイムリマップマーカーを移動する前に、レイヤーで後続のすべてのタイムリマップキーフレームを選択しておくことをお勧めします。そうすることにより、現在のキーフレームにタイムリマップを実行するときに、レイヤーの他の部分のタイミングが維持されます。
レイヤーパネルでのタイムリマップ
タイムリマップするレイヤーのレイヤーパネルを開きます。レイヤー/時間/タイムリマップ使用可能を選択します。2 番目の時間スケールが、レイヤーパネルの初期設定時間スケールとナビゲータバーの上に表示されます。下の時間スケール上で、変化を開始する最初のフレームに現在の時間インジケータを移動します。上の時間スケール上のタイムリマップマーカーは、下の時間スケールが示す時刻に現在マップされているフレームを示します。下の時間スケールが示す時刻に別のフレームを表示するには、それに応じてタイムリマップマーカーを移動します。
フルサイズのグラフィックを表示
タイムリマップマーカーをドラッグして、現在の時間インジケータ位置のフレームを置き換えます。下の時間スケール上の現在の時間インジケータを、変化を開始する最後のフレームに移動します。上の時間スケール上のタイムリマップマーカーを、以下のように下の時間スケールが示す時刻に表示するフレームに移動します。先にくるレイヤー部分を正方向に移動するには、タイムリマップマーカーを現在の時間インジケータよりも後に設定します。先にくるレイヤー部分を逆方向に移動するには、タイムリマップマーカーを現在の時間インジケータよりも前に設定します。フレームを停止するには、停止するフレームにタイムリマップマーカーを設定します。次に、フレームが停止して見える最後の時点に現在の時間インジケータ(下のスケール)を移動して、停止するフレームにもう一度タイムリマップマーカーを移動します。
アニメーション、キーフレームおよびエクスプレッションについて
グラフエディタを使用した作業
マーカーについて
コンポジションタイムマーカーとレイヤータイムマーカーを使用すると、コンポジションまたは特定のレイヤーの特定の時間にマーカーを設定できます。これら 2 種類のマーカーには同じ情報を保持できますが、コンポジションタイムマーカーはコンポジション全体の時間スケールに表示され、レイヤータイムマーカーは特定のレイヤーデュレーションバーに表示されます。マーカーを含むコンポジションをレンダリングすると、マーカーは、マーカーダイアログボックスで設定した値に基づいて、Web リンク、チャプターリンク、Flash Video キューポイントまたは Clip Notes コメントに変換されます。コンポジションタイムマーカーの初期設定のコメントは番号ですが、レイヤータイムマーカーには初期設定のコメントはありません。
マーカーとキューポイントの使用についてのビデオチュートリアルを利用するには、アドビ システムズ社の Web サイト(www
マーカーを使用すると、レイヤーや現在の時間インジケータを特定の時間ポイントに簡単に配置できます。タイムラインパネル内で、Shift キーを押しながらキーフレーム、現在の時間インジケータまたはレイヤーデュレーションバーをドラッグすると、これらのアイテムがマーカーにスナップされます。マーカーにコメント以外のデータが含まれている場合は、マーカーのアイコンの中心に小さい点が表示されます。
キューポイントデータを含むコンポジションタイムマーカー
キューポイントデータを含むレイヤータイムマーカー
あるコンポジションを別のコンポジションに追加すると、元のコンポジションはコンポジション内のレイヤーに変わります。ネスト化されたコンポジションのコンポジションタイムマーカーは、親コンポジションのタイムラインパネルではすべてレイヤータイムマーカーになります。これらのマーカーは元のコンポジションタイムマーカーにはリンクされていないので、元のコンポジションのコンポジションタイムマーカーに変更を加えても、ネスト化されたコンポジションのレイヤータイムマーカーは影響を受けません。例えば、元のコンポジションタイムマーカーの 1 つを削除しても、ネスト化されたコンポジションの対応するレイヤータイムマーカーはそのまま残ります。コンポジションを作成する。
コンポジション / コンポジションの基本
コンポジションを作成する。コンポジションパネルの設定はいつでも変更できますが、コンポジション作成時に、最終出力を考慮してフレームの縦横比やサイズなどを設定しておくことをお勧めします。After Effects では、一部の計算がコンポジション設定に基づいて行われるので、ワークフローの後の段階で設定を変更すると、最終出力に影響が出ることがあります。注意: 最終出力としてレンダリングするときに上書きできるコンポジション設定もあります。
例えば、1 つのムービーを異なるフレームサイズで出力できます(レンダリング設定を指定するおよび出力モジュール設定を指定するを参照)
新しいコンポジションを設定するとその設定が初期設定となり、次のコンポジション作成時に同じ設定が使用されます。注意: 「ネスト時またはレンダーキューでフレームレートを保持」と「ネスト時に解像度を保持」オプションの設定は、新しいコンポジションに継承されません。コンポジションを作成して設定する。1 つのフッテージアイテムから 1 つのコンポジションを作成する。フッテージアイテムをプロジェクトパネルの下部にある新規コンポジションを作成ボタン にドラッグするか、ファイル/複数アイテムから新規コンポジションを選択します。コンポジション設定は、フレームサイズ(幅と高さ)とピクセル縦横比も含め、フッテージアイテムの特性に合わせて自動的に設定されます。複数のフッテージアイテムから 1 つのコンポジションを作成する。プロジェクトパネルでフッテージアイテムを選択します。選択したフッテージアイテムをプロジェクトパネルの下部にある新規コンポジションボタン にドラッグするか、ファイル/複数アイテムから新規コンポジションを選択します。複数アイテムから新規コンポジションダイアログボックスで、「1 つのコンポジション」を選択し、次の各オプションを指定します。
このアイテムの寸法を適用
作成されるコンポジションに適用する、フレームサイズ(幅と高さ)やピクセル縦横比などの設定値を参照するフッテージアイテムを選択します。追加される静止イメージのデュレーションを指定します。
レンダーキューに追加
新規コンポジションをレンダーキューに追加します。レイヤーをシーケンスに配置します。また、レイヤーを時間的にオーバーラップさせ、トランジションのデュレーションと種類を指定することもできます。複数のフッテージアイテムから複数のコンポジションを作成する。プロジェクトパネルでフッテージアイテムを選択します。選択したフッテージアイテムをプロジェクトパネルの下部にある新規コンポジションボタン にドラッグするか、ファイル/複数アイテムから新規コンポジションを選択します。複数アイテムから新規コンポジションダイアログボックスで、「複数のコンポジション」を選択し、次の各オプションを指定します。静止イメージから作成するコンポジションの、デュレーションを指定します。
レンダーキューに追加
新規コンポジションをレンダーキューに追加します。コンポジションを複製する。プロジェクトパネルでコンポジションを選択します。コンポジション設定を使用して作業する。
ネスト化とプリコンポーズについて
レンダリングと書き出し / ムービーのエンコードオプションと圧縮オプション
レンダーキューパネルで、下線付きの出力モジュール名をクリックします。「ビデオ出力」セクションの「形式オプション」をクリックします。ビデオ圧縮ダイアログボックスで、圧縮ポップアップメニューから圧縮方法を選択します。
使用する元のイメージの種類やレンダリングしたムービーの使用目的に応じて、圧縮方法を選択します(使用可能な圧縮方法は、コンピュータにインストールされている Video for Windows コーデックによって異なります)
圧縮画質レベルを指定します。時間圧縮は、連続するフレームを比較して、変更されたデータのみを保存することによってムービーを圧縮します。時間圧縮を高画質で行うと、スムーズなモーションを維持できます。低画質で行うと、フレーム間の変化が顕著でない場合はピクセルの変化が認識されないので、モーションが不自然になりがちです。キーフレームレートをサポートする圧縮方法を選択している場合に、可能な限りファイルサイズを小さくするには、「キーフレーム」ボックスを選択して数値を入力します。通常は、フレームレートと同じ数値を入力する必要があります。例えば、フレームレートを 30 fps に設定している場合は、「キーフレーム」ボックスに 30 を入力します。この設定によって、ムービーの 30 フレームごとにキーフレームが 1 つ設定されます。注意: 完成したムービーを別の After Effects コンポジションで使用する場合は、「キーフレーム」ボックスで小さい値(5 以下)を入力するか、「キーフレーム」オプションの選択を解除します。ムービーにキーフレームが設定されていると、ムービーの編集およびレンダリングに必要なメモリが大幅に増加します。選択した圧縮方法でサポートされるイメージ色深度が異なる場合は、出力モジュール設定ダイアログボックスで、適切な色深度を選択します。出力モジュール設定ダイアログボックスでその他の設定を指定し、「OK」をクリックします。256 色に制限されているロスレス圧縮方法に使用します。デジタルビデオカメラでの録画に使用します。アルファチャンネルが必要で色深度を「数百万色+」に設定する場合に使用します。CD から再生するビデオを圧縮する場合に使用します。最高の仕上がりを実現するには、ロス圧縮方法を使用して圧縮されたことがないソースデータに Cinepak 圧縮を使用します。この圧縮方法は低速であることに注意してください。Cinepak を使用すると、圧縮よりも解凍のほうが処理速度が速く、再生時のデータレートを任意に定義することができます。ただし、アルファチャンネルを保存することはできません。レンダーキューパネルを使用する。出力モジュール設定を指定する。
ペイントツールのショートカット
ペイントの背景色と描画色の切り替え
ペイントの描画色を黒に、背景色を白に設定
描画色をペイントツールポインタの現在の色に設定
Alt を押しながらクリック
描画色をペイントツールポインタの 4 x 4 ピクセルエリアの平均色に設定
ペイントツールのブラシサイズを設定
ペイントツールのブラシの硬さを設定
現在のペイントストロークを前のストロークに結合
Shift を押しながらストロークを開始
開始サンプルポイントをコピースタンプツールポインタの現在の色に設定
Alt を押しながらクリック
「最後のストロークのみ」オプションをオンにして消しゴムツールを一時的にアクティブ化
オーバーレイの表示と変更(調整されたコピースタンプツールの「オフセット」の値を変更、または未調整コピースタンプツールの「ソース位置」の値を変更)
ペイントパネルで、コピースタンプツールプリセットを複製
Alt を押しながらプリセットをクリック
ペイントツールの不透明度を設定
ペイントツールの不透明度を 100%に設定
テンキーパッドの
ペイントツールの流量を設定
ペイントツールの流量を 100%に設定
ストロークのデュレーションで指定したフレーム数だけ前後に移動
キーフレームのショートカット
グラフエディタモードとレイヤーバーモードの切り替え
プロパティのキーフレームをすべて選択
プロパティ名をクリック
表示されているすべてのキーフレームとプロパティを選択
すべてのキーフレーム、プロパティおよびプロパティグループの選択を解除
キーフレームを 1 フレーム後ろまたは前に移動
キーフレームを 10 フレーム後ろまたは前に移動
選択したキーフレームの補間を設定(レイヤーバーモード)
補間法を停止または自動ベジェに設定
補間法をリニアまたは自動ベジェに設定
レイヤーバーモードで Ctrl を押しながらクリック
補間法をリニアまたは停止に設定
選択したキーフレームのイージーイーズ
選択したキーフレームのイージーイーズイン
選択したキーフレームのイージーイーズアウト
選択したキーフレームの速度の設定
現在の時間にキーフレームを追加または削除(プロパティショートカットについては、タイムラインパネルでプロパティを表示するためのショートカットを参照)
塗りつぶしエフェクト
エフェクトの使用方法 / 描画エフェクト
塗りつぶしエフェクト
「塗りつぶし」エフェクト(旧称「基本的な塗りつぶし」エフェクト)は、イメージファイル自体に影響を与えずに、ある領域を単色で塗りつぶすエフェクトです。このエフェクトは、漫画のような輪郭のある絵に色を付けたり、イメージの特定の領域の色を置き変えたりするのに使います。このエフェクトは、8 bpc カラーで使用できます。
塗りポイント
このポイントを含む領域を塗りつぶします。塗りポイントから外側に向かって周りのピクセルを分析していき、塗りつぶす範囲を決めます。塗りつぶす範囲は、「許容量」の設定と塗りセレクタメニューで選択するオプションによって変わります。
塗りセレクタ
塗る対象を指定します。塗りポイントの RGB チャンネルとアルファチャンネルが新しいカラーで塗りつぶされます。塗りポイント領域の RGB チャンネルだけが新しい色で塗りつぶされます。塗りポイント周辺の透明部分だけが塗りつぶされます。このオプションを使用するには、透明部分の中に塗りポイントを設定する必要があります。塗りポイント周辺の不透明部分だけが塗りつぶされます。このオプションを使用するには、不透明部分の中に塗りポイントを設定する必要があります。塗りポイントを設定した地点のアルファチャンネルの値によって、イメージ全体の不透明部分、または透明部分のいずれかが塗りつぶされます。「塗りポイント」のカラーとの差分を指定し、塗りの対象に含める範囲を指定します。値を大きくすると、塗りつぶす範囲が広くなります。
しきい値を表示
塗りの対象になるピクセル、つまり「許容量」の範囲内に収まっているピクセルを表示します。このオプションは、思わぬ結果になった場合に原因を見つけるのに便利です。小さな隙間があると、カラーがあふれて、塗りつぶすはずでない部分まで塗りつぶされることがあります。
塗りつぶす領域のエッジの処理方法
塗りつぶす領域のエッジにアンチエイリアスが適用されます。塗りつぶす領域のエッジにぼかしが適用されます。「ぼかしの柔らかさ」の値を設定することで、エッジのぼかし方がより自然になります。塗りつぶす領域が拡大されます。「拡散半径」の値が、塗りつぶしのカラーが、塗りつぶした領域のエッジからはみ出すピクセル数になります。塗りつぶす領域が縮小されます。「拡散半径」の値が、塗りつぶしのカラーが、塗りつぶした領域のエッジから縮むピクセル数になります。選択した領域の境界までを塗りつぶします。境界の外側は塗りつぶしません。「ストロークの幅」の値が、ストロークの幅(ピクセル単位)になります。
塗りつぶしの色
塗りつぶした領域の不透明度
元のレイヤーの上にエフェクトの結果を合成するのに使用する描画モード
「塗りのみ」を除き、どのモードもタイムラインの描画モードと同じように動作します。塗りつぶす部分だけを表示する場合は、「塗りのみ」を選択します。注意: 複数の「塗りつぶし」エフェクトをレイヤーに適用する場合は、複数に「塗りのみ」描画モードを指定しないように注意してください。複数のインスタンスでこの描画モードを指定すると、最初に適用したエフェクトだけが表示されます。
エフェクトの使用方法 / 描画エフェクト
レイヤー内で指定した 2 つの点の間に、稲光や電光の効果を生成します。古いホラー映画のようなヤコブのはしご効果も作成できます。このエフェクトは、キーフレームやエクスプレッションを指定しなくても、自動的にアニメートされます。このエフェクトは 8 bpc カラーで実行できます。
太さ、カラーおよび枝の数を変更して稲妻エフェクトを適用(左下、右下)
稲妻の開始点と終了点
メインの稲妻から引き出す線分の数
値を大きくすると細かい稲妻になりますが、動きのスムーズさは若干落ちます。
稲妻の振れの大きさ
レイヤーの幅に対する割合(%)で指定します。
再分割数、振幅の細かさ
稲妻とその枝の細かさを指定します。
「振動の細かさ」の通常の値は 0
いずれのオプションも、値を大きくすると静止画像はリアルになりますが、アニメーションは不自然になります。
線分の先の枝分かれ(フォーク)の程度
値を 0 に指定すると、枝分かれ処理は行われません。0 に指定すると、すべての線分で枝分かれ処理が行われます。
枝分かれの繰り返し
枝をさらに分かれさせる量
値を大きくすると、1 本の木のような稲妻になります。
枝分かれ角度
メインの稲妻と枝の角度
線分の平均の長さに対する割合で指定します。
各枝を構成する線分の最大数
長い枝を作るには、「枝の長さ」と「枝数」の両方を大きな値にします。
各枝の幅の平均
メインの稲妻の幅に対する割合で指定します。
稲妻の動く速さ
稲妻が、開始点と終了点を結ぶ線からどの程度外れて振れるかを指定します。値を小さくすると、稲妻がラインに沿って振動します。値を大きくすると、ラインから大きく外れて振動します。「安定度」と「引く力」を使用して、稲妻が「引く方向」で指定した方向に引っ張られた後に元の位置に戻る動きを調整することができます。「安定度」の値が小さすぎると、稲妻が弧状にならずに元に戻り、値が大きすぎると、稲妻が跳ねるように動きます。
終了点の固定
稲妻の終了ポイントを固定します。このオプションの選択を解除すると、稲妻の終端が終了点の周りを動き回ります。
幅、幅の変化
メインの稲妻の幅、および各線分の幅の変化の度合い
幅の変化はランダムに処理されます。値を 0 に設定すると、幅は変更されません。1 に設定すると、幅の変化が最大になります。
内側の光る幅
「内側のカラー」で指定した内側の光る部分の幅
稲妻全体の幅に対する割合を指定します。
外側のカラー、内側のカラー
稲妻の外側と内側の光る部分のカラー
「稲妻」エフェクトでは、これらのカラーをコンポジション内の既存のカラーの上に追加するので、原色のカラーを使用することをお勧めします。明るいカラーを選択すると実際よりも明るく表示されます。下にあるカラーの明るさによっては、白色に見える場合もあります。
引く力、引く方向
稲妻を引っぱる力の強さと方向
「引く力」を「安定度」とともに使用すると、「ヤコブのはしご」効果を作成することができます。
「稲妻」エフェクトの基となる乱数ノイズを生成するための入力値
生成された稲妻の動きが他のレイヤーやイメージの邪魔になる場合は、適切な動きになるまで値を変えていってください。
元のレイヤーの上に稲妻を合成するのに使用する描画モード
タイムラインパネルにあるものとまったく同じです。
各フレームで再実行
フレームごとに稲妻を生成し直します。再生するたびに同じフレームで同じように稲妻を生成する場合は、このオプションの選択を解除します。このオプションを選択するとレンダリングの時間が長くなります。「フラクタルノイズ」エフェクトは、パーリンノイズを使用して、背景やディスプレイスメントマップ、テクスチャを自然の材質のように見せるグレースケールノイズを作成したり、雲や溶岩、蒸気などをシミュレートしたりします。「展開」オプションで、フラクタルノイズの形が微妙に変わるようにします。これらの設定をアニメートすることにより、ノイズが時間の経過とともに滑らかに変化し、流れる雲や水などのエフェクトを作成できます。
フラクタルの種類
ノイズは、ノイズレイヤー(レイヤーの数は「複雑度」で指定します)ごとに、乱数のグリッドを生成することにより作成されます。この設定で、このグリッドの種類を決めます。
ノイズの種類
ノイズレイヤーのグリッドの乱数を補間する方法
ノイズを反転します。黒い領域は白になり、白い領域は黒になります。値を大きくすると、ノイズ中で白黒のはっきりした領域が増し、ディテールが荒くなります。値を小さくすると、グレー領域が増し、ノイズが軽減されます。
次のオプションのいずれかを使用して、0 ~ 1
0 の範囲外のカラー値をマップし直します。0 を超える値を純粋な白、0 未満の値を純粋な黒にマップし直します。コントラストの値で、範囲外になる広さが決まります。値を大きくすると、白と黒の部分が多くなり、グレーの部分が少なくなります。そのため、細部が粗く見えます。ルミナンスマットとして使用すると、レイヤーの透明部分がよりシャープになります。値を無制限のカーブにリマップするので、すべての値が範囲内に入ります。コントラストが下がるので、グレーの部分が多くなり、白と黒の部分が少なくなります。ルミナンスマットとして使用すると、レイヤーの透明部分は不明瞭になります。0 を超える値と 0 未満の値を両端で折り返してマップし直し、範囲内に収めます。このオプションの値を 100 より大きい値に設定すると、より微細なディテールを表示します。ルミナンスマットとして使用すると、レイヤーの透明部分のテクスチャが微細になります。何もマップし直しません。0 の範囲外の値がそのまま残ります。
ノイズレイヤーを回転、伸縮、配置するための設定
「遠近オフセット」を選択すると、レイヤーに遠近感が付きます。
フラクタルノイズを作成するために、「サブ設定」に従って合成するノイズレイヤーの数
この数を大きくすると、奥行きが深く見え、微細な部分まではっきり描かれます。注意: 「複雑度」の値を大きくすると、レンダリングにかかる時間が長くなります。場合によっては、「複雑度」を増す代わりにサイズを小さくし、短いレンダリング時間で同様の結果を得ることもできます。レンダリングに時間をかけずに、複雑なノイズに見えるようにするには、コントラストか明るさを負の値か非常に高い値に設定し、「オーバーフロー」で「ラップバック」を選択します。フラクタルノイズは、ノイズのレイヤーを合成することによって生成されます。「サブ設定」で、レイヤーをどのように合成するかと、レイヤーごとにプロパティをどのようにずらせていくかを決めます。レイヤーを順々にスケールダウンしていくと、細部がきれいに見えます。ノイズを合成するときに、各レイヤーがどの程度影響するかを指定します。100%に設定すると、すべての反復が同じ影響を持ちます。50%にすると、各反復の影響が前の反復の半分になります。
1 つのノイズレイヤーの前のレイヤーに対するスケーリングの比率、角度、位置
サブスケールを中心
どのノイズレイヤーも、すぐ前のレイヤーと同じ場所から計算します。この設定を使用すると、レイヤーが互いに重なり合っているように見えます。
一回りするたびにイメージが変化し続ける進行性の循環
これは、360°ごとにダイアル上の同じ設定が繰り返される通常の循環とは異なります。そのため、同じ 0 度における表示でも、1 循環後のものは異なり、2 循環後のものはさらにまた異なります。「展開」の設定を元の状態に戻すには(シームレスなループの作成時など)、「サイクル展開」オプションを使用します。「展開」をアニメートした場合に、一定の時間にノイズをどの程度変化させるかを指定できます。一定時間内の循環が多いほど、ノイズが急速に変化します。短時間内に展開値を大きく変更すると、フラッシュが発生する場合があります。シームレスなループを作成するには、「サイクル展開」オプションを使用し、展開キーフレームを 0 度のフル循環で設定します。部分的な循環では、ループが中断される場合があります。
展開のオプション
設定した時間でループする展開のサイクルを作成します。