- 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/
这是非常非常令人沮丧的。一段时间以来,我一直在尝试使用 Slick,但障碍不断涌现。 Slick 的概念真的很棒,但是很难学,而且不像Scala,它没有“初学者”、“中级”和“高级”风格,各个阶段的人
我在 Event 上定义了一个可选的外键,它转到 EventType。我想查询所有事件,即使是那些具有 None (null) 事件类型的事件。这是在 Event 上定义的外键。 def eventT
Another question通过在“一”案例类 (Directorate) 中定义一个返回“多”类的 Seq 的方法来回答如何定义一对多关联(服务区)。但它没有解决问题的“双向”部分。 使用该示例
我有一个向表中添加日期列的要求,默认值是由 oracle 的 sysdate 设置的,如下所示 例子{...CREATED_ON DATE 默认系统日期 我想使用 slick table ddl 创建
当我设置 speed: 1000 , pauseOnHover工作正常,但一旦我将其设置为 speed: 10000 , pauseOnHover不能立即工作 - 它在几秒钟后工作。 代码: $('#
我正在 try catch Slick 3.x 中的 SQL 错误。下面的代码不打印任何内容,但如果在调试下跟踪,它工作正常(它打印失败)。这段代码有什么问题? object TestSlick ex
我正在 try catch Slick 3.x 中的 SQL 错误。下面的代码不打印任何内容,但如果在调试下跟踪,它工作正常(它打印失败)。这段代码有什么问题? object TestSlick ex
我一直在使用 Slick's insertOrUpdate since its release in 2.1版本没有任何问题。 现在我正在尝试提高我的代码性能,而 insertOrUpdate 是瓶颈
我有一个列类型为日期的表。此列接受空值,因此,我将其声明为一个选项(请参阅下面的字段 perDate)。问题显然是从/到 java.time.LocalDate 的隐式转换/java.sql.Date
我试图在拖动幻灯片时向 a 标签添加“slick active”类。该类在单击时应用,但无法弄清楚如何将其应用到其他类! 如果能帮助破译我的代码,我们将不胜感激! JS $(document).rea
我有透明背景的 slider ,我想在悬停中心 div 时为 slider 背景制作动画,但在 slider 移动后,悬停效果会卡在所有以前具有“光滑中心”类的幻灯片上。任何建议如何解决它? Sp 到
我使用 Slick 3.1 代码生成器来创建默认对象和特征 Tables.scala 下面的方法有效,但我想隐式或显式地将 UserRow 和 PasswordsRow 转换为 User 和 User
我正在使用 Slick Slider 和 Slider Syncing 选项。是否可以滚动“缩略图”(示例中为 .slider-nav)而不更改主图像(示例中为 .slider-for)? 我只想在您
似乎 vue-slick 还没有提供任何事件(afterChange、beforeChange、Swipe...)。就像 jQuery 版本一样。 我应该使用 MutationObserver 来监听
问题 我正在 WordPress 网站上设置一个灵活的 slider /轮播。一切工作/显示都很完美,但是 slider 已停止正确拖动。 我仍然可以用鼠标物理拖动 slider ,它会按应有的方式进
我正在尝试使用 slick 库实现 slider 同步。我有一组来自后端的名为 pictures 的图像。我遍历这些图像,将它们填充到我的 slider-for 和 slider-nav div 下。
不知何故,我无法正确使用 slick carousel ( http://kenwheeler.github.io/slick/ )。 我收到以下错误: Uncaught TypeError: $(.
我正在使用 AOS 在滚动条上显示 html 元素。它单独运行良好,但当我在包含 Slick slider 的页面上使用它时,应用 AOS 的元素不显示。元素被隐藏,如果有很多滚动,看起来浏览器向 A
我正在使用 AOS 在滚动条上显示 html 元素。它单独运行良好,但当我在包含 Slick slider 的页面上使用它时,应用 AOS 的元素不显示。元素被隐藏,如果有很多滚动,看起来浏览器向 A
在我测试slick.js 前端 slider 插件时,我发现在Chrome 浏览器中,有时导航点在class ".slick-dots li button:before" 突然变了 来自 内容:'•'
我是一名优秀的程序员,十分优秀!