hgeSprite类

hgeSprite类

 

hgeSprite是一个精灵实体的HGE帮助类。

1、构造函数

创建和初始化一个hgeSprite对象。

hgeSprite(HTEXTURE tex, float x, float y, float w, float h);

其中:tex为纹理图片,x与y为精灵对应纹理图片的左上角位置,w与h为精灵的宽度与高度。

2、渲染函数

1)       Render 将精灵渲染到屏幕上

void Render(float x, float y);

其中:x与y为显示精灵的屏幕位置

2)       RenderEx 可使用缩放和旋转的方式来渲染精灵

void RenderEx(float x, float y, float rot, float hscale=1.0f, float vscale=0.0f);

其中:x与y为显示精灵的屏幕位置,rot为旋转角度,hscale和vscale精灵的宽度与高度的放缩比例

3)       RenderStretch 渲染拉伸的精灵

void RenderStretch(float x1, float y1, float x2, float y2);

其中:x1与y1为左上角,x2与y2为右上角,即将精灵以拉伸的方式显示在固定有四方形中。

4)       Render4V 将精灵渲染到屏幕上的任意矩形中

void Render4V(float x0, float y0, float x1, float y1, float x2, float y2, float x3, float y3);

其中: (x0,y0)---------(x1,y1)

          |               |

       (x3,y3)---------(x2,y2)

3、相关的辅助函数

SetTexture      设置精灵要使用的纹理。

SetTextureRect 设置精灵要使用的纹理区域。

SetColor        为指定的顶点或整个精灵设置色彩和透明度。

SetZ            为指定的顶点或整个精灵设置Z序(Z-order)。

SetBlendMode    设置精灵的混合模式。

SetHotSpot      设置精灵的锚点,即精灵的中心点位置。

SetFlip         设置水平和/或垂直翻转精灵。

   

GetTexture      返回当前精灵的纹理。

GetTextureRect 返回精灵使用的当前纹理区域。

GetColor        返回指定的精灵顶点颜色。

GetZ            返回指定的精灵顶点Z序(Z-order)。

GetBlendMode    返回当前精灵的混合模式 。

GetHotSpot      返回精灵的锚点。

GetFlip         返回当前精灵的水平和/或垂直翻转。

GetWidth        返回精灵的宽度。

GetHeight       返回精灵的高度。

GetBoundingBox 返回精灵的约束边界(四边形)。

GetBoundingBoxEx 返回缩放和旋转的精灵约束边界(四边形)。

4、几点注意事项

1> hgeSprite中的SetHotSpot的功用是设定该sprite的热点(锚点)。其接受的参数a,b代表改热点据sprite坐上角的相对横,纵

距离。设置热点是初始化一个sprite过程中的一部分。之后再对该sprite进行处理时其坐标就是其热点坐标。

例如:

hgeSprite* spr = new hgeSprite(0, 0, 0, 20, 20)   //20x20

spr.SetHotSpot(10, 10);   //Hot spot (10, 10) in center


2>HGE中sprite的淡入淡出效果可以通过SetColor不断更改sprite的颜色值来做到。对于一个带有自定义的texture的sprite,将

其颜色设置为0xFFFFFFF,在一般的BlendMode设定下为最标准的值。如果更改为0x88FFFFFF,则正好是半透明状态。以此类推

0x00FFFFFF时则为完全透明。

下面给出一个简单的渐变色的类的例子。

一个简单的办法是设置一个int的factor,将其乘以0x1000000对颜色,进行加减来控制其alpha值。 但要注意的是HGE中颜色值的

类型是typedef unsigned long DWORD,是非符号数。

如果用下面这种方式进行操作必然导致错误。

colorword -= factor*0x1000000;

if (colorword < 0x00FFFFFF) {

colorword = 0x00FFFFFF;

return false;  //fade finished

}

return true;    //fading

由于colorword是非符号数,if判断支内语句永远无法执行可以改为下面的方法

DWORD delta = factor*0x1000000;

if (colorword < delta) {

colorword = 0x00FFFFFF;

return false;

} else {

colorword -= delta;

return true;

}

上一篇:线程安全详解


下一篇:GAMES101-01-Overview of Computer Graphics计算机图形学概述