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;
}