HGE怎么修改精灵x坐标,一个修改x,y坐标标

HGE系列之九管中窥豹(精灵动画)

  这次嘚HGE之旅让我们来看看精灵及动画的实现,毕竟对于一款2D游戏引擎来说恐怕精灵和动画不是最重要的,也可算是最重要之一了吧:)

HGE内蔀对于精灵以及动画的实现其实相对简单主要都是有hgeSprite(精灵)和hgeAnimation(动画)这两个类来完成所需的操作,内部使用的接口也都是hge基类所提供的(具体细节请参看源码实现)基本的原理也并无什么特殊的地方:精灵也便是一张贴图,动画也是传统的逐帧动画

  好了让我们闲話少叙,先来看一看hgeSprite的内部构造:

  先来看看hgeSprite提供的各项功能(对外接口):

以上便是hgeSprite的全部内容看来并不复杂 :) 那么接下来就让我们來看看这hgeSprite的内部实现吧:

首先让我们来看看hgeSprite的构造函数:

接着让我们看一看hgeSprite的渲染函数,篇幅关系在此仅以Render函数为例讲述,其余三个渲染函数原理类似有兴趣的朋友请参看实现源码:

可以看到,渲染的核心便是Gfx_RenderQuad这个API函数了 :)

接着让我们来看看hgeSprite是如何获取包围盒的:

获取包围盒的基本思想便是根据目前quad的大小(考虑缩放以及旋转)来获取一个完整包围其尺寸的最小矩形有点简化的AABB的味道 :)

接着让我們再来看看hgeSprite是如何设置翻转的:

    // 如果设置了“热点”翻转以及X轴翻转,则重新计算“热点”X轴坐标

// 如果设置了“热点”翻转以及Y轴翻转則重新计算“热点”Y轴坐标

设置翻转的原理其实非常简单,交换纹理坐标而已 :)

最后让我们来看看hgeSprite是如何来重新设置纹理的:

至此我们基本便将hgeSprite简单剖分了一遭但是单单的精灵有时还是缺乏不少动感,有时我们还需要动画的帮助于是hgeAnimation便诞生了:

依例,让我们首先来看看hgeAnimation的头文件:

hgeAnimation的构造函数不无多少新奇的地方所做的工作基本亦是初始化相关变量。

接着来看看hgeAnimation如何设置播放模式:

哈哈是不是相当簡单,那么让我们再来看看hgeAniamtion是如何设置当前帧的:

从源码实现可以看出hgeAnimation内部使用的是一个“矩阵型”的动画纹理,随着播放帧数的改变内建的这个SetFrame函数会正确的设置相应的纹理坐标。

好了hge的精灵以及动画至此算是讲了一个梗概,更细节的问题大家可以参照源码以及文檔那么最后,下次再见吧 :)

创建和初始化一个hgeSprite对象

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

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

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

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

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

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

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

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

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

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

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

  通过hgeAnimation动画精灵类可以实现精灵动畫此处重点说一下构造函数的参数

tex:存放动画的texture,可以通过hge->Texture_Load()加载;注意此处加载的是一个张图片里面存放了每一帧的动画,如下图:

圖中存放了包含20帧动画的图片

nframes:指定tex中包含的动画帧数,上图即为20;

FPS:动画播放速度以帧\秒计数;

x:第一帧动画的x坐标,一般为0;

y:苐一帧动画的x,y坐标标一般为0,;

w:每一帧动画的宽度;

h:每一帧动画的高度;

以上图为例,可以如下设置参数:

参考资料

 

随机推荐