FC2ブログ
戯言徒然日記開発日記東方DTMC/C++DoJaLuaCG備忘録
気が向いたら創作活動とかしてる人のチラシの裏。
--.--.-- --
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2009.02.20 Fri

 最近思うこと。それは暇なふりをしたらどうなるんだろう?


 冒頭、どうでもいいです(笑)ごきげんよう、にふです。

 

 いろいろ考えた結果、少々Seleneに手を加えることにしました。現時点ではウィンドウフォーカスが離れてもストップしないようにしたくらいで、他に改変は加えずに使ってました。今回行き詰まってる内容は、ラッパで実装するには若干コード量が多くなるのでミドル(?個人的にはSeleneもミドルウェアかなと思ってます)で対応することにしました。

(ちなみにラッパで実装というのはPrimitive2Dとかを使ってSprite2Dを自前実装するという意味で使ってます。これだとSprite2Dにそっくりなのができあがりそうなので個人的にはあまり嬉しくないことです。)

 

 とりあえず、詳細に検討してませんが、やっつけで見た感じ、CSprite2DにSetTexture関数と既存のRender関数とはやや仕様の違うRender関数を追加し、CRenderにITexture*を必要としないCreateSprite2D関数を追加しようと思ってます。

 

 SetTexture関数はすでにコードは以下のようにするつもりです。protectedなITexture* m_pTexture[2]を変更するpublicなメソッドなのでほぼ定型的ですね。

public: CSprite2D::SetTexture( ITexture* texture )

{

SAFE_RELEASE( m_pTexture[0] );

m_pTexture[0] = texture;

}

 m_pTexture[0]決め打ちなのは[0]がTextureColorになるから。[1]はSetDecoration関数で指定したTextureでTextureLightになります。言葉が正しいかはわかりませんが(笑)どちらにせよ、m_Texture[1]を変更する関数はすでにあるということです。

 これでTexture可変のSpriteとなりました。が、CRender::CreateSprite2Dというファクトリー関数の引数でITextureを指定しないといけないのは可変なのにNULLを許さない感じで微妙です。

 と時間も時間なので今日はここらで。最後にこれはまだ確証はないですが、Seleneへ新規関数を追加した場合に忘れずにしておくことを書いておきます。(忘れっぽい自分のために)

 

(以下たぶん)

 SeleneはInterfaceからSelene.hを生成してます。(ビルド後イベントが走ってますよね?)新規に関数を追加した場合は継承元のInterfaceにも純粋仮想関数の形で追加しておく必要があります。(そうしないとInterface経由で呼び出せない+ビルド後イベントでSelene.hへ追加されないので毎回入力が必要となる;)既存の関数動作を変更する分には関係ないですが、新規追加の場合には利便性も考えてやっておくべきです。Doxgen形式のコメントまで書くのは面倒なのでしませんが(笑)

 

 ということで、今日はちょっと準備しただけと。土日でもうちょっと洗い出しというか設計というかしてコーディングしたいと思いますー。



[追記]
(1) Interfaceへの追記でSelene.hにも追加されることを確認しました。
(2) CSprite2Dへの変更の場合はNullデバイスであるNullSprite2Dにも純粋仮想関数の実態を実装しなきゃいけないことに気づきました。相変わらず影響調査をおろそかにしすぎ;
(3) よく考えたらCRender::CreateSprite2D関数のITexture* pTextureはNULL値OKです。なので新規に関数を追加する必要なし。ちなみにNULLの場合は内部でデフォルトのテクスチャ(という表現でいいのかな?)が設定されます。デフォルトが何なのかは割と根が深かったので追わず。(邪推するにNULLデバイスかな?m_pTextureDefault[TEXTURE_STAGE_COLOR]を追えばたぶん突き当たる。)
管理者にだけ表示を許可する

Template by まるぼろらいと
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。