4

私は現在、かなり大きく、UI が重い Flash ゲームに取り組んでいます。私たちのチームは、これに約 9 か月間取り組んできました。私たちの誰も Flash の経験がなかったので、この間にワークフローを継続的に改善してきました。しかし、特にコーダーとアーティストの間のインターフェースに関しては、私たちが現在行っていることはまだ最適ではないと感じているため、他のチームがどのように機能しているのか気になります。

理想的なワークフローは、次の要件を満たす必要があります。

1. 再利用される UI 要素は 1 回だけ定義される

つまり、フォントやボタンのスタイルを変更したい場合、すべてのメニューを調べて手動で変更したくないということです。それらを 1 つの中心的な場所で定義し、そこからのみ参照できるようにしたいと考えています。アセットが編集時だけでなく実行時にも共有される場合、つまり一度だけダウンロードされる場合のボーナス ポイント。

2.すべてオンデマンドでロード

現在、2 つの異なる読み込み手順があります。まず、メニュー ライブラリを読み込みます。これが完了すると、プレーヤーはすでにすべてのメニューを操作できます。次に、実際のゲームプレイ データの読み込みを開始します。ただし、最初のロード時間は依然として長すぎて、多くの潜在的なプレーヤーを失う原因となっています. 私たちが実際にやりたいことは、メイン メニューに必要な最小限のものだけをロードし、プレイヤーが実際にそれぞれのメニューを開こうとしたときにのみ他のすべてをロードすることです。Zuma Blitzはこれを非常にうまく行っています。

3. アーティストは、コーダーの助けなしに小さな変更を行うことができます

実際の機能を変更せずにメニューを再設計する必要がある場合、アーティストは Flash CS6 で独自にそれを行うことができるはずです。これには、アートとコードの間の明確なインターフェースが必要であり、アーティストが変更をコーダーに送信する前にテストおよびデバッグできる必要があります。

-

現在のワークフローは次のようになります。アーティストは Flash CS6 でムービークリップとして画面を作成し、SWF としてエクスポートします。コード側では、スクリーン SWF から MovieClip をロードし、PureMVC ベースのシステムで View クラスとして使用します。メディエーターは、ビュー内のテキスト フィールドなどの要素にインスタンス名でアクセスします。

これは、インターフェース (つまりインスタンス名) を定義する中心的な場所がないため、エラーが発生しやすくなります。コーダーとアーティストの間で多くの通信オーバーヘッドが必要です。また、コードとムービークリップの内部構造の間に依存関係が作成されます。アーティストは、エフェクトを適用したいときに、テキスト フィールドを別のサブムービークリップに添付することはできません。

アーティストがムービークリップに数行のコードを追加する必要があるイベントベースのインターフェイスを実験しています。これにより、エラーが発生しにくくなり、以前よりも相互依存性が低くなりますが、テストとデバッグ用の追加ツールを作成しない限り、(3) を完全に満たすことはできません。これはよくある問題で、これ以上簡単な方法はないと思います。

(2) については、自家製のソリューションの構築も開始しましたが、これも非常に一般的なタスクであり、使用できるものが既に存在する必要があります。

では、経験豊富な Flash 開発者は、このような大規模なプロジェクトをどのように管理しているのでしょうか?

4

1 に答える 1

5

いくつかの考えがありますが、それは私独自のコーディング スタイルに基づいています。

1. 再利用される UI 要素は 1 回だけ定義される再利用するもの
によっては、ライブラリ シンボルを定義してそれを使用するだけの簡単な場合があります。フォントは、検索と置換を使用して掘り下げることなく置き換えることができます。また、フォントの埋め込みメニューでフォントを簡単に交換することもできます。

xfl 間で共有するには、Flash Pro Projectを使用できます。これには一定の時間のオーバーヘッドが伴うことに注意してください (ファイルを開くか保存するときにファイルを更新する必要があり、Flash は Projects でより多くクラッシュします。一度に同じプロジェクト)。

swcs を使用する人もいますが、swcs を使用するにはコード内でインスタンス化する必要があり、ワークフローでは機能しない可能性があります。私はそれらをオーディオのみに使用しています。その中のオブジェクトは、AS コンパイル フレームとして指定したフレームまたはその前にコンパイルする必要があります。そうしないと、サウンドを適切にインスタンス化できません。これは、swc からインスタンス化されたものすべてに当てはまると思います。

2. すべてがオンデマンドでロードされるFlash の最大の秘訣の 1 つは、タイムラインと知識に基づいたコンパイラーの使用を使用
して、これを簡単に実行できることです。仕組みは次のとおりです。

ActionScript コンパイル フレームが 1 より大きいフレームである場合、次のようにコンパイルされます。

  • フレーム 1 の前:
    • フレーム 1 で使用されるすべてのビジュアル アセットと埋め込みサウンド
    • メインのドキュメント クラスと、ドキュメント クラスから直接参照されるすべてのクラス (これは、インターフェイスにコーディングする正当な理由です)
  • AS コンパイル フレームの前 (N):
    • AS クラス (必ずしもビジュアル/オーディオ アセットではなく、コード)
    • フレーム N で AS 用にエクスポートするように設定されたライブラリ シンボルのビジュアルおよびオーディオ アセット (swf で使用されていない場合でも)
  • タイムラインでアセットが最初に使用されるフレームの前:
    • フレーム N の AS のエクスポートがチェックされていないすべてのライブラリ シンボルのビジュアル/オーディオ アセット。

フレーム 1 にスピナー ロード グラフィックを配置し、フレーム 10 をエクスポート フレームとして選択した場合、フレーム 10 に到達するまでムービーを再生すると、次のようにロードされます。

  • スピナーに重いアセットがある場合、またはメインのドキュメント クラスで直接参照されている場合、これらのダウンロード中に空白の画面が表示されます。
  • スピナーが表示され、回転します
  • フレーム 10 でエクスポートに設定されたライブラリ シンボルと実際にフレーム 10にあるアセットと共に、AS クラスが読み込まれると、それらのアセットが表示され、それらを使用するために必要なすべての準備が整います。
  • SWF の残りの部分はバックグラウンドでロードされ続け、更新されframesLoadedます。

実際には、フレーム 10 にあるオブジェクトのセッターと ENTER_FRAME ハンドラーを組み合わせて使用​​して、まだフレーム 10 にいるかどうかを確認しています。私がしなければならない特定のことは、あることに基づいてより簡単になり、他の方法で行う方がうまくいくことがあります.

3. アーティストは、コーダー
の助けを借りずに小さな変更を実行できます コードがすべてライブラリ シンボルの基本クラスにある場合、必要なインスタンス名を削除または変更しない限り、アーティストはそれを理解する必要はありません。インスタンス名への依存を最小限に抑えるために、監視ADDED_TO_STAGE(キャプチャ フェーズ) を行い、表示オブジェクトをタイプ別に監視します。REMOVED_FROM_STAGE適切なタイプのオブジェクトへの参照を取得したら、そのオブジェクトを逆参照するのを監視するのは簡単です。これは、RobotLegs や Swiz などのフレームワークの仕組みに似ています。

さらに、私は「セマンティック フラッシュ」と呼んでいる概念を使用しており、ラベルに基づいて多くのことを行っています。組み込みの nextLabel() および previousLabel() 機能と、FRAME_LABEL_CONSTRUCTEDイベントのディスパッチを備えた基本クラス FrameLabelCip があります。絵コンテのイベント名から Flash のラベル名に変更して、グラフィックを構築するのはとても簡単です。

コードに頼るのではなく、複数のラベル (箇条書きリストなど) でグラフィックを同期させるために、グラフィック シンボルを多用しています。このアニメーターのトリックにより、これらは堅牢であり、技術に詳しくないチームメイトにも親しみやすいものになっています。

于 2013-04-11T00:24:01.990 に答える