
一個文本顯示庫圍繞著一個標籤,隨著時間的流逝,效果和样式都會隨著時間的流逝而打印。
換句話說,這為libgdx中的文本渲染帶來了更多功能。
這是什麼樣的?有點像這樣...
也許像這樣...

如果您寧願觀看視頻也不願閱讀本文,Raymond“ Raeleus” Buckley製作了一個涵蓋大多數Textratypist的視頻!它涵蓋了該文件所沒有的一些內容,例如使用皮膚作曲家,因此無論如何,這都是一個好手錶。
這裡有一個“普通”標籤,形式是Textralabel的形式,它的作用幾乎與scep2d.ui中的標籤完全一樣,但允許下面涵蓋的樣式。不過,很多用法可能更喜歡打字標籤!
TypingLabel是一個相當普通的場景2D.UI小部件,並擴展了Textralabel。但是,除非被告知要跳過,否則它一次將字母放在屏幕上。這是許多較舊的文本遊戲中發現的一種懷舊效果,看起來打字機以比一定速度較慢的速度張貼每個字母。
是的,它具有超過打字機模式!文本可以掛在上方,然後插入到位。它可以在長波中上下跳動。它會動搖和顫抖,好像病了。它可以用不同的顏色眨眼,在兩種顏色之間平穩地移動,或者穿過整個彩虹。很多選擇;很多樂趣。效果幾乎與打字標籤中的效果相同,但是有一些變化和增加。您可以查看Textratypist Wiki以獲取更多信息。
截至0.10.0,有許多新效果。震動,螺旋,旋轉,人群,收縮,出現,心跳,旋轉木馬,鱗片,鱗片,旋轉,旋轉,鏈接,鏈接,鏈接,觸發器,造型師,大砲,海洋,濺射和瞬間都是Textratypest的新手(不是打字標籤)。您可以在Textratypist Wiki的令牌頁面上查看使用說明和示例GIF。這些效果中的大多數都利用了效果的平滑縮放和旋轉選項,可以從Textratypist 0.5.1開始使用。有些使用鼠標跟踪,新的0.7.0,例如鍊接僅響應單擊一系列文本。
即使在不需要打字效果的地方,您也可能需要創建TypingLabel S,因為TextraLabel無法處理任何效果。您可以在類型標籤上調用skipToTheEnd()或(以0.7.0及以上)在其他類別上調用(以0.7.0及以上),以允許使用TypingLabel用於具有效果的靜止文本。
也存在各種標準令牌,這些代幣可以操縱打字效果,可變替代品和其他有用的東西:
{WAIT=f}導致打字效果暫停並等待f秒,作為浮子。{SPEED=f}更改鍵入典型字形所需的時間,從默認值為0.035到f 。{SLOWER}使所有字形都需要2倍的鍵入。{SLOW}使所有字形都需要1.5倍的鍵。{NORMAL}使所有字形都以正常的1倍的形式輸入。{FAST}使所有字形的鍵入為0.5倍。{FASTER}使所有字形的鍵入為0.25倍。{NATURAL=f}使字形或多或少地需要鍵入時間,否則與{SPEED=f}相同。{COLOR=s}更改文本的顏色;這有很多選擇,因此您可以擁有“深灰色粉紅色”。{STYLE=s}更改文本樣式(請參見下文);這有很多選擇。{SIZE=f}更改文本的大小(以25%的增量為25%);這需要F的百分比從0到375。{FONT=name}通過查找name來更改字體,如果有fontfamily。{CLEARCOLOR}將文本顏色設置為默認顏色,該顏色通常是白色的。{CLEARSIZE}將大小設置為100%。{CLEARFONT}將字體設置為原始字體(不使用fontfamily)。{ENDCOLOR}將文本顏色設置為默認顏色,該顏色通常是白色的。這與{CLEARCOLOR}相同。{VAR=name}被與變量name關聯的任何字符串所取代。{IF=name;choice0=cat;choice1=b;=default}檢查變量名,並將其與令牌中的每個選擇進行比較。name的值等於選擇,則令牌將被選擇值(例如cat所取代。default值。{EVENT=name}觸發一個事件,當打字到達這一點時,將name發送到TypingListener。{RESET}將所有格式化和速度設置為其初始值的更改。label.setDefaultToken()可用於更改初始值,因此文本默認值為某些不同的設置。{SKIP=n}以打字效果跳過,立即顯示n字符。效果默認使用捲曲括號,但是如果捲曲括號不是文本的好選擇(例如在I18N文件中),則可以將[-EFFECT]用作等效的{EFFECT} 。
該庫擴展了原始打字標籤可以做的事情 - 它允許樣式應用於文本,例如大膽,下劃線,傾斜,上標等。與樣式相關的是比例更改,它們可以在不更改字體的情況下縮小或擴大文本,以及“ Font family”功能。可以將字體分配給其他字體和名稱的“家族”,用於指代它們;這就像正常樣式一樣,但實際上改變了字體用於繪製的內容。完整的樣式列表很長,但不像效果令牌那樣詳細。您可以在[*]之類的方括號中使用libgdx顏色標記之類的樣式啟用樣式,或(如果在TypingLabel中使用標記),則可以使用{STYLE=BOLD}來執行同樣的事情。標籤和样式名稱都不敏感,但顏色名稱對大小寫。方形托架語法主要使用標點符號,並受到Markdown語法的啟發(Github使用了其他位置)。
在下面的列表中,每個條目看起來像:
[*]切換粗體模式。可以使用樣式名稱* , B , BOLD , STRONG 。
這意味著您可以始終使用[*]打開或關閉BOLD模式,在打字標籤中,您還可以使用對案例不敏感的語法{STYLE=*} , {STYLE=B} , {STYLE=BOLD}或{STYLE=STRONG}來做同一件事。
樣式的完整列表和相關的方架標籤:
[]刪除了對樣式/顏色/格式的最後更改,儘管它對打字標籤效果沒有任何作用。[]在libgdx bitmapfont標記中的作用一樣,但不僅僅是顏色的作用。[ ]將所有樣式/顏色/格式和效果重置為初始狀態。[]更改為新[ ] 。[(label)]暫時將當前格式狀態存儲為label ,因此可以在以後重新應用。label可以是任何字母數字字符串。它可能不應該有空間,但可以強調。[ label]如果有一個格式,則將存儲為label的格式化狀態(如果有)。[*]切換粗體模式。可以使用樣式名稱* , B , BOLD , STRONG 。[/]切換斜模式(如斜體)。可以使用樣式名稱/ , I , OBLIQUE , ITALIC 。[^]切換上標模式(並關閉下標或中文模式)。可以使用樣式名稱^ , SUPER , SUPERSCRIPT 。[=]切換Midscript模式(並關閉上標或下標模式)。可以使用樣式名稱= , MID , MIDSCRIPT 。[.]切換下標模式(並關閉上標或中標模式)。可以使用樣式名稱. , SUB , SUBSCRIPT 。[_]切換下劃線模式。可以使用樣式名稱_ , U , UNDER , UNDERLINE 。[~]切換罷工模式。可以使用樣式名稱~ , STRIKE , STRIKETHROUGH 。[!]切換所有上限模式(替換任何其他情況模式)。可以使用樣式名稱! , UP , UPPER 。[,]切換所有較低的案例模式(替換任何其他情況模式)。可以使用樣式名稱, LOW , LOWER 。[;]切換大寫每個單詞模式(替換任何其他情況模式)。可以使用樣式名稱; , EACH , TITLE 。[%DDD] ,其中DDD是從0到375的百分比,將文本縮放到該倍數。可以與{SIZE=150%} , {SIZE=%25}或類似地一起使用, {STYLE=200%}或{STYLE=%125} 。刪除任何特殊模式。[%]自身將文本設置為默認的100%比例,並刪除任何特殊模式。可以與{STYLE=%}一起使用。[%?MODE]刪除規模並設置特殊模式;模式在下面列出。[%^MODE]刪除比例並在與小型蓋子模式的同時設置特殊模式;模式在下面列出。[@Name] ,其中名稱是該字體的family變量中的鍵/名稱,將當前字體切換到命名的字體。可以與{STYLE=@Name}一起使用。[@]自己重置該字體的字體,忽略了其家庭。可以與{STYLE=@}一起使用。[#HHHHHHHH] ,hhhhhhh是Hex RGB888或RGBA8888 int int顏色,會改變顏色。這是一個普通的{COLOR=#HHHHHHHH}標籤。[COLORNAME] ,其中colorname是一個顏色名稱或描述,將在外部查找,會改變顏色。ColorUtils.describe()一起查找了coRorname,它試圖從Palette上找到任何顏色,並且還允許描述顏色或簡單更改的混合物,例如“輕”或“沉悶”。Colors類中的所有upper_case名稱,還包含大約50個其他小寫顏色名稱(來自彩色GDX)。Palette 。[RED] , [green yellow] , [light blue] , [duller orange] , [darker rich BLUE lavender] , [pale pink orange]和[deeper green navy] 。Font的setColorLookup()方法與您自己的ColorLookup實現一起使用,以在此處完成您想要的工作。| ,它允許使用包含標點符號的名稱查找顏色。例如, [|;_;]會查找一種稱為;_;的顏色; ,“悲傷的顏色”,不會像[;]那樣。ColorLookup可能不會, ColorLookup.INSTANCE ,它在libgdx colors class class class class class classim clastim中均以colorlookup。{COLOR=SKY} (顏色可以立即處理)或描述,例如{COLOR=lighter orange-red} ,甚至在{GRADIENT}之類的標籤中。[+region name] ,其中區域名稱是從註冊的紋理圖中的紋理雷管的名稱,不會改變樣式,但會與文本一起在線產生紋理素。KnownFonts.addEmoji()一起使用,將3000多個Twemoji圖標添加到字體中。[+saxophone]和[+?]每個都會顯示一個薩克斯管圖標。[+call me hand, medium-dark skin tone]和[+??] 。KnownFonts.addGameIcons() ,它添加了game-icons.net系列中的圖標。這些使用相同的語法: [+crystal-wand] 。[-SOME_EFFECT]等同於在SOME_EFFECT周圍使用捲曲括號;注意添加的破折號。可以用來代替縮放的特殊模式是:
black outline或blacken ,可以與樣式名稱BLACK OUTLINE或BLACKEN一起使用。white outline或whiten ,可以與樣式名稱WHITE OUTLINE或WHITEN使用。shiny ,可以與樣式名稱一起使用SHINY , SHINE或GLOSSY 。drop shadow或shadow ,可以與樣式名稱SHADOW , DROPSHADOW或DROP SHADOW一起使用。error ,可以與樣式名稱ERROR , REDLINE或RED LINE一起使用。Font.PACKED_ERROR_COLOR更改顏色。warn ,可以與樣式名稱一起使用WARN , YELLOWLINE或YELLOW LINE 。Font.PACKED_WARN_COLOR更改顏色。note ,可以與樣式名稱NOTE , INFO , BLUELINE或BLUE LINE一起使用。Font.PACKED_NOTE_COLOR更改顏色。jostle ,可以與樣式名稱JOSTLE , WOBBLE或SCATTER一起使用。[%?]一起使用。small caps ,可以與樣式名稱SMALLCAPS或SMALL CAPS一起使用。[%^]一起使用。它不能與[%?small caps]語法一起使用;它需要一個男人。小帽模式可以與其他任何模式一起使用,除了Jostle,通過更改%?到%^ 。除此之外,沒有兩種模式可以同時處於活動狀態,並且不能同時使用縮放模式。
請注意,模式使用略有不同的語法來避免與顏色名稱混淆。當使用方括號時,此處在下箱中給出的每個名稱都應在%?大多數情況下(小帽子和搖擺很特別)。這意味著要啟用紅線模式“錯誤”,您可以使用Square-Gracket標籤[%?error] 。如果使用curly-brace標記進行TypingLabel,則將使用上案例中給出的名稱,並可以像其他樣式名稱一樣使用它們: {STYLE=ERROR} 。如前所述,小帽子模式是特殊的;通常使用[%^small caps]啟用它,但也可以通過[%^]啟用,並且還可以與其他模式混合,而不是通過更改正常%?到%^ 。每當小帽子處於活動狀態時,方形支架標籤都會使用%^而不是%? 。爭吵模式也很特別;通常以[%?jostle]啟用它,但也可以單獨使用[%?]啟用。爭吵不能與小帽子混合。
特殊模式在語法方面有點過於復雜,因為我無法使用標點符號。通過[WHITE][%?blacken]Outlined![%][GRAY] ,可以實現圍繞白色文本的黑色輪廓的常見示例。 (該示例使用GRAY作為普通顏色,但是您也可以使用[ ] [ ]顏色重置為在Layout或持有它的標籤上配置的任何基本顏色。
使用{VAR=ZOMBIE}urgh, brains...{VAR=ENDZOMBIE}語法:
{VAR=FIRE}將以下文本更改為具有烈火的顏色。您可以用{VAR=ENDFIRE}結束它。{VAR=SPUTTERINGFIRE}更改以下文本以具有烈火的顏色,並像彈出火焰一樣調整大小。您可以用{VAR=ENDSPUTTERINGFIRE}結束它。{VAR=BLIZZARD}將以下文本更改為在風中動搖,並使用冰冷的顏色,白色至淺藍色。您可以用{VAR=ENDBLIZZARD}結束它。{VAR=SHIVERINGBLIZZARD}將以下文本更改為在風中動搖,並使用冰冷的顏色,白色至淺藍色,此外,它將隨機使字形“發抖”,好像冷一樣。您可以用{VAR=ENDSHIVERINGBLIZZARD}結束它。{VAR=ELECTRIFY}將以下文本更改為暗灰色紫色,並隨機使字形變成淺黃色並振動。您可以用{VAR=ENDELECTRIFY}結束它。{VAR=ZOMBIE}將以下文本更改為“深色橄欖鼠尾草”(暗灰色綠色),使字形慢慢且隨機地慢慢旋轉,使字形下降並隨機恢復,並且當它們首次出現時,出現的Glyphs會從基線中出來(就像從墳墓中脫落)。您可以用{VAR=ENDZOMBIE}結束它。這些定義在TypingConfig.initializeGlobalVars()中,您可以以完全相同的方式定義自己的組合。例如, FIRE被定義
TypingConfig . GLOBAL_VARS . put ( "FIRE" , "{OCEAN=0.7;1.25;0.11;1.0;0.65}" );
TypingConfig . GLOBAL_VARS . put ( "ENDFIRE" , "{ENDOCEAN}" ); OCEAN效應不在乎它使用的顏色。它僅定義瞭如何在這些顏色之間過渡的大概模式。這意味著,違反直覺,最好用OCEAN而不是GRADIENT實施FIRE 。不過,使用FIRE名稱可能比OCEAN更可取,因此出於這個原因,全球VAR在這裡。
使用標籤存儲格式狀態的能力可以使來自多個來源的標記字符串更複雜。您可以將諸如font.storeState("spooky", "[/][darker gray][@?blacken]")之font的東西稱為永久存儲格式化狀態(斜灰色的灰色文本,黑色輪廓),然後可以通過輸入[ spooky] (請注意開放空間)將其重置到該狀態。您還可以創建一些可插入的文本,該文本在寫入任何內容之前先存儲當前格式,並在完成編寫後重置格式。它將使用"[(previous)][ ][BLUE][^][[citation needed][ previous]"類的東西 - 如果將此字符串插入較大的文本塊的中間,它不會改變周圍的格式,但是將使用藍色的超級字樣來用於其自己的文本(不可或缺的[citation needed] ),並且不會使用周圍的任何一個格式化的格式化。如果您具有具有相同標籤的多個狀態商店標籤,則與該標籤關聯的值會隨著這些標籤而變化。您可能需要使用獨特的標籤來避免意外更改另一個標籤的值,但這通常不需要。
Textratypist大量使用其新Font類,這是對LibGDX的Bitmapfont的全面大修,與其祖先基本上沒有代碼。字體具有多種質量,它比BitMapfont具有更多的功能,主要源自它如何存儲(並使)Glyph映像作為地圖中的紋理元素。只要將您的圖像添加到字體的mapping中,只要它們將必要的信息用作文本字形,然後將這些圖像放入文本中。作為一個例子,這用於實現表情符號,可用於自定義圖標和表情符號。
Textratypist使用SDF或MSDF支持標準位圖字體和距離字段字體。 TypingLabel將自動啟用適當的距離字段類型所需的陰影程序(如果需要的話),並在渲染本身後將其禁用。您可以通過在字體上手動調用Font.enableShader(Batch)方法來更改此行為,並使用其Batch.setShader()方法將批處理更改回您選擇的其他ShaderProgram(通常,您只需在此處通過NULL即可重置Shinder)。請注意,需要使用Font.resizeDistanceField()或調用resizeDistanceField()的任何其他幅度方法的方法,需要告知SDF和MSDF字體的更改。自1.0.0以來,您通常想使用接管Viewport的過載;如果您沒有Viewport ,則不需要超載。您當前正在渲染的每個距離字段字體都需要在ApplicationListener.resize()中調整窗口大小時調整其距離字段。
KnownFonts中有幾種預配置的字體設置;每個字體Getter的文檔說明需要哪些文件才能使用該字體。舊的.fnt文件已移動到這裡。您可以在此處看到所有已知字體的預覽和描述。自1.0.0版以來,對於許多字體而言,擁有已知字體並不是必需的,因為現在由同一工具(Fontwriter)製成.dat字體,並且傾向於在開箱即用的外配置正確配置。各種字體類型並不令人驚訝,但這應該是一個很好的起點。值得注意的一件好事是KnownFonts.getStandardFamily()方法,它需要在您的資產中具有16個字體,但自然可以讓您使用[@Medieval]語法在這16個字體中切換(中世紀是它知道的名稱之一,在這種情況下為“ Kingthings Foundation”)。
此處的字體使用.DAT文件擴展名(這僅表示它的二進制數據沒有特定的文件格式)。它們是Fontwriter生產的較大的.json字體的壓縮版。它們使用的壓縮是與GWT兼容的,因此這些.DAT文件可以在任何平台LibGDX目標上使用。您仍然可以不用問題就可以使用舊的.fnt文件,並且在此處仍然使用某些.fnt文件(主要用於像素字體)。通常,每種字體都需要一個.png,儘管它可以在地圖集中。
每種字體的許可證文件都包含在同一文件夾中,此處的knownFonts中。檢查了此處提供的所有字體,以確保其許可證允許商業使用,而所有這些字體都可以使用。大多數需要歸因;檢查許可證以獲取詳細信息。
NOWN FONTS還包括其他幾種配置現有字體實例的方法,通過在他們所知道的字形中添加紋理圖。這包括一些現有的圖標和...表情符號!
Twemoji圖標也存在於32032圖像超過32x32圖像中。 KnownFonts.addEmoji()可以用字體註冊它們,因此上面提到的[+name]語法可以繪製表情符號內聯。同樣,從game-icons.net出現了超過4000 60x60圖標的地圖集,而KnownFonts.addGameIcons()可以用字體註冊它們。 Twemoji和game-icons.net地圖集都不能同時以一種字體註冊;他們可以安全使用的Unicode部分中沒有足夠的自由空間。解決此問題的一種方法是使用Fontfamily功能,並僅為圖標添加字體,或者僅為表情符號為家人添加字體。有一種現有方法; KnownFonts.getGameIconsFont()可讓您獲得僅顯示遊戲的字體,並在其使用情況下進行一些儀式。 [@Icons][+rooster][@]是一個快速示例,說明如何切換到getGameIconsFont()生成的字體,繪製圖標和切換。
這裡有Twemoji的預覽,帶有表情符號字符和名稱以查找每個圖像。同樣,這裡有game-icons.net圖標的預覽,只需查找每個圖像所需的名稱。請記住,由於Game-icons.net圖像是純白色具有透明度的純白色,因此您可以使用標準[RED] , [light dull green]或[#0022EEFF]語法的任何顏色染色它們。
twemoji和game-icons.net映像的許可證文件包含在knownFonts旁邊,旁邊是字體的許可證文件。儘管Twemoji對歸因有簡單的要求,但Game-Icons需要歸因於許多個人貢獻者。請參閱列表的本文檔的結尾,您可以並且應該複製以將其歸功於所有人。
還有來自OpenMoji的線路表情符號,以及同一表情符號的全彩版本。這些可能更適合某些項目的藝術風格。
您可以使用Font.drawGlyph()或Font.drawGlyphs() 。 TypingLabel的自定義效果也可以單獨更改任何字形的旋轉,以及其在x和/或y上的位置和比例。您可以使用其setRotation()方法旋轉Textralabel或TypingLabel旋轉,並且現在旋轉將對具有背景和/或具有不同對齊設置的標籤正確起作用。旋轉的原點可以在標籤中設置,並且整個標籤將圍繞該原點旋轉。
對於某些字體,您也可以自動生成盒裝字符和塊元素。這需要在ID 9608(Unicode Full Block索引, 'u2588' )的字體中存在一個實心的白色塊字符(任何大小,通常為1x1)。這還可以更好地保證連接正確連接的下劃線和撞擊字符,而在不弄髒兩個方面或連字符的情況下相互重疊。 Font嘗試在某些情況下啟用此功能,也可以使用參數設置,但是如果失敗,則可以返回使用下劃線和連字符的下劃線和連字符。 KnownFonts中的所有字體都配置為使用實體塊,或者是專門避免的,因為如果沒有它,字體會更好。請注意,如果您從libgdx BitmapFont創建Font ,則默認情況下甚至不會嘗試製作網格字形,因為bitmapfonts很少有合適的實心塊char。
對於實際用於此目的的框繪圖字符(不僅是下劃線或罷工),可以進行一些額外的配置。您可以將boxDrawingBreadth在Font上設置為某些乘數,以使盒繪製線更厚或更薄,而不會更改它們相互連接的方式。
各種功能允許此處進行額外的配置。如果您想要從粗體樣式中應用的額外空間,則可以將boldStrength設置為默認值1以外的一些值。您還可以設置obliqueStrength以更改傾斜文本所繪製的偏斜角度。可以改變各種效果的顏色; font.PACKED_SHADOW_COLOR可以更改以使用更暗,更輕,更不透明或更透明的陰影顏色。 font.PACKED_BLACK會影響黑色輪廓模式,而font.PACKED_WHITE會影響白色輪廓和閃亮模式。有類似的模式可以改變錯誤,警告和音符下劃線的顏色。所有這些顏色配置都適用於每個字體實例,因此您可以使用相同字體但使用不同顏色配置的兩個字體對象。
從0.4.0版本開始,有各種窗口小部件替換其Scene2D.UI對應物並將Label交換為TextraLabel ,從而使您可以在其中使用標記。小部件是ImageTextraButton , TextraButton , TextraCheckBox , TextraDialog , TextraLabel , TextraListBox , TextraTooltip和TextraWindow ,以及每個使用Typinglabel代替TypingLabel代替TextraLabel的替代版本,並具有其Typing 。
雖然尚未計劃在TextArea支持TextArea的同行,但尚未奏效。 TextraLabel默認支持多條線,並且可以替代一些用法。 TypingLabel也允許輸入跟踪,因此您可以使用它來製作可選的文本區域 - 請繼續閱讀!
輸入跟踪一直是自0.7.0以來使用它的TypingLabel和代碼的選項。這擴展為0.7.4,以允許使用label.setSelectable(true)選擇TypingLabel中的文本。您可以使用label.getSelectedText()訪問當前選擇的文本,也可以使用label.copySelectedText()直接複製它。當用戶完成單擊並在TypingLabel上拖動手勢(並且是可選的)時,也會觸發事件。您可以在TypingListener中收聽"*SELECTED" ,並在選擇後立即復製文本,或者僅在按下某些鍵時復制。使用輸入跟踪的其他有用功能包括{LINK}標籤,該標籤使一段單擊的文本鏈接到Internet地址, {TRIGGER} ,該鏈接{trigger},它觸發了單擊的事件,以及其他一些響應鼠標懸停( {ATTENTION} }, {HIGHLIGHT}和{STYLIST} )的標籤。這些僅適用於TypingLabel ,而不是TextraLabel ,因此您可能需要使用TypingLabel並調用skipToTheEnd()將其像對待它一樣對待它,就像恰好響應用戶輸入的文本,並且可以使用{RAINBOW}之類的動畫樣式。
您可以在普通的Scene2D.UI皮膚JSON文件中閱讀具有LibGDX的Skin類, FWSkin (或擴展它的類之一)的變體,並且這樣做將加載正常的scep2d.ui風格和專業的TextrateSt Styles。專業樣式通常僅不同,因為它們使用Font而不是BitmapFont ,並且在此處都嵌套在Styles類中。擁有專業風格意味著可以在更多的地方重複使用一種字體,而不必製作許多bitmapfont副本(有時是每個小部件)……在TexTratypist 1.0.0之前就是這種情況。通常,從皮膚變成FWSKIN的變化很簡單。以前這樣的代碼:
Skin skin = new Skin ( Gdx . files . internal ( "my-skin.json" ));之後會更改為:
FWSkin skin = new FWSkin ( Gdx . files . internal ( "my-skin.json" ));您也可以將FWSkin分配給Skin變量,這是最兼容的選擇,因為您的皮膚變量只是正常的Skin 。 FWSkin中有一些便利的方法可以更輕鬆地處理距離字體字體,因此在可能的情況下使用FWSkin是個好主意。
你想知道為什麼被稱為FWSkin ?好吧,它可以從.fnt文件(僅針對BitmapFont需要皮膚配置)加載字體和BITMAPFONT實例,並且可以對結構化的JSON字體進行相同的操作,該字體通常由FontWriter或FW創建。 FWSkin的初始目的只是從.fnt和.json/.dat字體文件中加載,但其範圍擴大到包括新樣式。
如果您習慣於使用條紋,則可以替換FWSkin所做的事情和Stripe可以做到的freetype處理。這是在單獨的存儲庫中可用的額外的FreeTypist依賴性。它允許在皮膚JSON中使用"com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator"來配置freetype,這通常是由皮膚作曲家生產的。您可以使用Skycomposer生產的正常皮膚並與條紋兼容,並將其與Freetypist一起使用。
您可以通過Gradle獲得它,但是可以將Freetypist中此文件夾中的兩個文件中的兩個文件複製到您自己的代碼中,這可能是一個更好的選擇。無論您如何依賴弗雷特醫師,它都需要對弗雷特(Freetype)(包括適當的“平台”依賴關係)和Textratypist(當前1.0.0)的依賴性。當一般而言,當功能添加到FWSKIN和Textratypist中時,也應更新Freetypist。
您可能想與Gradle一起獲得Textratypist! LIBGDX項目的核心模塊的依賴性看起來像:
implementation " com.github.tommyettinger:textratypist:1.1.0 "這假定您已經依賴libgdx; Textratypist取決於版本1.12.1或更高版本。由於libgdx中的工具提示代碼發生了一些破壞的變化,因此在Textratypist 0.5.0中添加了1.11.0的要求。 1.12.1的要求在1.0.0中添加,因為某些情況可能會發生變化,但是1.12.1(或後續快照版本)應該很容易更新到。
如果使用GWT,則應該兼容。它需要HTML模塊中的這些依賴項:
implementation " com.github.tommyettinger:textratypist:1.1.0:sources "
implementation " com.github.tommyettinger:regexodus:0.1.16:sources "GWT還需要GDXDEFINITION.GWT.XML文件(自版本0.7.7)中需要此:
< inherits name = " regexodus.regexodus " />
< inherits name = " com.github.tommyettinger.textratypist " />在版本0.7.4和更早的版本中,您將是兩個依賴項的較早版本(請注意,這是一個舊版本):
// OLD VERSION
implementation " com.github.tommyettinger:textratypist:0.7.4:sources "
implementation " com.github.tommyettinger:regexodus:0.1.13:sources "並將使用這些GWT繼承:
<!-- OLD VERSION -->
< inherits name = " regexodus " />
< inherits name = " textratypist " />Regexodus是與GWT兼容的常規表達庫,用於內部匹配一些複雜模式。除了libgdx本身,Regexodus是該項目唯一的依賴性。 GWT繼承更改為Textratypist和Regexodus,因為事實證明使用默認軟件包可能會導致實際問題。
此存儲庫的發行部分中至少有一個版本,但是您仍然鼓勵您使用Gradle來處理此庫及其依賴關係。
您也可以使用Jitpack獲得當前的提交,如果發行版之間的跨度很長,這可能很方便。當前的GDX-LIFTOFF和GDX-SETUP項目都可以使用Jitpack依賴項,而無需任何額外的配置。您將在核心模塊中使用此依賴關係:
implementation ' com.github.tommyettinger:textratypist:de5a52f340 '您可以將de5a52f340更改為https://jitpack.io/#tommyettinger/textratypist的“提交”選項卡中的任何提交,但是您不應該使用-SNAPSHOT不需要它就可以更改它,而不是您想要的!
您還可以使用以下方式依靠訓練師:
implementation " com.github.tommyettinger:freetypist:1.1.0 "(現在,Freetypist 1.1.0使用Textratypist 1.1.0。)
而且,如果您針對HTML並以某種方式使用freetype,則將使用此Gradle依賴性:
implementation " com.github.tommyettinger:freetypist:1.1.0:sources "這繼承了行:
< inherits name = " com.github.tommyettinger.freetypist " />Freetype在GWT上無法在盒裝外部工作,儘管有]。
Textratypist的某些部分的行為與Scene2d.ui和Rafa Skoberg的打字標籤中的同行不同。
一個很大的怪癖是, Font和BitmapFont在如何解析.fnt文件上有一些核心分歧,並且使用new Font("MyFont.fnt")創建Font的結果可能與new Font(new BitmapFont(Gdx.files.internal("MyFont.fnt"))) 。 BitmapFont在填充信息中讀取(並且根據BMFont規格進行錯誤的操作),其中Font完全忽略了填充信息。已經製作了一些.fnt文件,因此它們通過使用填充物在libgdx中看起來正確,但是它們在沒有填充的情況下看起來會錯了。 Font通過允許對所有字形的X和Y位置進行手動調整(通常需要調整為正值或負值)以及字形的寬度和高度(這些頻率較低,但可以幫助伸展或擠壓字體)來妥協。從BitMapfont製成的字體可能需要一些調整才能與其他小部件正確排列。如果您加載Atlas(例如使用addEmoji()或addGameIcons() ),則可能需要調整OffsetX,Offsety和Xadvance參數,並且通過BitMapFont Vots製造的字體直接由一個.fnt文件製成的字體,調整可能會大不相同。由於0.8.1, Font可以解析.fnt格式的擴展版本,該格式允許為任何空間指標浮動,而不僅僅是INT。現在和現在都沒有文件使用它,因為Fontwriter生成的結構化JSON文件都在內部用於所有內容。
如果您從文件加載文本並顯示該文本,有時可以從代碼中創建該文本或將其加載到其他計算機上。這只有在文件實際不同的情況下才會發生 - 也就是說,在Windows計算機上使用GIT或n或Linux機器上的GIT檢查時,文件的線結尾使用rn 。 Textratypist使用r來標記可以重新包裝的某些“軟”線路斷裂,而n則用於“硬”線路斷裂,必須始終創建新的線路。在每個線路休息中,存在rn通常顯示為兩行。適用於許多項目的簡單解決方案是將.gitattributes文件包含在您的項目根中,例如這裡的一個。這可以用來強制所有文本文件或具有特定文件擴展名的所有文本文件以使用LF模式,其中只有一個n用於線路斷路。仍然建議使用CRLF模式保存.bat文件,並使用rn使用,以兼容。從一開始使用.gitattributes是一個好主意,應該在所有當前OS上保持文件完全相同。較舊的Windows程序(例如Windows 7的記事本)無法讀取n行結尾,但是使用最近的Windows分發的版本可以輕鬆使用n ,幾乎所有面向代碼的文本編輯器也可以很容易地使用。
可以將顏色寫出為十六進製字符串,例如#FF7700或#9783EDFF ,用名稱給出,也可以使用簡單的語法進行描述。可以通過色相,輕度或名稱訂購(案例敏感!)名稱的完整列表。您可以選擇其中一個或多個顏色名稱,可選地添加形容詞,例如“ Light”或“枯燥”,並獲得將命名顏色混合併使用形容詞的更改的顏色。這裡有一些棘手的事情:
Colors類,是ALL_CAPS ,有時帶有下劃線。其他名稱來自彩色gdx,是lowercased單詞。在少數情況下,如果您使用all_cap或使用小寫( ORANGE和orange是一個很好的例子),則相同的單詞是指不同的顏色值。ColorUtils.unevenMix()混合。您可以在任何顏色名稱之後都有一個數字,該數字為混合而分配了該顏色的重量。較高的數字會導致其先前的顏色對結果產生更大的影響;允許任何非負整數。0x00000100 ),或完全透明的非常深藍色,它被用作佔位符,因為視覺上與透明的黑色相同。如果當時顏色最終呈現為256,則可能會被忽略。addColor()方法向Palette添加顏色。這使另一個顏色名稱可用,但不會追溯使該顏色名稱正確解析。您可能必須再次調用諸如Font.markup()之類的方法,因此最好在使用顏色之前更改顏色。如果您遇到TypingLabel令牌的問題,並且使用Proguard,則該工具的配置需要一個小的添加:
-keep class com.github.tommyettinger.textra.** { *; }
可能會有更嚴格的版本,但至少,出於反射原因,需要保留AS-IS com.github.tommyettinger.textra.effects軟件包。您可能還需要確保保留com.github.tommyettinger.textra.Effect類。保留所有的Textratypist應該完全適合混淆目的,因為這是一個開源庫,但確實為最終罐子或APK的大小增加了少量。現在,如果您不包括任何資產,那似乎是202 kb,所以我不必擔心。
距離字體字體可能不值得調整每個字體的距離字段的麻煩,但是它們的確比標準字體看起來要好得多。實際上,使用標準字體可以更好地調整小型至中等尺寸的調整。當您不需要大的文本時,最好的方法似乎是使用沒有SDF或MSDF的大型標準字體紋理,並根據需要將其縮小。自1.0.0以來,所有字體都支持表情符號。較舊的版本不支持MSDF字體中的表情符號。
如果您碰巧使用Tommyettinger的Textratypist庫和Tommyettinger的彩色GDX庫,則可能會遇到各種問題。 ColorfulBatch似乎是不兼容的,因為它使用了每個Vertex的額外屬性(與SpriteBatch相比),但是它已經確實使其兼容它而沒有更改。顏色描述可以通過Tolleful-GDX的SimplePalette和ColorUtils.describe()來完成,但是描述確實需要使用RGBA顏色空間來按預期工作。來自彩色GDX的Shaders類中的替代性著色器通常無法與此處的已知字體和中性顏色的默認值正確使用(這裡,白色是中性顏色,但在大多數允許閃電的著色器中,灰色為50%是中性顏色)。所有這些的最簡單解決方案是使用普通的香草SpriteBatch進行TexTratypist渲染,以及您想要的彩色GDX渲染所需的ShaderProgram或ColorfulBatch 。
使用帶有其他屬性的自定義Batch類的遊戲不會使用Font開箱即用,但是它提供了一個擴展點,可以允許子類可與Batch需求的任何屬性一起運行。覆蓋Font.drawVertices()允許處理異常批處理的靈活性,並且通常可以將自定義字體保持不變的其他drawVertices()覆蓋。如果您僅通過調用super(font);來實現Font的複制構造函數; ,並且仍然允許它進行字體參數,然後您可以快速從知名人士中獲取字體並使用子類副本進行副本。 Font.drawVertices()的javadocs詳細介紹了20個浮子通過數組傳遞給drawvertices的每一個;自定義批次可能具有24或更多的浮子,因此需要將20個現有的浮子放在其批次期望的位置。
有時,您可能需要啟用或禁用某些字體的整數定位,以避免與GPU相關的奇怪的視覺偽像,而GPU相關的視覺偽像似乎只發生在某些NVIDIA GPU上。當這種情況發生時,字形可能以似乎隨機選擇的方向出現半像素左右。它看起來很糟糕,而且整數位置代碼至少應該大部分時間都可以解決。如果您使用跨越多個像素的世界單元,則整數位置無法正常工作,但是此錯誤是一個絕對的謎,並且在集成的GPU上也根本不會發生,並且在AMD GPU上可能不會發生。我也不知道它在蘋果矽圖形上的表現。任何想嘗試調試此問題的人總是可以使用“問題”選項卡! 0.7.x版本中引入的一些修復程序可能已經消除了此錯誤,但是我對它總是不消失並不特別樂觀。
GDX-Freetype擴展程序會產生BitMapfont輸出,您可以在沒有任何問題的情況下從BitMapfont創建字體。但是,Freetype的“自動”暗示設置都比通過字體差異更糟,並且可以觸發上面覆蓋的GPU偽像。您可以選擇“輕微”,“中等”或“完整”,而不是“ Autoslight”,“ Automedium”或“ Autofull”提示,這使該字體看起來更加清晰,並避免GPU半像素扣除問題。我不知道為什麼會發生這種情況,但是由於可以在freetype生成器參數中設置暗示,或者(如果您使用此庫中的條紋或freetypist)將其設置在帶有"hinting": "Full" ,所以很難修復。
在0.7.5至0.9.0中,縮放,旋轉和整數位置存在一些已知問題。您可能會看到標籤在平穩旋轉時相對略微滑動與它們的背景相對較小,並且某些(通常很小)字體可能需要整數位置,以保持穩定的基線。在其中一些版本中,即使文本正確顯示給用戶,字體調試線也可能是不正確的。縮放率在0.7.8中有了顯著改善,調試線的處理也有所提高,但是旋轉仍然有一些微妙的錯誤。從0.8.0開始修復了一個錯誤,該錯誤以字體(例如表情符號)的量表不同,並且在字體與縮放縮放的字體混合時漂移。隨著比例的變化,同樣的錯誤也使普通字體漂移略有漂移。這也是固定的。背景顏色的位置和大小的位置和尺寸在0.8.2中有所改善,因此選擇文本不應像背景那樣掩蓋文本,並且表情符號應被其選擇背景完全包圍。沿線沿線的位置在縮放範圍時,以0.8.3的比例提高,以使縮放相對於線的中心而不是線的底部。其他一些代碼已經期望將縮放縮放為中心,因此這種更改通常會使縮放看起來更好。在0.9.0中,仍然可以設置整數定位,但無能為力。實際上,設置它會導致問題多於改進。如果沒有它,人們會認為需要整數位置(像素字體)的幾個字體實際上看起來更好。在0.9.0中,仍然存在一些旋轉問題,儘管當下降配置為極端值或有時其他指標時,這些問題大多發生。在旋轉文本中排列下劃線/罷工也是一個挑戰。
Word Wrap從定期進行中似乎打破,需要在不同的版本中修復。最近一次發生的時間為0.7.9,也影響了0.8.0,並在0.8.1中固定(我希望)。最近,另一個與包裝相關的錯誤被修復為0.8.3;這很少見,只有在存在某些效果時才影響打字標籤。
如果您期望它的行為與libgdx中的Label完全一樣,則還有其他問題。在這裡,即使單個單詞比TextraLabel或TypingLabel的寬度更長,我們也不會打破單詞。其原因是雙重的:首先,在沒有適當連字符邏輯的情況下打破單詞可以改變這些單詞的含義,其次,解決這可能是一大堆工作。我確實打算嘗試在一些近乎未來版本中默認使用此配置和匹配Label 。多個空格字符的單詞包裝行為在0.10.0版本中更改,現在應該是正確的。請記住,如果小部件(例如TypingLabel或textralabel)的scep2d.ui上下文中,當該小部件的尺寸是由scene2d.ui大小,通常是通過在桌上單元格中,或者有時是在容器中。您可能需要在表或容器中添加標籤,然後設置該單元格或容器的寬度和/或高度,以使包裹正確起作用。
一個可能開始使用0.9.0及以後開始發生的可能頻繁的問題(帶有簡單的修復)是,Textratypist現在需要Java 8或更高。所有現代桌面OS都支持Java 8,這已經是9年了。 Android支持Java 8(語言級別,雖然僅API)已有幾年了,並且較舊的版本可以使用“刪除”來翻譯更敬業的Java代碼,以與(很多)較舊的Android版本兼容。多年來,GWT也支持語言8級。 LibGDX的構建2.8.2允許使用Java 8功能,而2.11.0(替代的LibGDX後端支持)允許使用更多功能。 Robovm不支持Java 8中添加的任何新API,但從一開始就支持語言8。 Textratypist不使用Java 8中的任何API,但現在使用功能接口和方法參考。擁有這些功能使我們可以刪除一些基於反射的代碼,並且反過來有助於在反射有限的平台上使用,例如GWT和GRAAL本地圖像。 GWT以前能夠工作,但是Graal本地圖像將需要為使用TexTratypist的每個遊戲/應用程序添加很多配置。另一個問題是,如果Textratypist繼續針對Java 7的圖書館代碼,它將不會與Java 20或更高版本進行編譯,並且LTS Release 21已發布了將近一年。
如果您正在升級到Textratypist 1.0.0或更高版本,並且您根本沒有更改皮膚使用情況,那麼您可能會遇到一些錯誤。這些可以通過將Skin更換為FWSkin來快速解決,或者如果您使用了Freetypist的Stripe FreeTypistSkin 。還有一個用於AssetManager的FWSkinLoader ,Freetypist具有FreeTypistSkinLoader 。 FWSKIN允許加載新型的Scene2D.UI樣式,這些樣式重複使用字體實例,而不是經常製作新的字體。它還允許從.fnt,.json和.dat文件(其中.dat是此存儲庫使用的壓縮JSON格式)中加載bitmapfont和font對象,僅需要對skin.json中的bitmapfont進行配置。
如果您想製作自己的字體,則可以像往常一樣使用Hiero或Angel Code BMFont,但是現在您也可以使用FontWriter(儘管現在是僅Windows)。 fontwriter可以輸出SDF和MSDF距離字段字體以及標準的位圖字體,並且它始終確保處理文件已被處理(Textratypist)如何更喜歡它們(它們需要在較低的右下方使用一個小的白色正方形來用於塊繪圖和下劃線/踩踏式/踩踏式/踩踏,並具有某些特定的透明度更改,並使某些與Alpha的覆蓋物保持了一定的色彩。這些處理更改可以通過在Textratypist測試中運行BlockStamper和TransparencyProcessor來完成,但這是一個麻煩,因此首選使用FontWriter。它輸出.json和.dat字體文件以及.png紋理。您只需要.png文件和(.dat文件或.json文件),但是.dat文件較小,因此通常是首選。可以手工編輯.json文件,但是考慮到它的內部方式並不容易。
這非常緊密地基於Rafa Skoberg的打字標籤。根據其回購LICENSE的許可,但(幾乎無意識地肯定)在任何文件中都不包含任何許可證標頭。由於麻省理工學院許可證的唯一要求是將任何許可文本作為IS,因此該Apache許可的項目完全符合MIT。完整的MIT許可文本在文件typing-label.LICENSE 。該項目的Apache 2許可證在文件LICENSE中。 Apache許可證標頭也存在於此處的所有庫源文件中。 Apache許可證通常不適用於src/test/resources文件夾中的非代碼資源;單個字體在該目錄中存儲了自己的許可證。
Twemoji不是字體,因此最好單獨提及它。它已根據CC-BY 4.0許可,並需要歸因於Twitter(如果使用)。 Twemoji的歸因指南在這裡。 (該文檔仍然說Twitter,而不是X,據我所知,X不使用任何活躍的Twemoji團隊,所以...我會鏈接回Twemoji Repo,因此取決於他們)。
像twemoji一樣,game-icons.png也不是字體,它為該項目提供了很多貢獻者。因為該項目中的所有圖標都在一個PNG文件上,因此您必須將所有在CC-BY下獲得ART許可的貢獻者的信譽,而僅將所有貢獻者歸功於所有貢獻者,這可能是理想的選擇。該列表在許可證中。
OpenMoji也不是字體,但顯然具有CC-SA 4.0許可證,並且應歸因於OpenMoji項目來滿足按子句。任何繼續提供歸因的OpenMoji的用戶都應滿足SA條款。這裡沒有任何資產的非商業條款。
徽標是由Raymond“ Raeleus” Buckley製作的,並為該項目做出了貢獻。可以自由地用於任何目的,但是我要求它僅用於參考該項目,除非經過實質性修改。
哇,Raeleus確實為大量提供了幫助。通過在他的皮膚作曲家應用程序中測試Textratypist(發現了很多錯誤,大小),並就適當的Scene2D.UI佈局實踐(不容易獲得100%正確)提供建議,大型0.5.2釋放(以及之後的釋放)將不是今天沒有投入的情況。謝謝你!
感謝Fraudo幫助我逐步弄清楚我用背景和編寫大部分LabelRotationTest搞砸了旋轉。發行0.5.5可能仍會在沒有該幫助的情況下開發幾個月,因此要井井有條。
感謝LibGDX Discord的Piotr-J(邪惡),Mas Omenos和DMC,以真正徹底測試Textratypist。 IncongruityTest最初是Piotr-j的作品,它幫助我確定了哪些著名字體的界限信息不正確。 TableWrapTest緊密基於MAS Omenos的作品,對於找到包裝錯誤很有用。 DMC設法追踪了一個非常難以捉摸的前衛問題,該問題現在已在此readme.md中進行了記錄,並註意到並幫助調試我不知道人們已經在使用的代碼的各種問題。 Sanda Moen,Fourlastor,Tecksup和Siavash Ranbar幫助追踪了一些影響單詞包裹的瘋狂蟲子。感謝所有忍受著這些錯誤的人! Igorapplications幫助追踪了各種與SDF相關的錯誤,並指出功能(SDF字體中的全彩表情符號)是可能的,因此也要感謝!
當然,我必須感謝Rafa Skoberg在這裡寫了很多代碼!大約有2/3的效果幾乎純粹由Rafa純粹由Rafa純化,與他的作品相關的許多與打字標籤相關的代碼幾乎沒有變化,而且總的來說,他展示了LibGDX UIS僅通過製作初始代碼而可能是什麼。
感謝所有製作我們在這裡使用字體的字體設計師;通過使您的字體自由使用,您可以為依賴它們的人們提供出色的服務。
感謝Twitter慷慨地為開源世界貢獻了Twemoji;擁有廣泛的表情符號使它們更有用。請注意,由於這是Twitter的慷慨動作,因此發生在獲取/更改為“ X”之前。
感謝Game-Icons.net的許多貢獻者,為各地的遊戲開發人員生產了高質量的免費圖標。 game-icons.png中的圖標是由以下方式製作的:
(使用Textratypist的項目可以復制上述game-icons.png貢獻者遵守許可證的列表。)
再次感謝OpenMoji項目!這顯然是很多工作。 OpenMoji被許可為CC BY-SA 4.0。
還要感謝Noto字體和表情符號的開發人員!他們已獲得1.1許可。這裡的Noto Color Emoji還使用了MIT許可的表情夾項目中的數據來創建地圖集。