スプライト管理クラス(その2)
(2001/01/30現在)

TOP | PROGRAM | PREV | NEXT

スプライト管理クラス再考(2001/02/10)

そんなこんなで、再考察。 まず用語の再定義をしよう。オブジェクト、オブジェクトと言っても曖昧すぎるので。

用語の定義
用語定義
スプライトゲーム中に描画されるであろう何か
スプライト・ベース・クラススプライト管理クラスとスプライト・グループ・クラスがスプライトを管理するための基底クラス
スプライト・グループ・クラススプライトの集合を保持・管理するクラス
スプライト・コントロール・クラススプライト・グループの集合を管理するクラス
スプライト・ハンドルスプライト・ベース・クラスのポインタを得るためのハンドル
スプライト・ルックアップスプライト・グループ内で現在処理中のスプライトを指す参照値
グループ・ルックアップ現在処理中のグループを指す参照値
ルックアップここではグループ・ルックアップとスプライト・ルックアップをあわせたもの
インターフェースあるクラスからのみ呼び出される関数郡
ロックオンここでは、あるスプライトが他のスプライトを指すスプライト・ハンドルを得ること
複合スプライト実体が複数のスプライトから構成される事(たとえば触手)
ルート・スプライト複合スプライトを構成する大元のスプライト


必要なクラスとクラスの要件(2000/02/10)

クラス
クラス名詳細
CSpriteBaseスプライト・ベース・クラス
CSpriteユーザの定義したスプライト・クラスの総称
CSpriteGroupCSpriteBaseを保持・管理
CSpriteControlCSpriteGroupを保持・管理

インターフェース
インターフェース名詳細
CSpriteISpriteスプライト→スプライト
CSpriteIGroupスプライト→グループ
CSpriteIControlスプライト→コントロール
CSpriteControlISpriteコントロール→スプライト

「A→B」はクラスAからのみ呼び出されるために、クラスB側で用意するインターフェース


クラスとインターフェースの対応
クラスインターフェース
CSpriteBaseCSpriteISprite CSpriteIControl
CSpriteControlCSpriteControlISprite

CSpriteの要件
種類要件名前
基底クラスコントロール・クラスで保持するためのクラスCSpriteBase
インターフェーススプライト間のインターフェースCSpriteISprite
インターフェースコントロール・クラスへのインターフェースCSpriteIControl

CSpriteBaseの要件
種類要件実装方法
クラスCSpriteISpriteの取得関数
クラスCSpriteIControlの取得関数

CSpriteGroupの要件
種類要件実装方法
データCSpriteBaseの保持?
処理CSpriteBaseの取り付け・取り外し関数
処理ソート?
処理ハンドルの作成・取得・開放?

CSpriteControlの要件
種類要件実装方法
データCSpriteGroupの保持vector
処理CSpriteBaseの取り付け・取り外し関数(CSpriteGroupへ受け渡し)
処理ハンドルの作成・取得・開放?

各クラスのためし書き(2001/02/10)

CSpriteBase


CSpriteBase
{
public:
    virtual ~CSpriteBase(){};
    virtual CSpriteISprite & GetISprite(void) = 0;
    virtual CSpriteIControl & GetIControl(void) = 0;
};

CSpriteIGroup


CSpriteIGroup
{
    int m_key;
public:
    int SortKey(void){ return m_key; };
};

CSpriteISprite

ユーザが自分のCSpriteのために用意する。


例)
CSpriteISprite
{
    virtual const POINT & GetPoint(void) = 0;
    virtual const RECT & GetRect(void) = 0;
    virtual int OnCollision( const CSpriteMyShip & ) = 0;
    virtual int OnCollision( const CSpriteEnemy & ) = 0;
}

CSpriteIControl


CSpriteIControl
{
public:
    virtual void OnDraw(void) = 0;
    virtual void OnMove(void) = 0;
    virtual void OnAction(void) = 0;
}

CSprite

ユーザが自由に用意する。


例)
CSpriteMyShip
: public CSpriteBase,
: private CSpriteISprite, CSpriteIGroup, CSpriteIControl
{
    POINT m_pt;
    RECT m_rt;

    // CSpriteBase
    CSpriteISprite & GetISprite(void){ return *this; };
    CSpriteIControl & GetIControl(void){ return *this; };

    // CSpriteISprite
    const POINT & GetPoint(void){ return m_pt; };
    const RECT & GetRect(void){ return m_rt; };
    int OnCollision( const CSpriteMyShip & ){ ASSRET(......); };
    int OnCollsion( const CSpriteEnemy & enemy ){ ...... };

    // CSpriteIControl
    void OnMove()
    {
        ......
        m_key = p.y;
    }
}

うむ、適当に書きなぐってみた。ぬけてる要件とかないかな〜。


TOP | PROGRAM | BACK | NEXT

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル