0

「コンストラクター関数はインスタンス メソッドである必要があります」というエラー 1026 が表示されますが、その理由はわかりません。メディア プレーヤー タイプのプログラムを作成していますが、音楽部分に問題があります。この前に機能音楽プレーヤーを作成し、コードを新しいプロジェクトにコピーしました。現在の唯一の違いは、コードが状態にあり、main.mxml ファイルではないことです。これは以下のコードで、「public var music:Sound;」というエラーが表示されます。このエラーが発生する理由がわかりません。助けていただければ幸いです。

<fx:Declarations>
    <fx:XML id="musicXML" source="data/musak.xml" />
    <s:XMLListCollection id="musicCollection" source="{musicXML.song}" />

</fx:Declarations>
<s:HGroup>
    <s:DataGrid id="musicGrid" dataProvider="{musicCollection}" click="onClick()" />
    <local:MusicPosition id="mProgress" width="319" height="83"/>

    <s:VGroup height="55">
        <s:Label text="Now playing: {musicGrid.selectedItem.@name}" />
        <s:Label id="txtPosition" width="91"/>
    </s:VGroup>

</s:HGroup>
<s:Button x="146" y="93" label="play" click="playMusic()"/>
<s:Button x="270" y="93" label="pause" click="pauseMusic()"/>
<fx:Script>

    <![CDATA[

        //set your variables
        public var music:Sound;
        [Bindable]public var musicChannel:SoundChannel;
        public var pausedTime:Number = 0;

        public function onClick():void {
            if(musicChannel) {
                musicChannel.stop();

                //clean up the variables
                music = null;
                musicChannel = null;

            }
            music = new Sound();
            music.load(new URLRequest(musicGrid.selectedItem.file.toString()));
            music.addEventListener(Event.COMPLETE, onMusicLoad);

        }

        public function onMusicLoad(e:Event):void {

            mProgress.update(0);
            //new channel
            musicChannel = music.play();


        }

        protected function onE(e:Event):void {
            if(musicChannel) {
                txtPosition.text = millisecondsToSeconds(musicChannel.position).toString() + "/" +
                    millisecondsToSeconds(music.length).toString();
                mProgress.update(musicChannel.position/music.length);

                mProgress.alpha = 1;
            } else 
                mProgress.alpha = 0;

        }

        protected function millisecondsToSeconds(milliseconds:Number):Number {
            return Math.round(milliseconds/1000);
        }

        public function pauseMusic():void {
            if(musicChannel) {
                pausedTime = musicChannel.position;
                musicChannel.stop();
            }
        }

        public function playMusic():void {
            if(musicChannel) {
                musicChannel = music.play(pausedTime);
            }
        }
    ]]>
</fx:Script>
4

1 に答える 1

2

物に名前を付けるときは十分に注意してください。クラス自体と同じ名前の変数またはメソッドをクラス内に作成することはできません。

必須ではありませんが、一般的な命名規則は次のとおりです。

  • クラスにはキャメルケースを使用します。この場合、クラスは Music.mxml または music.as という名前になります。あなたのコードに基づいて、 MusicPosition クラスですでにこの規則に従っているようです。
  • メソッドにはキャメルケースを使用しますが、最初の文字を小文字にします。この場合、変数には music という名前を付けることができます。または、musicPosition という名前の変数を作成することもできます。Flex では、MXML タグの id 属性は変数名に相当することに注意してください。
  • 定数には、すべて大文字を使用します。定数は、一般的にイベント タイプとして使用されます。

繰り返しますが、これらは [Flex/ActionSCript 以外のプログラミング言語での] 一般的な規則ですが、Flex SDK によって必須または強制されるものではありません。

于 2013-04-23T04:23:46.623 に答える