muzigram

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

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

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

2012/11/14

Hello LWF

LWFが捗る。ということでやってみた。

■LWFとは?

https://github.com/gree/lwf をご参考。
flash資産をUnityとかHTML5に変換、出力するためのグレートな仕組みだそうです。
どんなものか知りたい方はデモプロジェクトを動かしてみるのが 手っ取り早いと思います。

■参考にしました!

http://gree.github.com/lwf-demo/
http://terasur.blog.fc2.com/blog-entry-305.html

Sample Code

http://muzigram.muzigen.net/2012/11/hello-lwf.html

■フォーマットのルール

http://gree.github.com/lwf-demo/pdf/FLASHforLWFproductionguideline.pdf
を参考にしましょう。
  • Flash player 7
  • ActionScript1.0
  • × jpeg ◯png
  • ×シェイプ
  • マスクもあかん
特にjpegについては注意。
pngを使っていてもflashがJpegや!
と認識することがあるそうです。よくある罠ですね
(デザイナー談)

デモを参考に手元のswfを変換する

デザイナーさんにjackpotっていうswf用意してもらいましたー
こんな感じのディレクトリ構成にしておいて スクリーンショット 12 11 14 13 36

lwf-demoのここにswfファイル入れてshファイル叩きましょう。
Macならターミナルからばしばしと
Winだとruby入れてpath通して…。って感じでしょうか スクリーンショット 12 11 14 13 38

…jpegの奴とかミスってるとこんな感じのエラーが!

../../lwf/tools/swf2lwf/swf2lwf.rb:1506:in `parse_define_shape': undefined method `width' for nil:NilClass (NoMethodError) from ../../lwf/tools/swf2lwf/swf2lwf.rb:2314:in `send' from ../../lwf/tools/swf2lwf/swf2lwf.rb:2314:in `parse_tags' from ../../lwf/tools/swf2lwf/swf2lwf.rb:2351:in `parse' from ../../lwf/tools/swf2lwf/swf2lwf.rb:2801:in `swf2lwf' from ../../lwf/tools/swf2lwf/swf2lwf.rb:3584

出来上がったファイル

いろいろなファイルが出力されます。
とりあえず.pngと.lwfファイルをunityに突っ込めば大丈夫。

■イベントの取り方とか

Unity側でイベントを渡したいフレーム等に
fscommand ("event", "done");
を埋め込んで置けばOK。上記はdoneっていうイベント名ってこと。です。
Unity側では
SetEventHandler("Done",(movie,button)=>{print("yatta!");});
てな感じでイベントを設定できます。 ちなみにちなみにlwf-demoのサンプルのボタンには
NoticePressEventってのが貼ってあるので
flash環境が手元にない方は
SetEventHandler("NoticePressEvent",(movie,button)=>{print("test");});
ってな感じで確認できます。

■出力

LWFSampleObjectを参考にファイルを追加すれば…
スクリーンショット 2012 11 14 13 53 37 できたー。簡単キレイ!こりゃ良さげだ。

追記!

というtweet を頂きました!ありがとうございます!。
◯◯の形式にそってない!動かない!ギギギ!
っていう環境は日常茶飯事なので大変助かります

2012/11/05

Hello Cocos2dx

 Hello Cocos2dx

http://atnd.org/events/32611
にいってきました。
やってきたことまとめ。

http://www.cocos2d-x.org/
2.0.2をインストールしてたのですが、0.0.1違うだけで命令がだいぶ変わっていたので慌てて再インストール。インストールは特に迷う部分はなかったので省略。テンプレートのshを叩けば良し。Androidの場合はndkやsdkのパスを忘れずに変更しよう!

違うバージョンのテンプレートをインストールする際の注意点。
テンプレートの更新等を行う際は  -u -f をつけると滞りなく。強制上書きっすな。

spriteの拡大
アンカーポイントの変更
描画位置
移動
トランジション
シーン変更
等等。
gistを後ほどまとめる予定;




感想
cocos2dxは色々と捗る気はしてるけども、サンプルが少なめで最初の一歩のコストがでかいのが大変!

0.0.1違うだけでがらっと変わる部分があるので、告知がでたらこまめにアップデートしようと思います。が、アップデートすれば動かなくなる箇所もありそうとのことなので、プロジェクト途中ではレビューなどの検討が必要ですねー。

cocos2dxのプロジェクトの中にはmarkdownファイルやdoxygenのconfigファイルなども含まれているので、出力して中身を確認してみるのも最初の一歩になりそうですね。
そして、blogを書くのをサボっている間に2.0.4が出てるんだぜ…