|
こんにちは、L.Entis です。
▼プロクさん:
> ESpriteServerクラスの機能に。
> マニュアルより抜粋
> >ESpriteServerクラスはEImageSpriteクラスから派生したクラスで、複数のスプ
> >ライトを子スプライトに持ち、また自分自身も他のESpriteServerオブジェクトの
> >子スプライトなりえます。
> について、うまくイメージがつかめず、ためしに幾つかプログラムしていますが、
> 思ったように動きません。
これだけではまったくどのような状態なのかわからないのですが、私の予想の元に説明させていていただきます。
その前にまず確認ですが、階層化されていないスプライトの表示は出来ていますでしょうか? これが出来ていない場合には、EntisGLS のサンプル SpriteTest などを参照してください。
それと、表示したい SpriteServer に対して CreateImage 関数などで画像バッファを作成していますでしょうか? また、AddSprite で追加した子スプライトに対して SetVisible(true) で可視化していますでしょうか?
とりあえず、先にありがちなミスを先にあげさせていただきました。
上の問題がない場合、私が想像している状態は、ルートになる ESpriteServer オブジェクトを直接画面表示には使わずに、間接的に利用しようとしているのではないかと思うのですが、とりあえずそのような場合の使い方について説明しておきます。(ドキュメントとかぶりますが)
ESpriteServer クラスでは、Refresh 関数が呼び出されることによって、更新領域に設定されている領域が、ESpriteServer クラスが保持している画像バッファに再描画されます。
ESpriteServer::Draw 関数は Refresh 関数を呼び出した後、EImageSprite::Draw 関数を呼び出しているので、子スプライト以下に存在している ESpriteServer オブジェクトについては Refresh 関数を明示的に呼び出す必要はありません。
更新領域を追加するのは、UpdateRect 関数ですが、通常は任意のスプライトに対する操作を行うと親スプライトの UpdateRect 関数が呼び出されるのでこれも通常は明示的に呼び出す必要はありません。
SpriteTest サンプルの SpriteTest.cpp の以下の関数を参照してください。
ここを見れば ESpriteServer クラスの仕組みがご理解いただけるのではないかと思います。
SpriteTest.cpp
346行: void ESpriteWindow::OnPaint( void )
508行: bool ESpriteWindow::UpdateRect( EGL_RECT * pUpdateRect )
|
|