我一直无法将Gosu图书馆中的文字居中放到屏幕的中间位置。
require 'gosu'
class GameWindow < Gosu::Window
def initialize (width=800, height=600, fullscreen=false)
super
self.caption = 'Hello'
@message = Gosu::Image.from_text(
self, 'HELLO WORLD', Gosu.default_font_name, 45)
end
def draw
@message.draw(377.5,277.5,0)
end
end
window = GameWindow.new
window.show
我的第一种方法是取屏幕的height
,用文本45
的高度减去它,然后除以2.现在,这在垂直对齐时似乎有效。
然而,横向是一个不同的故事......似乎 采取文本的左上角,并将其置于我期望它做的中心,而不是文本的中间。
任何人都有这个公式吗?我尝试了很多东西,但只是接近了。
答案 0 :(得分:2)
class GameWindow < Gosu::Window
def initialize (width=800, height=600, fullscreen=false)
super
self.caption = 'Hello'
@message = Gosu::Image.from_text(
self, 'HELLO WORLD', Gosu.default_font_name, 45)
end
def draw
@message.draw(377.5,277.5,0)
end
end
您的@message
是Gosu::Image
据我所知,该课程有一种方法可让您将图像的旋转中心对齐到指定的点draw_rot
一旦找到了框架的中心,使用draw_rot
代替draw
应该对您有用。
答案 1 :(得分:0)
我知道这是一个老问题,但是今天早些时候我遇到了这个问题,并提出了解决方案。
def draw_centered_text(text, size, font)
centered_text = Gosu::Image.from_text(text, size, {:width => WIDTH, :align => :center, :font => font})
end
上面的函数将传递的文本转换为宽度等于WIDTH的图像(在我的情况下,该宽度是存储窗口宽度的常数),并且文本居中。然后,您可以像这样调用该函数:
draw_centered_text("Your text", 20, "Arial Bold").draw(0, 50, 0, 1, 1, Gosu::Color::WHITE)
您可以将20和50替换为所需的任何行高(字体大小)和y位置,就像可以将“ Arial Bold”更改为“ Arial”或系统上的任何其他字体一样。但是,由于居中的文本图像的宽度与窗口的宽度相同,因此在x位置(draw()
的第一个参数)保持0。
有关from_text()
和draw()
的更多信息,请参见下面的链接: