Etxt เป็นแพ็คเกจสำหรับการแสดงข้อความ Vectorial 1 ใน Golang ที่ออกแบบมาเพื่อใช้กับ EbitEngine ซึ่งเป็นเครื่องมือเกม 2D ที่ผลิตโดย Hajime Hoshi
ในขณะที่ EbitEngine รวมถึงแพ็คเกจ EBITEN/V2/TEXT/V2 แล้ว ETXT มีข้อได้เปรียบบางประการ:
font.Face ให้ดีสิ่งที่ etxt ไม่ได้ทำ:
หากคุณไม่คุ้นเคยกับข้อกำหนดและแนวคิดการพิมพ์ฉันขอแนะนำให้อ่านบทแรกของการประชุม Freetype Glyph; หนึ่งการอ้างอิงที่ดีที่สุดในหัวข้อที่คุณสามารถหาได้บนอินเทอร์เน็ต
พูดคุยน้อยลงและรหัสเพิ่มเติม!
package main
import ( "math" ; "image/color" )
import "github.com/hajimehoshi/ebiten/v2"
import "github.com/tinne26/etxt"
import "github.com/tinne26/fonts/liberation/lbrtserif"
const WordsPerSec = 2.71828
var Words = [] string {
"solitude" , "joy" , "ride" , "whisper" , "leaves" , "cookie" ,
"hearts" , "disdain" , "simple" , "death" , "sea" , "shallow" ,
"self" , "rhyme" , "childish" , "sky" , "tic" , "tac" , "boom" ,
}
// ---- Ebitengine's Game interface implementation ----
type Game struct { text * etxt. Renderer ; wordIndex float64 }
func ( self * Game ) Layout ( winWidth int , winHeight int ) ( int , int ) {
scale := ebiten . DeviceScaleFactor () // *
// * ebiten.Monitor().DeviceScaleFactor() in >=v2.7.0
self . text . SetScale ( scale ) // relevant for HiDPI
canvasWidth := int ( math . Ceil ( float64 ( winWidth ) * scale ))
canvasHeight := int ( math . Ceil ( float64 ( winHeight ) * scale ))
return canvasWidth , canvasHeight
}
func ( self * Game ) Update () error {
newIndex := ( self . wordIndex + WordsPerSec / 60.0 )
self . wordIndex = math . Mod ( newIndex , float64 ( len ( Words )))
return nil
}
func ( self * Game ) Draw ( canvas * ebiten. Image ) {
// background color
canvas . Fill (color. RGBA { 229 , 255 , 222 , 255 })
// get screen center position
bounds := canvas . Bounds () // assumes origin (0, 0)
x , y := bounds . Dx () / 2 , bounds . Dy () / 2
// draw text
word := Words [ int ( self . wordIndex )]
self . text . Draw ( canvas , word , x , y )
}
// ---- main function ----
func main () {
// create text renderer, set the font and cache
renderer := etxt . NewRenderer ()
renderer . SetFont ( lbrtserif . Font ())
renderer . Utils (). SetCache8MiB ()
// adjust main text style properties
renderer . SetColor (color. RGBA { 239 , 91 , 91 , 255 })
renderer . SetAlign ( etxt . Center )
renderer . SetSize ( 72 )
// set up Ebitengine and start the game
ebiten . SetWindowTitle ( "etxt/examples/ebiten/words" )
err := ebiten . RunGame ( & Game { text : renderer })
if err != nil { panic ( err ) }
}คุณสามารถลองใช้สิ่งนี้ด้วยตัวเองด้วย 2 :
go run github.com/tinne26/etxt/examples/ebiten/words@latest
หรือคุณสามารถไปที่ https://tinne26.github.io/etxt-examples/ และคลิกที่ตัวอย่างแรกสำหรับเวอร์ชันเว็บ
นี่เป็นตัวอย่างที่ง่ายและมีอยู่ในตัวเอง หากคุณต้องการเรียนรู้เพิ่มเติมตรวจสอบให้แน่ใจว่าได้ดูที่ ETXT/ตัวอย่าง!
ใช่คุณสามารถรวบรวมได้ด้วย -tags gtxt โปรดสังเกตว่า gtxt จะทำให้การวาดข้อความเกิดขึ้นบน CPU ดังนั้นอย่าพยายามใช้เป็นแอปพลิเคชันแบบเรียลไทม์ โดยเฉพาะอย่างยิ่งระวังอย่าใช้ gtxt กับ eBitEngine โดยไม่ตั้งใจ (เข้ากันได้ในหลาย ๆ กรณี แต่ประสิทธิภาพจะตาย)
etxt/testหากคุณใช้แบบอักษรเวกเตอร์แบบพิกเซล-ศิลปะให้อ่านเคล็ดลับเหล่านี้
คุณจะต้องใช้ Golang> = 1.18 และหากคุณไม่เคยใช้ EbitEngine มาก่อนคุณอาจต้องติดตั้งการพึ่งพาบางอย่าง (โดยทั่วไปจะอยู่ใน Linux หรือ FreeBSD เท่านั้น)