ETXT est un package pour le rendu de texte vectorial 1 à Golang conçu pour être utilisé avec EBITENCINE , le moteur de jeu 2D fabriqué par Hajime Hoshi.
Alors que l'EBitEngine inclut déjà le package EBITEN / V2 / Text / V2 , ETXT présente certains avantages:
font.Face pour de bon.Ce que ETXT ne fait pas:
Si vous n'êtes pas familier avec les termes et concepts de typographie, je recommande fortement de lire les premiers chapitres des conventions de glyphe Freetype; L'une des meilleures références sur le sujet que vous pouvez trouver sur Internet.
Moins de conversation et plus de 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 ) }
}Vous pouvez essayer de l'exécuter vous-même avec 2 :
go run github.com/tinne26/etxt/examples/ebiten/words@latest
Alternativement, vous pouvez aller sur https://tinne26.github.io/etxt-examples/ et cliquez sur le premier exemple de la version Web.
Ceci est un exemple très simple et autonome. Si vous voulez en savoir plus, assurez-vous de jeter un œil à ETXT / Exemples!
Ouais, vous pouvez le compiler avec -tags gtxt . Notez que gtxt permettra à un dessin de texte sur le CPU, alors n'essayez pas de l'utiliser pour des applications en temps réel. En particulier, soyez prudent de ne pas utiliser accidentellement gtxt avec l'ebitEngine (ils sont compatibles dans de nombreux cas, mais les performances mourront).
etxt/test .Si vous utilisez des polices vectoriales de type pixel-art, lisez ces conseils. ↩
Vous aurez besoin de Golang> = 1.18, et si vous n'avez jamais utilisé d'EbitEngine auparavant, vous devrez peut-être installer certaines dépendances (généralement uniquement sur Linux ou FreeBSD). ↩