You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Love2D中实现文本的水平与垂直居中对齐?

实现Love2D中文本的水平与垂直居中

嘿,刚好在Love2D里折腾过类似的文本居中问题,给你分享个实用的解决思路!要让文本精准居中,核心是先拿到文本的实际尺寸,再结合屏幕尺寸算出正确的绘制坐标,具体实现如下:

核心思路

Love2D的love.graphics.print()默认是从文本左上角开始绘制的,所以直接用屏幕中心坐标的话,文本会偏右下。我们需要先获取文本的宽高,再把绘制起点调整到「屏幕中心减去文本半宽半高」的位置,这样文本就能完美居中了。

完整代码示例

local mainFont
local targetText = "触发事件时显示的居中文本"

function love.load()
    -- 加载自定义字体(如果不需要自定义,这步可以省略,直接用默认字体)
    mainFont = love.graphics.newFont(28)
    love.graphics.setFont(mainFont)
end

function love.draw()
    -- 获取当前屏幕的宽高
    local screenW = love.graphics.getWidth()
    local screenH = love.graphics.getHeight()
    
    -- 获取要显示文本的实际宽高
    local textW = mainFont:getWidth(targetText)
    local textH = mainFont:getHeight(targetText)
    
    -- 计算居中的绘制坐标
    local centerX = (screenW - textW) / 2
    local centerY = (screenH - textH) / 2
    
    -- 绘制居中文本
    love.graphics.print(targetText, centerX, centerY)
end

多行文本的居中处理

如果是需要换行的多行文本,用love.graphics.printf()会更方便,只需要把对齐方式设为"center",并把绘制区域的宽度设为屏幕宽度,再计算垂直居中的Y坐标即可:

local multiLineText = "这是第一行内容\n这是第二行内容\n这是第三行内容"

function love.draw()
    local screenW = love.graphics.getWidth()
    local screenH = love.graphics.getHeight()
    
    -- 获取多行文本的总高度(这里假设每行高度一致,也可以用font:getWrap()获取更精准的行高)
    local lineCount = 3
    local totalTextH = mainFont:getHeight() * lineCount
    
    local centerY = (screenH - totalTextH) / 2
    -- printf参数:文本、起始X、起始Y、绘制区域宽度、对齐方式
    love.graphics.printf(multiLineText, 0, centerY, screenW, "center")
end

这样不管屏幕尺寸怎么调整,文本都会始终保持水平和垂直居中啦!

内容的提问来源于stack exchange,提问作者user16999379

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 17:02:37