有没有办法在没有额外库的情况下使用 LuaJIT 和 SDL2 将文本打印到屏幕上?
Posted
技术标签:
【中文标题】有没有办法在没有额外库的情况下使用 LuaJIT 和 SDL2 将文本打印到屏幕上?【英文标题】:Is there a way to print text to a screen using LuaJIT and SDL2 without an additional library? 【发布时间】:2021-08-29 21:39:33 【问题描述】:我目前正在为 SDL2 使用 LuaJIT 包装器(请参阅 github 上的“anima”),但不幸的是,SDL_ttf 未包含在 ffi 中,我无法在 Windows 上使用其他库。此外,这个项目的需求已经有变得相当臃肿的风险。
无论如何,我只需要一种将文本打印到窗口表面的方法。有没有一种相对简单的方法?在有人问之前,是的,我确实尝试过 C,但是尝试使用 SDL_ttf 有它自己的噩梦,我更愿意尽可能多地使用 Lua,而不是编译一个非常简单的可执行文件以获得一个干净的前端。
编辑:我想我应该澄清一下,当我尝试在 C 中使用 SDL2 时,SDL2 根本没有工作,但考虑到这不是问题的范围,我离题了 p>
【问题讨论】:
C 的完整 SDL2 故障排除指南(假设您使用 MinGW):***.com/a/64396980/2752075 对不起,我不知道 SDL2。I just need a way to print text to the window surface
- 你能获取表面的 WindowHandle 或 DeviceContext 并使用原始 WinAPI 函数(通过 LuaJIT FFI)在该表面上写入文本吗?
@EgorSkriptunoff 这有潜力......有一种方法可以加载 Windows dll 并(我猜)使用来自 LuaJIT 解释器的各自 C 调用。谢谢你的想法
【参考方案1】:
您可以使用位图字体,但您提到的 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, 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 )
【讨论】:
我很感激如果我有这个库,这会起作用,但是 luarocks 不会安装在我的系统上。此外,我认为我的系统中存在 luarocks 不会有利于当前项目的可访问性。无论如何,谢谢你的回答......它并没有真正回答这个问题以上是关于有没有办法在没有额外库的情况下使用 LuaJIT 和 SDL2 将文本打印到屏幕上?的主要内容,如果未能解决你的问题,请参考以下文章
在没有互联网或使用库的情况下配置 IQKeyboardManager?
如何在没有支持库的情况下将 MaterialToolbar 设置为 ActionBar
解析 JWT 令牌以仅在 C# 或 Blazor 中没有外部库的情况下获取有效负载内容