绘制可换肤“按钮”的最佳方法是什么? 在电子游戏中?
我正在寻找有关如何在游戏应用程序中绘制可换肤“按钮”的想法。 如果我使用固定的精灵非矢量图像作为按钮背景,那么我无法轻松调整按钮的大小。 如果我编写代码来绘制可调整大小的按钮(就像绘制 Windows 按钮一样),那么程序员就必须参与其中 - 这使得换肤变得困难。 另一种选择是将按钮分成 9 个较小的图像 (3x3) 并将它们全部拉伸——有点像 HTML 中的圆角。
还有另一种“更简单”的方法吗? 最好的方法是什么?
I'm looking for ideas on how to draw a skinnable "button" in a game application. If I use a fixed sprite non-vector image for the button background, then I can't size the button easily. If I write code to draw a resizable button (like Windows buttons are drawn), then the programmer has to get involved -- and it makes skinning difficult. Another option is to break the button into 9 smaller images (3x3) and stretch them all -- kindof like rounded corners are done in HTML.
Is there another "easier" way? What's the best approach?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
是的。 我正在从事编辑工作。 它是 XNA 的类似 XAML 的语言(或者类似 OpenLaszlo,如果您愿意的话)。 因此编辑器可以调整按钮的大小。 按钮也可以通过样式表调整大小。
我想你是对的,在实际设计中按钮可能都是相同的尺寸。 但即使在窗口应用程序中,您有时也需要使按钮更宽以容纳文本。
Yes. I am working on an Editor. It's a XAML-like language (or OpenLaszlo-like, if you prefer) for XNA. So the buttons can be resized by the editor. The buttons might also be resized by a style sheet.
I guess you're right that it's likely that the buttons will all be the same size in a real design. But even in a window's app, you sometimes need to make a button wider to accomodate text.
如果你真的想做到这一点,那么方法就是使用纹理坐标。 就像您使用表格在 HTML 中制作可拉伸按钮/面板设计一样,您只需定义角、顶部可拉伸区域、底部可拉伸区域、侧面可拉伸区域以及中间的 UV 坐标即可。
有关在 XNA 引擎(尽管它是闭源引擎)中实现的示例,请参阅以下内容:
http://www.flatredball.com/frb/docs/index.html php?title=SpriteFrame_Tutorial
If you really want to accomplish this, the way to do it is with texture coordinates. Much like you would make a stretchable button/panel design in HTML with a table, you simply define the UV coordinates for the corners, the top stretchable area, the bottom stretchable area, the side stretchable areas, and then the middle.
For an example of this being implemented in an XNA engine (though it's a closed source engine), see this:
http://www.flatredball.com/frb/docs/index.php?title=SpriteFrame_Tutorial
使用着色器应该可以实现。 您可能需要进行纹素查找,但这会减少复杂 UI 中三角形的数量。
It should be possible with shaders. You would probably have to do texel lookups, but it would cut down on the number of triangles in a complex UI.