山椒は小粒でもピリリと辛い

2012/11/15

LWFのSetEventHandler,SetMovieEventHandler

http://muzigram.muzigen.net/2012/11/hello-lwf.html?q=lwfの続きです。 LWFが動いたら次に試したくなったのが
  • 動き終わったらコールバック
  • enterFrameをUnityで(使うかな?)
みたいな挙動。
とりあえずこちらもHello World的に「とりあえず動いた!」ところまでやってみました。

■ やってみた

using UnityEngine;
 
[ExecuteInEditMode]
public class LWFSampleObject : LWFObject {
	public int count=0;
	void Start()
	{
		string dir = System.IO.Path.GetDirectoryName(lwfName);
		if (dir.Length > 0)
			dir += "/";
 
		if (Application.isEditor)
			UseDrawMeshRenderer();
 
                //sample swf
		SetEventHandler("NoticePressEvent",(movie,button)=>{print("test");});
 
                //get fscommand("event",done);
		SetEventHandler("done",(movie,button)=>{print("test");});
 
                //add eny event handler
		SetMovieEventHandler("_root",
			(movie)=>{print("load");},
			(movie)=>{print("postload");},
			(movie)=>{print("unload");},
			(movie)=>{count++;print("onEnterFrame"+count);},
			(movie)=>{print("update");},
			(movie)=>{print("render");});
 
		Load(lwfName, dir);
	}
	
}

■ 方法1:fscommandを仕込む

19行目でやってる方法です。

こちらは前の記事でも紹介した方法ですが、
特定フレームでfscommandを仕込んでおけばそのイベントが取得できるってやつです。

■ 方法2:MovieEventHandlerを登録する。

22行目の方法です。

LWFObject.SetMovieEventHandlerの第一引数で要求される「instanceName」
がわからずちょっと難儀したのですが、調べてみると
lwf_core.csの辺りでswfのmovieClip等のID
をひとまとめにして(以下略)的な感じのようでとりあえず。

こまけぇこたあいいんだよ(AA略

と"_root"を指定。

とりあえずこれで各種イベントが取得できる体です。
発展すると、中のムービークリップのOnEnterFrame取る。とかできるんかな。

■ 方法3:SetButtonEventHandlerを登録する。

あとでやる。(swf吐き出してもらわな…)

■ 補足

LWFObject.SetMovieEventHandler
の引数がズレているような感じがしたので人生初のPull Request
してみました(`・ω・´)

https://github.com/gree/lwf/pull/8/files

◯◯◯ーの◯◯が入ってる会社の社員だけど、◯◯ーのプロジェクトにプルリク出してやったぜ~。ワイルドだろー。
ってやりたかっただけです。ごめんなさい!