HGE:Tutorials:Video


内容

Textures

支持的图像格式有: (BMP, DDS, DIB, JPG, PNG and TGA ). 通常纹理可作为背景图,和精灵单元.

Sprites

Sprites 定义为纹理图像的一部分. 在Sprite定义之前必须至少定义一个Texture,来为sprite提供精灵单元. hgeSprite 是一个 helper class 用来设计和操作sprite. 你可以对sprite进行重设大小(包括伸缩图像),填入其他颜色,旋转和许多其他的成员功能函数的功能。

在资源管理器中定义sprite和texture

定义Texture,在resource.res文件中定义,例如:

Texture background
{
 filename=bg.jpg
}

确保bg.jpg文件与执行文件处于同样目录中,你可以下载本例程的该文件: Media:HGE_bg.jpg

定义sprite,需要增加一个必须 的参数 rect, 该参数用来定义截取texture文件的比例大小. rect参数的格式含义为: 左上角的坐标+宽高。例如,一个sprite起始于texture坐标的 (0, 0), 并且宽高为32,则其格式为( 0, 0, 32, 32). 如果用正张图片,宽高你该知道怎么设置*。*

resource。res文件中的定义:

Sprite bgSprite
{
 texture=background
 rect=0, 0, 512, 512
}

注意:Texture文件 的大小必须是2的幂,而sprite则不用设定。

显示sprite

用 hgeSprite 类:

#include <hgesprite.h>
 
hgeSprite* bgSprite;

Step 1: 初始化 sprite

在WinMain函数中,在 HGE 初始化之后,在该函数下面  myRes = new hgeResourceManager("resource.res"); 添加如下:

bgSprite = myRes->GetSprite("bgSprite");

这里的bgSprite名字的重合,纯属偶然!注意res文件中的命名与这里引用的名称的一致性。

Step 2:渲染 sprite

在函数 (FrameFunc), 我们加入 Gfx_BeginScene() 和 Gfx_EndScene() 函数来表示我们开始和结束渲染.  Gfx_Clear() 函数用指定颜色清屏(0 是黑色).

sprite的 Render()  函数开始渲染,起始点为屏幕的左上角。

bool FrameFunc()
{
hge->Gfx_BeginScene();
hge->Gfx_Clear(0);  //clear the screen, filling it with black
bgSprite->Render(0, 0);  //render the background sprite
hge->Gfx_EndScene(); 
return false;
}

return false; 意味着动画将一直执行。return true;动画执行一次将关闭窗口。

改变 bgSprite->Render(0, 0); 如下

bgSprite->RenderStretch(0, 0, 800, 600); //render the background sprite stretched

 RenderStretch()函数将按坐标的起始点和宽高来拉伸sprite。

添加其他sprite

定义添加另外一个sprite在当前文件中。

你可以下载该图像: Media:HGE_sheet.png

在resource.res文件中定义如下:

Texture sheet
{
 filename=sheet.png
}
Sprite playerSprite
{
 texture=sheet
 rect=0, 0, 64, 64
}

这里的playerSprite将截取起始点为左上角,以64x64宽来截取texture。

在上面的程序中,在bgSprite的声明下,加入:

hgeSprite* playerSprite;

在WinMain函数中,在bgSprite的初始化后面,加入:

playerSprite = myRes->GetSprite("playerSprite");

下FrameFunc函数中加入:

playerSprite->Render(200, 200);  //render the player sprite

(200, 200).位置将绘制playerSprite的绿色圆形。

Animations

动画是一系列的sprite的相继显示,定义动画需要额外的参数有:帧数,以及fps(即每秒钟的显示帧数)。.hgeAnimation 是 HGE 动画处理sprite的 helper class

它继承自hgeSprite类,因此你可以调用所有的hgeSprite方法。在资源管理器中定义一个动画和定义一个sprite很接近,除了额外的3个参数需要设定:

  • frames: 动画显示的帧数。该帧数的计算是从动画的原点开始,以设定的宽高来自左向右或者从上到下来截取下一张图像。每一帧的图像大小一定要相等。
  • fps: 每秒显示的帧数。
  • mode: 动画的运动模式. 
Group 1.  方向: 选取下列中的一项
FORWARD - 连续
REVERSE - 逆序
The default value is  FORWARD.
Group 2.  循环: 选取一项
LOOP - 完成后从1帧开始
NOLOOP - 只显示一次
默认值是 :   LOOP.
Group 3.  乒乓型: 选取一项
PINGPONG - 例如三帧的动画,可能显示的顺序是: 1, 2, 3, 2, 1, 2, 3, 2, 1, ....
NOPINGPONG - 不用此行。
默认值是:  NOPINGPONG.

下面定义了一个显示数字的星星的sprite:

Animation star
{
 texture=sheet
 rect=0, 64, 64, 64
 frames=3
 fps=1.0
 mode=FORWARD,LOOP
}

注意这里的起始点是 (0, 64) ,FORWARD类型,则下一张是(32, 64) 、 (64, 64) 。。。.


#include <hgeanim.h>
 
hgeAnimation* star;

动画不会自己显示,调用play()函数:

star = myRes->GetAnimation("star");
star->Play();  //start playback of animation

为了让动画显示的=更合理,我们调用如下函数:

float dt=hge->Timer_GetDelta();  //得到调用FrameFunc函数的时间间隔
star->Update(dt);  //update the animation

渲染

star->Render(400, 300);  //render the animation of a star


完整的FrameFunc函数将是如下所示:

bool FrameFunc()
{
 float dt=hge->Timer_GetDelta();  //get the time since the last call to FrameFunc
 star->Update(dt);  //update the animation
 
 hge->Gfx_BeginScene();
 hge->Gfx_Clear(0);  //clear the screen, filling it with black
 bgSprite->RenderStretch(0, 0, 800, 600);  //render the background sprite stretched
 playerSprite->Render(200, 200);  //render the player sprite
 star->Render(400, 300);  //render the animation of a star
 
 hge->Gfx_EndScene(); 
 
 return false;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值