スプライトで描画
2013-11-08


テクスチャで画像を描画できるようになりましたが、毎度OpenGLを直接叩くのでは手順が面倒です。
描画を管理するスプライトクラスを作って、手軽に描画できるようにしましょう。

・スプライトクラス(sys::Sprite)
スプライトはテクスチャと、描画する範囲(切り抜き)から成っています。つまり1枚のテクスチャには複数のスプライトの画像を収めることができます(描画時、テクスチャの切り替えにはコストがかかるので、なるべく少ないテクスチャにまとめておいた方が効率が良いです)。

Sprite.h
#ifndef ___SPRITE_H___
#define ___SPRITE_H___

#include        "common.h"
#include        "Texture.h"


namespace sys
{

/****************
    スプライト
 ****************/
class Sprite
{
protected :
        static u32 const*       spr_color;              // カラー

public :

// 原点位置
enum
{
        X_CENTER        = 0x00,                 // センタリング
        X_LEFT          = 0x01,                 // 左揃え
        X_RIGHT         = 0x02,                 // 右揃え
        Y_CENTER        = 0x00,                 // センタリング
        Y_TOP           = 0x10,                 // 上揃え
        Y_BOTTOM        = 0x20,                 // 下揃え
};

        static void             set_color(u32 _color = 0xffffffff);             // カラー設定
        static void             set_color(u8 _r, u8 _g, u8 _b, u8 _a = 0xff)
                                        {
                                                set_color(RGBA(_r, _g, _b, _a));
                                        }
        static void             set_color(u32 const*);


        Texture*        texture;                        // テクスチャ
        GLfloat         texcoord[4][XY];        // UV座標
        short           width, height;          // 大きさ
        short           ox, oy;                         // 原点

        void    set(Texture*, SRect const*, int _origin = X_CENTER | Y_CENTER);                         // 設定
        void    set(Texture*, int _origin = X_CENTER | Y_CENTER);                                                       // 設定(テクスチャに合わせた大きさ)
        void    set(short, short, int _origin = X_CENTER | Y_CENTER);                                           // 設定(テクスチャ無し)
        void    set(short, const void*, int _origin = X_CENTER | Y_CENTER);
        void    set_origin(int _origin = X_CENTER | Y_CENTER);                                                          // 原点位置設定

        void    draw(GLfloat*);                 // 描画
        void    draw(float, float);
        void    draw(float, float, float, float);
        void    draw(float _x, float _y, float _scl)
                        {
                                draw(_x, _y, _scl, _scl);
                        }
        void    draw(float, float, float, float, float);
        void    draw(float const*);
};

}

#endif
/****************** End of File ***************************************/

Sprite.cpp

続きを読む

[Android プログラミング]

コメント(全0件)
コメントをする


記事を書く
 powered by ASAHIネット