2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

カスタムイベントの実装

Posted at

Coronaでのカスタムイベントの実装方法です。
ついでに、カスタムイベントを通じて異なるモジュール間での値の受け渡しも実装してみます。

カスタムイベントの定義

まずはそのイベントの定義から。

event/testevent.lua
module( "TestEvent" , package.seeall )

MOVE_START  = "TestEvent.MOVE_START";
MOVE_FINISH = "TestEvent.MOVE_FINISH";

function new( _name , _data )
	local evt = {};
	evt.name = _name;
	evt.data = _data;
	return evt;
end;

1行目module()の第一引数で文字列指定しておくと、一度requireしておけば
他モジュールからも永続的に使用出来るようになります。(逆に消し方がよく解りませんが)

イベントの値"TestEvent.MOVE_START"はどんな文字列でも大丈夫ですが、他のカスタムイベントと重複しないよう注意が必要です。

使用サンプル

main.lua
require( "event.testevent" );

local img_mover = require( "imgmover" );

local function eventTrace( event )
	print( event.name );
	print( event.data.x );
	print( event.data.y );
end;

Runtime:addEventListener( TestEvent.MOVE_START  , eventTrace );
Runtime:addEventListener( TestEvent.MOVE_FINISH , eventTrace );
img_mover.moveStart();
imgmover.lua
module(..., package.seeall)

local img = display.newImage( "image.png" );
img.x , img.y = 100 , 100;

local function moveFinish()
	local evt = TestEvent.new( TestEvent.MOVE_FINISH , { x=img.x , y=img.y } ); 
	Runtime:dispatchEvent( evt );
end;

function moveStart()
	local evt = TestEvent.new( TestEvent.MOVE_START , { x=img.x , y=img.y } ); 
	Runtime:dispatchEvent( evt );
	transition.to( img, { time=500, x=200 , y=200 , onComplete=moveFinish } );
end;

結果1(起動時)

TestEvent.MOVE_START
100
100

結果2(0.5秒後)

TestEvent.MOVE_FINISH
200
200

画像をx=100,y=100から0.5秒掛けて200,200に移動させるサンプルです。
動き出した瞬間と移動終了時にそれぞれイベントを発射し、main.lua側に伝達します。

こんな感じで、異なるモジュール間でイベントと値の送受信を簡単に行なうことが出来ますが
規模が大きくなるとカオスになってくるので必要に応じてで。
あと不要になったイベントリスナーはRuntime:removeEventListenerで消すのを忘れずに。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?