微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法在没有额外库的情况下使用 LuaJIT 和 SDL2 将文本打印到屏幕上?

如何解决有没有办法在没有额外库的情况下使用 LuaJIT 和 SDL2 将文本打印到屏幕上?

我目前正在为 SDL2 使用 LuaJIT 包装器(请参阅 github 上的“anima”),但不幸的是,SDL_ttf 未包含在 ffi 中,而且我在 Windows 上使用其他库时遇到问题。此外,该项目的需求已经有变得相当臃肿的风险。

无论如何,我只需要一种将文本打印到窗口表面的方法。有没有办法做到这一点相对简单?在有人问之前,是的,我确实尝试过 C,但是尝试使用 SDL_ttf 有它自己的噩梦,除了编译一个非常简单的可执行文件以获得干净的前端之外,我更喜欢尽可能多地使用 Lua。

编辑:我想我应该澄清一下,当我尝试在 C 中使用 SDL2 时,SDL2 根本没有工作,但考虑到这不是问题的范围,我离题了 >

解决方法

您可以使用位图字体,但是您提到的 anima 存储库似乎没有 SDL.ttf,因此 truetype 很可能已失效。 'Prolly 使用 https://github.com/Tangent128/luasdl2 获得更好的结果。在功能上,它们几乎相同,只是在语法上有一些不同。此外,您不必必须将所有错误测试都放在脚本中,但他们会推荐它们作为开发反馈。

#! /usr/bin/env luajit
--  luarocks install lua-sdl2
--  apt install fonts-freefont-ttf

local SDL = require( 'SDL' )
local font = require( 'SDL.ttf' )

local function et( this,that )  --  error test
    if not this then error( that ) end
end

local ret,err = SDL .init { SDL .flags .Video } ; et( ret,err )
local ret,err = font .init() ; et( ret,err )

local win,err = SDL .createWindow { title='Font',width=200,height=100 } ; et( win,err )
local rdr,err = SDL .createRenderer( win,0 ) ; et( rdr,err )

local fonts = '/usr/share/fonts/truetype/freefont/'
local mono = fonts ..'FreeMono.ttf'
local sans = fonts ..'FreeSans.ttf'
local serif = fonts ..'FreeSerif.ttf'

local fon,home = font .open( serif,40 ) ; et( fon,home )

local white = { r = 255,g = 255,b = 255 }
local surf,err = fon :renderUtf8( 'Gérard!','blended',white ) ; et( surf,err )

local texture,err = rdr :createTextureFromSurface( surf ) ; et( texture,err )

rdr :clear()
rdr :copy( texture )
rdr :present()

local seconds = 3
local miliseconds = seconds *1000
SDL .delay( miliseconds )

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。