Рисуване на текст¶
Програмите за рисуване често отпечатват различни съобщения заедно със снимките (вероятно сами сте виждали много примери). Ето как да направите това в PyGame:
Както можете да видите в примера, за да се покаже текстът първо трябва да създадем обект, представляващ шрифт. За целта използваме функцията pg.font.SysFont
, за която уточняваме вида и размера на буквите. Можем също да създадем повече такива обекти, в случай че възнамеряваме да използваме различни размери или видове букви, макар че често се нуждаем само от един шрифт.
След създаването на шрифта, всеки път, когато искаме да покажем някакъв текст, повтаряме следните две стъпки:
Първата стъпка е да създадете изображение, което съдържа желания текст. Това се осъществява с помощта на функцията
font.render
, където * font * е шрифтовият обект, създаден в началото. Параметрите на функцията * font.render * са текстът, който трябва да бъде показан, логическата стойност, която определя дали да нарисувате по-хубави линии (т.е. използвайте така наречената техника на сглаждане) и цвета, в който ще бъде текстът написани, в този ред.Втората стъпка е същата като при показване на всяко готово изображение - показваме изображението, получено в предишната стъпка, в избраната от нас позиция. За да изчислим позицията, можем да използваме размера на изображението според нуждите (като в примера).
Задачи - неонови знаци¶
Сигурно сте виждали светещи знаци на неонова тръба. Те привличат вниманието чрез включване и изключване на различни групи букви в определен повтарящ се ред. Следват няколко примера, вдъхновени от такива мигащи знаци.
Мигащ текст: Напишете програма, която показва мигащ текст, подобно на примера по-долу (бутон „Play Task“)
Можете да промените текста, неговия цвят и размер, шрифт, честота на включване / изключване или нещо друго, ако желаете. Ако искате да имитирате нашата програма възможно най-близо, тя използва букви от тип “Arial”, размер 80 и показва текст във всеки втори кадър, центриран, с 3 кадъра в секунда кадър.
Съвет: За глобалните променливи, които описват сцената, една логическа променлива е достатъчна, за да каже дали даден текст трябва да бъде показан или не. Ще променим стойността на тази променлива във функцията new_frame(), така че тя да има стойност от True във всеки втори кадър.
Добавяне на букви: Сега, опитайте да имитирате този пример. В първата рамка се показва само първата буква и след това с една буква повече във всеки следващ кадър, докато всички букви се покажат. Следва един кадър, който не показва нищо, след това три кадъра с всички букви се показват и след това всичко се повтаря. Честотата на кадрите на нашата програма е 2 кадъра в секунда.
Съвет: Ето някои коментари, които могат да помогнат за решаването на проблема
От описанието (и като наблюдаваме примера) можем да заключим, че пълният цикъл съдържа четири кадъра повече от броя на буквите в текста.
Можем да определим размера, от който се нуждаем прозорецът ни, да се основава на дължината на текста, както в предишния пример.
Текстът винаги се показва на една и съща позиция (горният ляв ъгъл на текста е един и същ). Затова е достатъчно да се изчисли позицията веднъж, в основната част на програмата.
Можем да използваме глобална променлива на брояча на рамки и въз основа на нейната стойност да определим дали и каква част от текста трябва да се показва с помощта на командата if във функцията new_frame().
Единични букви: В този пример първо всяка буква се показва поотделно и след това всички букви се включват и изключват 3 пъти. Можете ли да копирате това поведение?
Съвет: Позициите на дисплея на отделните букви са (0, 0), (50, 0), (100, 0), (150, 0) и т.н. Броят на кадрите в един цикъл е 6 плюс броя на буквите в текста. Останалите идеи са много подобни на тези в предишните примери.
Местещи се букви: Този пример е различен, защото буквите се местят. Опитайте се да го разгдаете.
Съвет: След като формирате изображение от дадения текст, задачата става много подобна на задачата с движещата се кола.
И накрая, ако желаете, можете да направите неонов знак по ваш собствен дизайн тук.