ダウンキャストはやっていいの?
Posted: 2012年10月01日(月) 18:42
データフローの中でどうしてもダウンキャストをしてしまう箇所があるのですが、どうしたらいいでしょうか?
Objectクラス
↓
継承
↓
Entityクラス→当たり判定を委託→ContactAreaクラス
↓
継承
↓
Characterクラス
というクラス関係で、「ContactAreaクラス」のポインタを「ContactAreaListクラス」に登録し、
当たり判定リストクラス::Run()という関数が呼び出されると一括ですべてを判定して、当たっていたらフィードバックをEntityクラスに返すというものです。
(ContactAreaListに登録されたContactAreaクラス同士で判定を行い、持ち主(Entity)に結果を伝える)
このような相関図で攻撃判定を行うのですが、ContactAreaクラスは他のContactAreaクラスと衝突した時、
無条件に持ち主(Entity)に「この相手(ContactAreaクラス)と衝突した」と結果を持ってきます。
この時、そのEntity以外がすべて敵なら持ってきたすべてのContactAreaクラスに対しダメージ処理をすれば楽チンなのですが、
Characterクラスが保持している勢力情報(int型ですが)によって分別してダメージ処理したいので必然的にEntity→Characterクラスへダウンキャストして勢力情報を取得する必要があります。
こういった場合ダウンキャストは適切なのでしょうか?
文章だけでわかりにくいかもしれませんがよろしくお願いします。
Objectクラス
↓
継承
↓
Entityクラス→当たり判定を委託→ContactAreaクラス
↓
継承
↓
Characterクラス
というクラス関係で、「ContactAreaクラス」のポインタを「ContactAreaListクラス」に登録し、
当たり判定リストクラス::Run()という関数が呼び出されると一括ですべてを判定して、当たっていたらフィードバックをEntityクラスに返すというものです。
(ContactAreaListに登録されたContactAreaクラス同士で判定を行い、持ち主(Entity)に結果を伝える)
このような相関図で攻撃判定を行うのですが、ContactAreaクラスは他のContactAreaクラスと衝突した時、
無条件に持ち主(Entity)に「この相手(ContactAreaクラス)と衝突した」と結果を持ってきます。
この時、そのEntity以外がすべて敵なら持ってきたすべてのContactAreaクラスに対しダメージ処理をすれば楽チンなのですが、
Characterクラスが保持している勢力情報(int型ですが)によって分別してダメージ処理したいので必然的にEntity→Characterクラスへダウンキャストして勢力情報を取得する必要があります。
こういった場合ダウンキャストは適切なのでしょうか?
文章だけでわかりにくいかもしれませんがよろしくお願いします。