0

私はActionScript3プロジェクトを構築していますが、MXMLでいくつかのコンポーネントを作成すると作業が簡素化されることがわかりました。

そのためには、FlexApplicationクラスを拡張する必要があるようです。それが正しい場合、どうすればよいですか?

現在、私のメインオブジェクトはSpriteを拡張しています。次に、他のスプライトがで追加されaddChild()ます。そのうちの1つにFlexコンポーネントが必要です。確かに、アプリケーションをMXMLで完全に書き直さない方法はありますか?

4

1 に答える 1

2

編集コメントに投稿されているように、ここでの私の説明は主にSparkアプリケーションへの移行に関するものです。同じ種類のアイデアが、addChildに固執できるMXを除いて、MXアプリケーションにも当てはまります。一般的に、コンテナを使用するにはIUIComponentを実装する必要があります。ドキュメント:

注:メソッドの子引数はDisplayObject型として指定されていますが、引数はコンテナーの子として追加されるIUIComponentインターフェースを実装する必要があります。すべてのFlexコンポーネントは、このインターフェイスを実装しています。

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/core/Container.html#addChild() 編集の終了

基本クラスをSpriteではなくApplicationに切り替えることができますが、Flex 4アプリケーションに要素を追加するときは、それらがIVisualElementを実装していることを前提としています。一般的に言えば、addChild呼び出しをaddElementに切り替え、現在Sprite / MovieClip / DisplayObjectを拡張している他のクラスを変更して、Groupなどを拡張し、Flexアプリケーションがそれらと連携するために必要なインターフェイスを実装する必要があります(通常はLayoutManager、PopUpManager、コンポーネントライフサイクルなどがあるため、低レベルのFlashオブジェクトが提供するよりも多くのものを期待します。ここでの問題は、コンポーネントにいくらかの重みを加えることです。これがWebまたはデスクトップ向けである場合、私はあまり心配しませんが、これはモバイルデバイスのパフォーマンスに著しく影響します。

残念ながら、これはターンキータイプのソリューションではありません。機能に基づいて各オブジェクトを何に変更するかを呼び出す必要があるため、コードを手動で変更する必要があります。グループが正しい方法である場合もあります。他のコンテナまたはコントロールからより多くの利益が得られます。場合によっては、現在の低レベルの拡張機能(Spriteの拡張など)を使い続けて、IVisualElementを自分で実装したい場合があります。

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/core/Container.html#addElement()

アプリケーションにMXMLファイルを使用するように大規模に切り替えたい場合は、基本的なMXMLアプリケーションファイルを作成し、既存のコードを含むスクリプトブロックを含めることもできます(コンストラクターコードが作成完了に移行するように変更されています)。または、アプリケーションを拡張するベース.asファイルを作成し、それをMXMLの基本クラスとして使用することもできます。いくつかの例をまとめます。

例1非常に基本的なMXMLアプリケーションファイル

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx"
               minWidth="955" minHeight="600">
    <fx:Script>
        <![CDATA[

        ]]>
    </fx:Script>
</s:Application>

例2アプリケーションを拡張するAS3クラスとそれを拡張するMXMLクラス

[Main.mxml]

<?xml version="1.0" encoding="utf-8"?>
<MyBaseApp
           xmlns="*"
           xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    <s:Button id="btnControl"/>
</MyBaseApp>

[MyBaseApp.as]

package
{
    import mx.events.FlexEvent;

    import spark.components.Application;
    import spark.components.Button;

    public class MyBaseApp extends Application
    {
        public var btnControl:Button;
        public function MyBaseApp()
        {
            super();
            addEventListener(FlexEvent.CREATION_COMPLETE, creationCompleteHandler);
        }
        private function creationCompleteHandler(event:FlexEvent):void
        {
            btnControl.label = "something I set in AS3";
        }
    }
}
于 2012-07-28T20:05:52.170 に答える