【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 2669|回复: 0

【Quartz控件系列教程】Tut02 在UI中试用图片

[复制链接]
发表于 2007-12-19 16:52:10 | 显示全部楼层 |阅读模式

这是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编辑过]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-2-6 06:42

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表