ETXT ist ein Paket für Vectorial 1 Text -Rendering in Golang, das für die Verwendung von Ebithodegine , der 2D -Game -Engine von Hajime Hoshi, verwendet werden soll.
Während EbitedEngine bereits das Paket EBITEN/V2/Text/V2 enthält, hat ETXT einige Vorteile darüber:
font.Face für immer los.Was ETXT nicht tut:
Wenn Sie mit Typografiebegriffen und -konzepten nicht vertraut sind, empfehle ich dringend, die ersten Kapitel von Freetype Glyph Conventions zu lesen. Eine die besten Referenzen zu dem Thema, das Sie im Internet finden können.
Weniger Reden und mehr Code!
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 ) }
}Sie können versuchen, dies selbst mit 2 zu laufen: 2:
go run github.com/tinne26/etxt/examples/ebiten/words@latest
Alternativ können Sie https://tinne26.github.io/etxt-examples/ wechseln und auf das erste Beispiel für die Webversion klicken.
Dies ist ein sehr einfaches und in sich geschlossenes Beispiel. Wenn Sie mehr erfahren möchten, schauen Sie sich ETXT/Beispiele an!
Ja, Sie können es mit -tags gtxt kompilieren. Beachten Sie, dass gtxt in der CPU Textzeichnung erfolgt. Versuchen Sie also nicht, sie für Echtzeitanwendungen zu verwenden. Achten Sie insbesondere darauf, gtxt nicht versehentlich mit EBITEDEGINE zu verwenden (sie sind in vielen Fällen kompatibel, aber die Leistung wird sterben).
etxt/test .Wenn Sie Pixel-art-ähnliche vektorielle Schriftarten verwenden, lesen Sie diese Tipps. ↩
Sie benötigen Golang> = 1.18, und wenn Sie EBITENEGINE noch nie zuvor verwendet haben, müssen Sie möglicherweise einige Abhängigkeiten installieren (normalerweise nur unter Linux oder FreeBSD). ↩