書き物

技術とか作った物の話とか愚痴文句感想など

任意の引数を持つ初期処理メソッドを共通的に実行したい

やりたかったことを思いついたのでメモします。wonderflで実験したら成功しました。

引数の異なる初期処理メソッドを共通的に呼び出すコード - wonderfl build flash online

僕がしたかったことは、ゲームのシーンを表すSceneクラスをSceneManagerクラスへ予め登録しておくことで、シーンを初期処理→画面遷移効果→ローディング→シーン処理実行→画面遷移効果→終了処理という一定の処理を行わせるということです。こういうことをさせる場合、Sceneクラスには例えば初期処理の場合、 public function initialize(context:Object):void { } といった空メソッドを定義し、タイトルシーンの実装ということでSceneクラスを継承したTitleSceneを定義、initializeメソッドを以下のようにオーバーライドします。 override public function initialize(context:Object):void { // 初期処理 } contextとは、シーン毎に必要なデータや処理を選択的に取得、実行させることが出来るようにするための自分ルールで、シーン単位で作成する「I~Context」というインターフェイス型で渡ってきます。これがObject型だといちいちインターフェイス型にキャストしないといけません。これが煩わしく感じていて、回避策を探してました。

解決法を日本語で言うと、「"initialize"という名前のメソッドを引数を1つ与えて実行する。"initialize"メソッドが定義されていなければ何もしない。」ということです。詳しくはwonderflのコードを覗いてみてください。

このパターン、多用してしまいそうだなぁ。

2010/11/09追加

成功していませんでした。→【修正】任意の引数を持つ初期処理メソッドを共通的に実行したい