0

そのため、サウンドを再生し、サウンドの再生が完了したときにタイムライン上の関数に戻ることになっている soundHandler クラスがあります。だけど、いざやってみるとなぜか片方の音しか鳴らない。編集:そのサウンドが再生された後、何かを行うはずの EventHandlers がセットアップされていても、何も起こりません。コードは次のとおりです。

import mx.events.EventDispatcher;

class soundHandler {
private var dispatchEvent:Function;
public var addEventListener:Function;
public var removeEventListener:Function;
var soundToPlay;
var soundpath:String;
var soundtype:String;
var prefix:String;
var mcname:String;

public function soundHandler(soundpath:String, prefix:String, soundtype:String, mcname:String) {
    EventDispatcher.initialize(this);
    _root.createEmptyMovieClip(mcname, 1);
    this.soundpath = soundpath;
    this.soundtype = soundtype;
    this.prefix = prefix;
    this.mcname = mcname;
}

function playSound(file, callbackfunc) {
    _root.soundToPlay = new Sound(_root.mcname);
    _global.soundCallbackfunc = callbackfunc;
    _root.soundToPlay.onLoad = function(success:Boolean) {
        if (success) {
            _root.soundToPlay.start();
        }
    };
    _root.soundToPlay.onSoundComplete = function():Void {
        trace("Sound Complete: "+this.soundtype+this.prefix+this.file+".mp3");
        trace(arguments.caller);
        dispatchEvent({type:_global.soundCallbackfunc});
        trace(this.toString());
        trace(this.callbackfunction);
    };
    _root.soundToPlay.loadSound("../sound/"+soundpath+"/"+soundtype+prefix+file+".mp3", true);
    _root.soundToPlay.stop();
}
}

.fla ファイルのコードは次のとおりです。

var playSounds:soundHandler = new soundHandler("signup", "su", "s", "mcs1");
var file = "000";
playSounds.addEventListener("sixtyseconds", this);
playSounds.addEventListener("transition", this);

function sixtyseconds() {
        trace("I am being called! Sixtyseconds");
        var phase = 1;
        var file = random(6);
        if (file == 0) {
            file = 1;
        }
        if (file<10) {
    file = "0"+file;
        }
        file = phase+file;
        playSounds.playSound(file, "transition");
}
function transition() {
trace("this works");
}
playSounds.playSound(file, "sixtyseconds");

私はこれについて完全に途方に暮れています。すでにそれを理解するために何時間も無駄にしています。どんな助けでも大歓迎です。

4

1 に答える 1

0

さて、Delegate クラスを使用した後、次のコードで動作するようになりました。

import mx.events.EventDispatcher;
import mx.utils.Delegate;

class soundHandler{

    public var addEventListener:Function;
    public var removeEventListener:Function;
    private var dispatchEvent:Function;
    private var soundToPlay;
    private var soundpath:String;
    private var soundtype:String;
    private var prefix:String;
    private var mcname:String;

    public function soundHandler(soundpath:String, prefix:String, soundtype:String,    mcname:String) {
        EventDispatcher.initialize(this);
        _root.createEmptyMovieClip(mcname, 1);
        this.soundpath = soundpath;
        this.soundtype = soundtype;
        this.prefix = prefix;
        this.mcname = mcname;
    }

    private function playSoundCallback(file, callbackfunc) {
        var soundname = "s"+file;
        _root[soundname] = new Sound(_parent.mcname);
        _root[soundname].onLoad = function(success:Boolean) {
            if (success) {
                _root[soundname].start();
            }
        };
        trace("Play Sound: "+file+".mp3; Function To Call: "+callbackfunc);
        _root[soundname].onSoundComplete = Delegate.create(this,function():Void {
            trace("Sound Complete: "+this.soundtype+this.prefix+this.file+".mp3");
            dispatchEvent({type:callbackfunc});
        });
        _root[soundname].loadSound("../sound/"+soundpath+"/"+soundtype+prefix+file+".mp3", true);
        _root[soundname].stop();
    }

    private function playRandomSoundCallback(phase, scope, callbackfunc) {
        var file = random(scope);
        if (file == 0) {
            file = 1;
        }
        if (file<10) {
            file = "0"+file;
        }
        file = phase+file;
        playSoundCallback(file, callbackfunc);
    }

    private function playSound(file) {
        var soundname = "s"+file;
        _root[soundname] = new Sound(_root.mcname);
        _root[soundname].onLoad = function(success:Boolean) {
            if (success) {
                _root[soundname].start();
            }
        };
        trace("Play Sound: "+file+".mp3");
        _root[soundname].loadSound("../sound/"+soundpath+"/"+soundtype+prefix+file+".mp3", true);
        _root[soundname].stop();
    }

    private function playSoundRandom(phase, scope) {
        var file = random(scope);
        if (file == 0) {
            file = 1;
        }
        if (file<10) {
            file = "0"+file;
        }
        file = phase+file;
        playSound(file);
    }

    private function playSoundAS(identifier) {
        var soundname = identifier;
        _root[soundname] = new Sound(_root.mcname);;
        trace("Play Sound AS: "+identifier+".mp3");
        _root[soundname].attachSound("identifier");
        _root[soundname].start();
    }
}
于 2012-07-03T03:12:44.587 に答える