「Unity LWF内のインスタンスを取得する」の版間の差分
 (→rootに置いてあるインスタンスを取得する)  | 
			 (→rootに置いてあるインスタンスを取得する)  | 
			||
| 1行: | 1行: | ||
| − | ==  | + | ==ムービークリップを取得する==  | 
| − | Load()  | + | Load()を行った直後はまだLWFの構築が終わっていないため<br/>  | 
| − | + | rootに置かれているインスタンスを取得をすることができません。<br/>  | |
| − | ※rootの参照は可能です。<br/>  | + | ※rootの参照は可能です。(lwf.rootMovie)<br/>  | 
<br/>  | <br/>  | ||
| + | <br/>  | ||
| + | ムービークリップを取得するには<br/>  | ||
| + | <LWF.Movieインスタンス>.SearchMovieInstance(arg1,arg2);<br/>  | ||
| + | *arg1 : string "インスタンス名"  | ||
| + | *arg2 : bool "自身の子以外のインスタンスを検索対象にするか"  | ||
| + | <br/>  | ||
| + | または<br/>  | ||
| + | <br/>  | ||
| + | <LWF.Movieインスタンス>["インスタンス名"];<br/>  | ||
| + | <span style="color:blue">※<LWF.Movieインスタンス>.SearchMovieInstance("インスタンス名", false); と同義</span><br/>  | ||
| + | を使用します。<br/>  | ||
| + | <br/>  | ||
| + | <br/>  | ||
| + | 【サンプル】<br/>  | ||
rootにcharaというインスタンス名のムービークリップが置いてあると仮定します。<br/>  | rootにcharaというインスタンス名のムービークリップが置いてあると仮定します。<br/>  | ||
| − | + | 下記の例だとLogにはNullが返ってきます。<br/>  | |
| + |  (Load処理)  | ||
| + | |||
  //Nullが帰ってくる  |   //Nullが帰ってくる  | ||
  Debug.Log(lwf.rootMovie["chara"]);  |   Debug.Log(lwf.rootMovie["chara"]);  | ||
| − | + | <br/>  | |
<br/>  | <br/>  | ||
なのでLoad完了のCallbackを待った後、構築完了時に発行されるpostLoadイベントを受け取ってから参照するようにします。<br/>  | なのでLoad完了のCallbackを待った後、構築完了時に発行されるpostLoadイベントを受け取ってから参照するようにします。<br/>  | ||
| − | + |  (Load処理)  | |
| + | |||
  AddLoadCallback (delegate(LWFObject obj) {  |   AddLoadCallback (delegate(LWFObject obj) {  | ||
      lwf.rootMovie.AddEventHandler("postLoad", delegate(LWF.Movie movie) {  |       lwf.rootMovie.AddEventHandler("postLoad", delegate(LWF.Movie movie) {  | ||
2014年10月2日 (木) 14:05時点における版
ムービークリップを取得する
Load()を行った直後はまだLWFの構築が終わっていないため
rootに置かれているインスタンスを取得をすることができません。
※rootの参照は可能です。(lwf.rootMovie)
ムービークリップを取得するには
<LWF.Movieインスタンス>.SearchMovieInstance(arg1,arg2);
- arg1 : string "インスタンス名"
 - arg2 : bool "自身の子以外のインスタンスを検索対象にするか"
 
または
<LWF.Movieインスタンス>["インスタンス名"];
※<LWF.Movieインスタンス>.SearchMovieInstance("インスタンス名", false); と同義
を使用します。
【サンプル】
rootにcharaというインスタンス名のムービークリップが置いてあると仮定します。
下記の例だとLogにはNullが返ってきます。
(Load処理) //Nullが帰ってくる Debug.Log(lwf.rootMovie["chara"]);
なのでLoad完了のCallbackを待った後、構築完了時に発行されるpostLoadイベントを受け取ってから参照するようにします。
(Load処理)
AddLoadCallback (delegate(LWFObject obj) {
    lwf.rootMovie.AddEventHandler("postLoad", delegate(LWF.Movie movie) {
        Debug.Log (lwf.rootMovie["chara"]);
    });
});
こうすることでcharaインスタンスを参照して制御することができるようになります。
LoadCallbackの時点でrootMovieは参照可能となり、postLoadの時点でrootMovieに配置されているインスタンスを参照可能になります。
gotoAndPlayでジャンプするフレームに置いてあるインスタンスを取得する
GotoAndPlay()などでジャンプした先にいかないと存在しないインスタンスはGotoAndPlay()の直後に
取得しようとしてもNullが返ってきてしまいます。
rootの"attack"というラベルに存在する"sword"というインスタンス名のムービークリップをすると仮定します。
下記のコードだとインスタンスを取得することはできません。
lwf.rootMovie.GotoAndStop("attack");
Debug.Log(lwf.rootMovie["sword"]);
この場合、ジャンプしてその先の構築が行われるまで待つ必要があります。
下記がサンプルになります。
lwf.rootMovie.GotoAndStop ("attack");
lwf.rootMovie.AddEventHandler("render", delegate(LWF.Movie movie) {
    lwf.rootMovie.ClearEventHandler("render");
    Debug.Log (lwf.rootMovie["sword"]);
});
または下記のように設定してください
lwf.rootMovie.GotoAndStop("attack");
var eventId = lwf.AddMovieEventHandler("_root.char.sword", postLoad: (movie) => {
    lwf.RemoveMovieEventHandler("_root.sword", eventId);
    Debug.Log (movie);
});