Cocos2d-x

Cocos2d-x カスタムイベントを削除するタイミング

投稿日:

cocos2dx

こんにちは、akiです。

この記事ではカスタムイベントを削除するタイミングについて説明します。

 

掲題の通り、カスタムイベントを登録した場合、不要になった際に明示的に削除してやる必要があります。以下のようなケースで説明しますと・・・

 

replaceScene

 

画面を表示した際に、初期化処理でカスタムイベントを登録するようなシーンを2つ作ったとします。シーンA→シーンB→シーンAと画面遷移した場合、カスタムイベントAは2回登録されることになります。

Cocos2d-xでは同じカスタムイベント名でカスタムイベントを登録してしまった場合、そのカスタムイベントを発行するとプログラムが強制終了してしまいます。ですので、カスタムイベントは必ず削除してやる必要があるのです。

 

 

カスタムイベントの削除

Director::getInstance()->getEventDispatcher()->removeCustomEventListeners("custom_event_name");

“custom_event_name”は自分で定義したカスタムイベント名です。

 

カスタムイベントの削除のタイミング

ダメな例

いちいち画面遷移のタイミングでカスタムイベントを削除するのは面倒なので、シーンに共通するスーパークラス的な物を用意して、画面遷移時にスーパークラスのデストラクタで削除しようと試みましたが、結果はダメでした。

私の環境では、遷移元シーンのデストラクタは、遷移先シーンのコンストラクタ及び初期化処理が呼ばれた後に呼ばれていました。これでは自己画面遷移(シーンAからシーンAへの画面遷移)には対応できないので、この方法はあえなく没になりました。

 

結論

カスタムイベントの削除のタイミングは必ず「画面遷移前に削除する」です。結局私の場合では、カスタムイベント削除付きの画面遷移メソッドをスーパークラスに追加することにしました。

 

また、この記事を書くに辺り、以下の記事を参考にさせていただきました。

 

#タッチイベント登録```lang:TestNode.cppauto listener = EventListenerTouchOneByOne::create();listener->setSwallowTouches(t...

 

 

以上です。

PrainGoogleAdSense

PrainGoogleAdSense

-Cocos2d-x
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

スプライトシート作成

Cocos2d-x スプライトシートを作成して画像を楽に管理したい

Cocos2d-x スプライトシートを作成して画像を楽に管理したい この記事では、スプライトシートの作成方法と、スプライトシートを利用することのメリットについて紹介します。     …

楽ちん

Cocos2d-x アニメーションの画像追加を楽に行う方法

  この記事では、楽してアニメーション機能を利用する方法について紹介します。   【前回まで】 ・第1回 : アニメーションを利用した回復エフェクトの表示方法 ・第2回 : 加算合成を利用し …

cocos2dx

ゲーム制作 Cocos2d-x関連 第1回 「ゲームを作ろう!!」

ゲーム制作をやってみたい!   誰もが一度はちらっと考えることなのではないでしょうか。しかし一度はそう思うものの、でもやっぱり難しそうだし・・・と思いとどまる方も少なくないはず。 &nbsp …

cocos2dx

Cocos2d-x クライアント側のHttpレスポンス処理

この記事は「Cocos2d-x セーブデータをサーバに送信して保存する」の続きになります。 ・第1回 : サーバにデータを保存したい理由と全体の流れ ・第2回 : クライアント側の処理とデータ送信(H …

遊びを繋げ新たな地平へ プレイン Prain

ゲーム制作 Cocos2d-x関連 第9回 「移動しているボールの減速」

この辺りで大体折り返し地点です。   さて、弾いたボールはだんだんと減速していくようにしましょう。色々なやり方があるかと思いますが、今回はシンプルにupdateの中でカウンタを回して、一定回 …