【发布时间】:2018-09-17 02:02:37
【问题描述】:
我终于开始习惯 SDL 2 的基本渲染功能,我偶然发现了一个我相信公众可能能够回答的问题。在我的代码中,我生成了一些文本并使用教程中的一些代码,能够将文本加载为纹理(即 Lazy foo 的教程)。此纹理现在具有基于字体大小和输入文本量的宽度和高度。我在一个由花哨的边框制成的正方形中使用的另一个功能是我希望将其用作菜单。这个正方形是 200x200。例如,如果文本纹理为 100x160,我希望该正方形现在呈现为可能是 120x180 的图像(基本上将其压缩为与文本纹理相似的大小。
tl;博士:
我有 200x200 的正方形。
我有 100x160 的文本纹理
我想将 200x200 的正方形渲染为 120x160 的正方形,并在正方形内渲染 100x160 的文本。
***loadFromRenderedText 采用 ttf 字体、字符串和颜色 (RGBA) 根据字符串创建图像纹理 -> 生成自己的宽度/高度
menuTextTexture.loadFromRenderedText(menuFont, "Info Item Skill Back",menuTextColor);
menuSize.x = 0;
menuSize.y = 0;
menuSize.w = menuTextTexture.getWidth() + boarderW;
menuSize.h = menuTextTexture.getHeight() + boarderW;
***menuSize 是一个 SDL_Rect
menuBoxTexture.TextRender(XmenuRenderLocX, XmenuRenderLocY, &menuSize, 0, NULL, SDL_FLIP_NONE);
menuTextTexture.render(XmenuRenderLocX+boarderW, XmenuRenderLocY+boarderW);
TextRender 和 render 做同样的事情,除了 render 使用缩放因子将剪辑大小乘以更大(我将其留空 -> 剪辑然后为 NULL 并使用基本高度/宽度)。对于 TextRender,我通过传递 menuSize SDL rect 来指定渲染尺寸。这需要 200x200 的正方形并仅在 (XmenuRenderLocX, XmenuRenderLocY) 处渲染正方形的 120x160...因此基本上裁剪了正方形,这不是我想要的...我想调整正方形的大小。
任何帮助将不胜感激
【问题讨论】:
-
抱歉,有很多文字根本无法帮助您理解您的问题。我看到的所有代码都是你的,所以别人不知道,所以除了你之外的任何人都不太可能知道他们看不到的代码有什么问题。 wiki.libsdl.org/SDL_RenderCopy 有一个如何使用 src 和 dst rect 的示例,“纹理将被拉伸以填充给定的矩形”。从最后一段来看,您似乎在谈论裁剪而不是拉伸 - 如果是这样,您可能传递了错误的 src rect。如果你想要整个纹理,
NULL可以。 -
这是我筋疲力尽时发布的结果^^* 今天早上我一看到它就发现我的问题与 SDL_RenderCopyEx 的使用方式有关。我没有传递我想要的尺寸,而是传递了文本剪辑大小。