【发布时间】:2019-04-15 15:05:41
【问题描述】:
我正在尝试创建一个像素复古外观的小游戏,并且我正在使用像素化字体。不幸的是,我无法渲染边缘与源字体一样锐利的字体。
关于我的 mcve:
我正在为fonts/pokemon_classic.ttf 使用this 字体(我发现无法在线托管该字体,所以没有jsfiddle),但您可以使用任何您喜欢的像素字体。
下面的示例呈现这样的字体:
如何使此文本呈现与源字体一样清晰?它应该看起来像这样(编辑后的图像):
root 的比例可能会在运行时改变以适应屏幕
一个不太优雅但可能可行的解决方案是将每个像素的 alpha 固定为 0 或 1,具体取决于某个阈值,但我不知道该怎么做。
JS:
PIXI.settings.SCALE_MODE = PIXI.SCALE_MODES.NEAREST;
let scale = 30;
let app = new PIXI.Application();
document.body.appendChild(app.view);
app.renderer.view.style.position = "absolute";
app.renderer.view.style.display = "block";
app.renderer.autoResize = true;
app.renderer.resize(window.innerWidth, window.innerHeight);
let root = new PIXI.Container();
app.stage.addChild(root);
root.scale.set(scale);
document.fonts.load('8pt "pokemon"').then(() => {
let text = new PIXI.Text("Test", {fontFamily: 'pokemon', fontSize: 8, fill: 0xff1010});
root.addChild(text);
});
CSS:
@font-face {
font-family: 'pokemon';
src: url("fonts/pokemon_classic.ttf");
}
* {
padding: 0;
margin: 0;
}
【问题讨论】:
-
看起来您在示例中使用了一些小文本。当您将字体大小设置为较小的数字时,PIXI 中的文本可能会变得模糊。要解决此问题,您可以将字体大小设置为比您想要的大 2 或 3 倍,然后使用 scale.set() 将其更改回原来的大小。通过这样做,它将具有更好的分辨率。
标签: javascript antialiasing pixi.js