題名のまんまをprogression forumに質問したらすぐに回答を頂けたのでその補足メモ。
まずLoad系のコマンドで読み込んだデータを扱う際の定石は
//※要点を抜粋したコード
var _sound:Sound;
addCommand(
new LoadSound(new URLRequest("./sound.mp3"))
,function(){
_sound = this.latestData;
trace(_sound)//出力:[Object Sound]
}
)
と思ってましたが、progression4からは、getResourceByIdというものを使った方が便利とのこと。
↑のコードを書き換えると
//※要点を抜粋したコード
var _sound:Sound;
addCommand(
new LoadSound(new URLRequest("./sound.mp3"))
,function(){
_sound = getResourceById( "./sound.mp3" ).data;
trace(_sound)//出力:[Object Sound]
}
)
getResourceById()の便利なところは、一度読み込めば、読み込んだデータがどこからでも参照できるというところみたい。
getResourceById( “./sound.mp3” )と書くことでstaticは変数みたいな扱いができるということかな。
↓ざっくり書くとこんな感じ。
//※要点を抜粋したコード
var _sound:Sound;
addCommand(
new LoadSound(new URLRequest("./sound.mp3"))
,function(){
_sound = getResourceById( "./sound.mp3" ).data;
trace(_sound)//出力:[Object Sound];
new Test();
}
)
//
class Test {
function Test(){
trace(getResourceById( "./sound.mp3" ).data)//出力:[object Sound]
}
}
あとgetResourceByGroupというものもあって同様な扱いができるそうです。
上記の検証で参考になった記事
参考:_level0.KAYAC:Progression4の新機能Resourceを試してみる
でタイトルの本題については、forumに書いたけど↓ではSerialList内のtraceはnullになり
addCommand(
new LoadSound(new URLRequest("./sound.mp3"))
,function(){
_sound = getResourceById( "./sound.mp3" ).data;
trace(_sound)//出力:[Object Sound];
new Test();
}
,new SerialList(null
,new Trace(_sound)//出力:null
)
)
SerialListをfinctionでくくると参照がとれました。
addCommand(
new LoadSound(new URLRequest("./sound.mp3"))
,function(){
_sound = getResourceById( "./sound.mp3" ).data;
trace(_sound)//出力:[Object Sound];
new Test();
}
,function(){
new SerialList(null
,new Trace(_sound)//出力:[Object:Sound]
).execute()
}
)
最後にこれらの集大成的なコード(ドキュメントクラス)
(functionで括らないSerialList内でのTraceでnullになるのは、イマイチ理解できてないけど)
package {
import flash.display.Sprite;
import flash.media.Sound;
import flash.net.URLRequest;
import jp.progression.commands.media.DoSound;
import jp.progression.commands.display.*;
import jp.progression.commands.lists.*;
import jp.progression.commands.net.*;
import jp.progression.commands.tweens.*;
import jp.progression.commands.*;
import jp.progression.data.getResourceById;
/**
* @author 393
*/
public class Test extends Sprite{
private var _sound:Sound;
private var number:int = 0;
public function Test() {
var slist:SerialList = new SerialList();
slist.addCommand(
new LoadSound(new URLRequest("./sound.mp3"))
,function(){
_sound = getResourceById( "./sound.mp3" ).data;
trace("_sound : " + _sound);
new DoSound(_sound).execute();
number = 100;
}
,new SerialList(null
,new Trace("SerialList number : " + number)//出力:0
,new Trace("SerialList sound : " +_sound)//出力:null
)
,new Func(next)
);
slist.execute();
}
private function next():void{
trace("number : " + number);//出力:100
trace("nextの_sound : " + _sound);//出力: [object Sound]
new Test2()
}
}
}
import jp.progression.data.getResourceById;
class Test2{
public function Test2() {
trace("Test2のgetResourceById( \"./sound.mp3\" ).data : " + getResourceById( "./sound.mp3" ).data);
}
}