- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在使用 Slick 在游戏中呈现自定义聊天。
我想要做的是,我希望能够为聊天创建自定义的“淡入淡出”效果,顺利从右向左逐渐消失。我不太擅长用文字解释事物,所以我将展示一个我想要的例子。
例子:
我想渲染文本 bernhardkiv: hello world!
,运行我的常规字体渲染器,结果如下:
而我希望能够做到的,就是将文字平滑的截断,如下;
我不知道该怎么做!我相信使用 glScissoring 可以做到这一点,但我一直在尝试使用它,但似乎没有任何效果(根本没有任何 react ,一切都保持不变)。
我会感谢任何人的帮助,我基本上希望能够,而不是在 x,y 处渲染,我希望能够在 x,y 处渲染,宽度为 string_width - smooth_cut,以便能够产生一点褪色效果。
最佳答案
免责声明:
org.newdawn.slick.Font
Slick2D 库中的实现类(和支持类)似乎不是扩展友好的(私有(private)成员和方法)。据我所知,为了达到预期的效果,需要对其中一些内部 Slick2D 类进行更改。 (替代方法是复制整个类和包。)据我从提问者的评论中了解到,Slick2D 源代码包含在提问者的项目中,因此在这种情况下对内部 Slick2D 类进行更改应该是可行的。 (x,x,x,1) (x,x,x,0)
-----------------
| |
| |
| |
| |
| |
| |
-----------------
(x,x,x,1) (x,x,x,0)
org.newdawn.slick.Image
创建
FadableImage
使用以下方法(与
Image
的
drawEmbedded
方法非常相似,但不会覆盖它):
public class FadableImage extends Image {
//.....
public void drawEmbeddedFaded(float x,float y,float width,float height, Color color, float fadePercentWidth) {
init();
//if percent width is set to an invalid amount, default it to 1.
if(fadePercentWidth < 0.0f || fadePercentWidth > 1.0f)
fadePercentWidth = 1.0f;
if (corners == null) {
GL.glTexCoord2f(textureOffsetX, textureOffsetY);
GL.glVertex3f(x, y, 0);
GL.glTexCoord2f(textureOffsetX, textureOffsetY + textureHeight);
GL.glVertex3f(x, y + height, 0);
//set the color of x2 and y2 of the quad to 0 alpha
GL.glColor4f(color.r, color.g, color.b, 0.0f);
GL.glTexCoord2f(textureOffsetX + textureWidth*fadePercentWidth, textureOffsetY
+ textureHeight);
GL.glVertex3f(x + width*fadePercentWidth, y + height, 0);
GL.glTexCoord2f(textureOffsetX + textureWidth*fadePercentWidth, textureOffsetY);
GL.glVertex3f(x + width*fadePercentWidth, y, 0);
//reset the color
GL.glColor4f(color.r, color.g, color.b, color.a);
} else {
corners[TOP_LEFT].bind();
GL.glTexCoord2f(textureOffsetX, textureOffsetY);
GL.glVertex3f(x, y, 0);
corners[BOTTOM_LEFT].bind();
GL.glTexCoord2f(textureOffsetX, textureOffsetY + textureHeight);
GL.glVertex3f(x, y + height, 0);
//set the color of x2 and y2 of the quad to 0 alpha
GL.glColor4f(color.r, color.g, color.b, 0.0f);
//corners[BOTTOM_RIGHT].bind();
GL.glTexCoord2f(textureOffsetX + textureWidth*fadePercentWidth, textureOffsetY
+ textureHeight);
GL.glVertex3f(x + width*fadePercentWidth, y + height, 0);
//corners[TOP_RIGHT].bind();
GL.glTexCoord2f(textureOffsetX + textureWidth*fadePercentWidth, textureOffsetY);
GL.glVertex3f(x + width*fadePercentWidth, y, 0);
//reset the color
GL.glColor4f(color.r, color.g, color.b, color.a);
}
}
}
FadableImage
,我们还需要扩展
org.newdawn.slick.font.GlyphPage
创建
FadableGlyphPage
.支持
FadableGlyphPage
我们需要修改
org.newdawn.slick.font.GlyphPage
的构造函数并添加一个新的。
org.newdawn.slick.UnicodeFont
使用我们的
FadableGlyphPage
当
UnicodeFont
加载
loadGlyphs
中的字形.
UnicodeFont
的
drawDisplayList(...)
方法来调用我们的
FadableImage
的特辑
drawEmbeddedFaded(...)
给定字符串的指定结束索引处的字符的方法。我们还必须进行修改,以便
DisplayList
缓存将被正确处理。
UnicodeFont
中添加了一个方便的方法绘制一个字符串,其中 endIndex-1 处的字符褪色并绘制到由 fadePercentWidth 指定的宽度百分比:
public void drawString(float x, float y, String text, int endIndex, float fadePercentWidth) {
drawDisplayList(x, y, text, Color.white, 0, endIndex, fadePercentWidth);
}
0.0f
到
1.0f
)。渐变宽度百分比设置为
0.5f
,将绘制四边形总宽度的 50%。并且淡入淡出将达到 50% 的宽度:
(x,x,x,1) (x,x,x,0)
------------|------------
| | |
| drawn | not |
| | drawn |
| | |
| | |
| | |
------------|------------
(x,x,x,1) (x,x,x,0)
import java.awt.Font;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.BasicGame;
import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.UnicodeFont;
import org.newdawn.slick.font.effects.ColorEffect;
public class TextFadeTest extends BasicGame {
private final int Y_OFFSET = 50;
private final org.newdawn.slick.Color bgColor = new org.newdawn.slick.Color(126, 166, 240);
private UnicodeFont unicodeFont;
public TextFadeTest(String gamename) {
super(gamename);
}
@Override
public void init(GameContainer gc) throws SlickException {
gc.setShowFPS(false);
gc.getGraphics().setBackground(bgColor);
Font awtFont = new Font(Font.SERIF, Font.PLAIN, 36);
unicodeFont = new UnicodeFont(awtFont);
unicodeFont.getEffects().add(new ColorEffect(java.awt.Color.WHITE));
unicodeFont.addAsciiGlyphs();
unicodeFont.loadGlyphs();
}
@Override
public void update(GameContainer gc, int i) throws SlickException {}
@Override
public void render(GameContainer gc, Graphics g) throws SlickException {
String str = "bernhardkiv: hello world!";
int y = 0;
unicodeFont.drawString(10, y, str);
unicodeFont.drawString(10, y+=Y_OFFSET, str, Color.white, 0, 22);
unicodeFont.drawString(10, y+=Y_OFFSET, str, 22, 0f);
unicodeFont.drawString(10, y+=Y_OFFSET, str, 22, 0.10f);
unicodeFont.drawString(10, y+=Y_OFFSET, str, 22, 0.25f);
unicodeFont.drawString(10, y+=Y_OFFSET, str, 22, 0.50f);
unicodeFont.drawString(10, y+=Y_OFFSET, str, 22, 0.75f);
unicodeFont.drawString(10, y+=Y_OFFSET, str, 22, 0.90f);
unicodeFont.drawString(10, y+=Y_OFFSET, str, 22, 1.0f);
}
public static void main(String[] args) {
try {
AppGameContainer appgc;
appgc = new AppGameContainer(new TextFadeTest("TextFadeTest"));
appgc.setDisplayMode(640, 480, false);
appgc.start();
}
catch(SlickException ex) {
Logger.getLogger(TextFadeTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
关于java - 如何使用 Slick2D 渲染最后一个字符字形的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29200102/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
为什么在 C# 中添加两个 char 结果是 int 类型? 例如,当我这样做时: var pr = 'R' + 'G' + 'B' + 'Y' + 'P'; pr 变量变为 int 类型。我希望它是
下面的代码可以编译,但 char 类型的行为与 int 类型的行为不同。 特别是 cout ::ikIsX >() ::ikIsX >() ::ikIsX >() using names
我正在寻找一个正则表达式,它可以匹配长度为 1 个或多个字符但不匹配 500 的内容。这将在 Rails 路由文件中使用,特别是用于处理异常。 路线.rb match '/500', to: 'err
对于 C 编程作业,我正在尝试编写几个头文件来检查所谓的“X 编程语言”的语法。我最近才开始,正在编写第一个头文件。这是我编写的代码: #ifndef _DeclarationsChecker_h_
为什么扩展的 ascii 字符(â、é 等)被替换为 字符? 我附上了一张图片...但我正在使用 PHP 从 MySQL 中提取数据,其中一些位置有扩展字符...我使用的是 Arial 字体。 您可以
我有一个与 R 中的断线相关的简单问题。 我正在尝试粘贴,但在获取(字符/数字)之间的断线时遇到问题。请注意,这些值包含在向量中(V1=81,V2=55,V3=25)我已经尝试过这段代码: cat(p
如何将 ANSI 字符 (char) 转换为 Unicode 字符 (wchar_t),反之亦然? 是否有用于此目的的任何跨平台源代码? 最佳答案 是的,在 中你有mbstowcs()和 wcsto
函数 fromCharCode 不适用于国际 ANSI 字符。例如,对于 ID 为 192 到 223 的俄语 ANSI (cp-1251) 字符,它返回特殊字符。如何解决这个问题? 我认为,需要将A
如果不喜欢,我想隐藏 id,但不起作用 SELECT * FROM character, character_actor WHERE character.id NOT LIKE character_a
现在这个程序成功地反转了键盘输入的单词。但是我想在我反转它之前“保存”指针中的单词,所以我可以比较两者,反转的和“原始的”,并检查它们是否是回文。我还没有太多经验,可能会出现比我知道的更多的错误,但我
Memcpy 和 memcmp 函数可以接受指针变量吗? char *p; char* q; memcpy(p,q,10); //will this work? memcmp(p,q,10); //w
恐怕我对一个相当过饱和的主题的细节有疑问,我搜索了很多,但找不到一个明确的答案来解决这个特定的明显-imho-重要的问题: 使用UTF-8将byte[]转换为String时,每个字节(8bit)都变成
我有一个奇怪的问题。我需要从 stat 命令打印输出字符串。 我已经编写了获取一些信息的代码。 import glob import os for file in glob.glob('system1
我正在使用 Java 并具有其值如下所示的字符串, String data = "vale-cx"; data = data.replaceAll("\\-", "\\-\\"); 我正在替换其中的“
String urlParameters = "login=test&password=te&ff"; 我有一个String urlParams,& - 是密码的一部分,如何使其转义,从而不被识别为分
大家好,我只想从此字符串中提取第一个字母: String str = "使 徒 行 傳 16:31 ERV-ZH"; 我只想获取这些字符: 使 徒 行 傳 并且不包括 ERV-ZH 仅数
这个问题已经有答案了: Crash or "segmentation fault" when data is copied/scanned/read to an uninitialized point
所以, 我有一个字符**;它本质上是一个句子,带有指向该句子中每个单词的指针;即 'h''i''\0''w''o''r''l''d''\0''y''a''y''!''\0' 在这种情况下,我希望使用可
这个问题在这里已经有了答案: Using quotation marks inside quotation marks (12 个答案) 关闭 7 年前。 如何打印 " 字符? 我知道打印 % 符号
我是一名优秀的程序员,十分优秀!