读书人

请问关于GUI所用的纹理图片的规划和设

发布时间: 2012-02-23 22:01:35 作者: rapoo

请教关于GUI所用的纹理图片的规划和设计问题。。


对于一个窗体控件,我想实现用上面这一张图片来保存窗体的四个角的纹理,以实现任意宽高的窗体。

可是如果是一张图片保存4个纹理的话,那就要保存4个纹理坐标(而且我的素材都是不规则的,宽高不是2的N次方)。我现在就是愁这个纹理坐标,到底应该记录在什么地方。

我把很多不同控件的不同效果图片都打包成了一个文件,比如各窗体的图片都打包在了“WindowCTL.tex”文件中,所有的按忸图片都打包在了“ButtonCTL.tex”文件中。每一张图片就是像图上这个样子,还包含4个纹理。

然而又不是所有图片都是4个纹理组成的,也许只有1个,也许只有2个。如果我在所有打包文件的文件头里,都写上4个RECT类型,即纹理坐标数据,那文件打包起来不是很大?很浪费?(4个RECT就是64字节,很大)

把4个角放在一张图片里,很易于管理,像4种状态的按钮,很多控件也都是按钮组成的
如果是每张图片只记录一个纹理的话,那样也照样会浪费磁盘空间,还不易于管理,想一想,如果是10个窗体控件,每个都有4个角,就是40张纹理。

请问,一般都是如何设计的??

[解决办法]
可以保存纹理的索引,然后根据索引来贴上需要的纹理
比如你的4个纹理的索引分别为1,2,3,4
然后按钮的4个角就保存这些整形的纹理索引就可以了
[解决办法]
我设计了一个称为“界面主题”的设定文件,基于XML格式,里面存储了纹理文件名(png文件)和界面元素在这个纹理中的位置(纹理坐标)。所有界面元素的外观,比如窗体边框、默认图标、各种控件的外观等等,都保存在一个纹理文件里面。程序启动或者设置界面主题的时候,从设定文件里面读取纹理文件的文件名和各个坐标数据进行界面绘制。
[解决办法]
做一个好界面系统比做一个2D游戏引擎还更复杂,我搞2D的深有体会.
要看楼主想做简单的还是复杂的
[解决办法]

探讨
我设计了一个称为“界面主题”的设定文件,基于XML格式,里面存储了纹理文件名(png文件)和界面元素在这个纹理中的位置(纹理坐标)。所有界面元素的外观,比如窗体边框、默认图标、各种控件的外观等等,都保存在一个纹理文件里面。程序启动或者设置界面主题的时候,从设定文件里面读取纹理文件的文件名和各个坐标数据进行界面绘制。

[解决办法]
探讨
引用:我设计了一个称为“界面主题”的设定文件,基于XML格式,里面存储了纹理文件名(png文件)和界面元素在这个纹理中的位置(纹理坐标)。所有界面元素的外观,比如窗体边框、默认图标、各种控件的外观等等,都保存在一个纹理文件里面。程序启动或者设置界面主题的时候,从设定文件里面读取纹理文件的文件名和各个坐标数据进行界面绘制。

这样做不错,之前也想过
不过这样会带来两个问题
1.图片的复用率变低了
2.增加了更新时候的压力,比如一个纹理文件保存4张图片 其中一张需要替换 就会导致需要更新一个整个文件

其实直接分成多张纹理保存带来的消耗也没想象的那么大就是了

[解决办法]
探讨

你是说所有的纹理坐标都保存在了配置文件里? 比如ini文件??

我也想过这方面,只是最后感觉这样设定烦琐了,不能用一个纹理坐标,就要在文件中设定一个吧。
不过虽然控件在游戏里用的可能非常多,但是其控件类型不算多。

[解决办法]
设定文件的思路不错,我也是这么干的
[解决办法]
我把所有的控件纹理都集中到一个图片文件中,在设定GUI配置的XML文件中再来指定对应的矩形区域。同两位的烦恼一样,矩形位置还是需要自己去目视计算,^ ^

读书人网 >网络游戏

热点推荐