如何在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
相关产品推荐
相关产品推荐

