这是Quartz--v0.041版本的第二个例子,我们依然使用第一个例题的代码完成。如果没有看例题一的,请先看【Quartz--v0.04例题】Tu....ce 基本设备的建立[长]
在本次例题中,主要完成图片的加载。图片是构成UI界面最基本的控件,几乎所有的UI控件都是由图片构成的,所以用好图片是UI最基本的一个步骤。
首先拷贝例题一到新的目录,然后编译确保可以通过。我们新增加一个图片控件
CStaticImage g_cImgbg; //背景图片
在合适的位置对这个控件进行初始化
SetRect(&r3,0,409,303,510); g_cImgbg.Init(250,250,304,104,r3); 简单介绍一下初始化函数 Init(屏幕坐标x,屏幕坐标y,控件有效宽度,控件有效高度,图片在纹理中的位置); (注* 目前已经内置了UI管理器,ID自动管理,这是与前几个版本的不同点)什么叫做有效宽度/高度呢?这是以后这个UI控件响应的有效区域,也就是UI真实大小,并不是真实渲染大小,这一点要注意。
还有一点很重要:Init函数是初始化函数,它向UI管理器注册了一个新的控件,因此,一个控件只能在生成的时候调用一次!如果需要动态改变控件的坐标,可以用变换矩阵的方式也可以用SetXY()等函数来达到这个效果!
控件的显示也是与控件的注册密不可分的,也就是说,先注册的会被先渲染,后注册的后渲染。
这样,一个静态图片控件就设置完毕了,运行一下代码,就可以看到上面的效果了~~ (为了美观 把背景色改成 D3DCOLOR_XRGB(255,255,255))
很多的朋友觉得静态图片都放在一张纹理里面放不下,因游戏中需要比如说封面,开场,帮助等很多的图片;怎么办呢??
静态的图片提供了方便的重新载入功能例如
SetRect(&r3,16,164,390,400); g_cImgDolig.Init(50,80,374,237,r3); g_cImgDolig.ImageLoadTexture(".\\map.jpg"); //更改当前控件需要修改的图片
这张图片就被载入了。
如果另外一个控件也需要map.jpg这样图片需不需用要重新加载呢??当然不用,不然每一个控件都加在重复图片那不是浪费资源嘛~所以可以用这个方法:
UI_ButtonOk.SetTexture(g_cImgDolig.GetTexture())
来得到曾经被载入到内存中的数据,实现资源优化~!
[此贴子已经被作者于2009-4-20 16:18:23编辑过] |