Це легко: шрифти не повинні відповідати роздільній здатності, вони повинні відповідати щільності пікселів .
Щільність пікселів вимірюється у вигляді пікселів на дюйм ( ІРП ) або пікселів на сантиметр. Існує також одиниця вимірювання, яка називається пікселями незалежно від щільності ( DP ) . Визначено, який 1dp
розмір має один піксель на 160 PPI
екрані.
Тепер, повертаючись до шрифтів, спробуйте зробити цей тест: поставте свій ноутбук на 720p. Погляньте на розмір шрифту. Тепер підключіть його до монітора 1080p 42 "на робочому столі. Якщо ваш монітор видає потрібну інформацію про його розмір, то шрифт повинен мати ТОЧНО той самий розмір, який він мав на екрані 720p. Уявіть, наскільки дивно це було б, якби текст у вашому розмір ноутбука мав інший розмір, ніж текст на моніторі робочого столу. Зважаючи на це, більші роздільні здатності повинні надавати більше деталей шрифту, більші екрани повинні давати більше вмісту для відображення.
Той самий факт можна спостерігати і в текстових редакторах. 72pt
Шрифт повинен виглядати на екрані те ж саме було б при друку на папері.
Все це означає, що ви, мабуть, повинні мати однаковий розмір для всіх розмірів дисплея (за деякими винятками). Якщо ви хочете базуватися десь, веб-сайти зазвичай використовують 12pt
шрифти, використовуються MS Windows 11pt
та 12pt
шрифти.
Ця діаграма (також включена в нижню частину відповіді) скажіть нам, що 12pt
в CSS приблизно дорівнює 16px
і CSS (як би це не було досить заплутано, px у CSS такий же, як і dp скрізь), тож скажімо, що ви Я буду робити ваші шрифти 16dp
на LibGDX.
У грі використовуйте FreeTypeFontGenerator
для динамічного генерування шрифтів, таким чином ви можете враховувати щільність екрану під час їх створення:
BitmapFont createFont(FreeTypeFontGenerator ftfg, float dp)
{
return ftfg.generateFont((int)(dp * Gdx.graphics.getDensity()));
}
//On Init
BitmapFont buttonFont = createFont(arial, 16); //16dp == 12pt
Це працює, тому що Gdx.graphics.getDensity()
дорівнює YourScreenDensity/160
таким чином, є "коефіцієнтом масштабу", щоб привести речі до того розміру, який вони були б на екрані 160ppi.
Про винятки, про які я згадував раніше: ви, ймовірно, хочете, щоб шрифти змінили розмір відповідно до розміру екрана у випадку логотипів, рекламних акцій тощо. Але майте на увазі, що вам буде краще робити їх у графічному редакторі, як Photoshop чи Gimp , все одно.
Інший виняток - текст на крихітних екранах. 4.5 "або менші екрани телефону, носяться. Зазвичай у вас не буде часу на прокручування контенту, або ви просто не зможете дозволити собі розмістити стільки вмісту на цьому екрані. Ви можете спробувати 1dp
зменшити шрифт , як Мабуть, читач буде мати телефон дуже близько до їх обличчя, вони, ймовірно, не матимуть проблем із читанням. Майте на увазі, що ви можете дратувати гравця, читаючи нечитабельний маленький текст.
TL; DR:
- Фізичний розмір приблизно не зміниться безпосередньо з розміром екрана або роздільною здатністю, але при комбінації обох (
screenSize/resolution
знаменитий ІЦВ)
- Подумайте про pt та dp . Забудьте про пікселі екрану, поки вам не доведеться отримати остаточний результат.
- Створіть свій шрифт під час виконання з розумним розміром.
- Перетворення dp в пікселі екрану:
pixels = dp * Gdx.graphics.getDensity();
- Якщо ви використовуєте двигун, який не дає вам конвертер в dp, як LibGDX
Gdx.graphics.getDensity()
, ви можете спробувати:, densityFactor = Screen.getPixelsPerInch() / 160.0f
тодіpixels = dp * densityFactor
Редагувати:
2014, 25 червня в Google IO, Matias оголосив про нові вказівки щодо стилів для Android, до них входять нові вказівки щодо шрифту та типографії для Roboto. Візьміть цю таблицю як керівництво:
EDIT2:
Додано діаграму розміру шрифту CSS, якщо посилання загниває: