「コンストラクター関数はインスタンス メソッドである必要があります」というエラー 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>