Gosu 中的居中文本
Centering text in Gosu
我一直无法将 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。现在这似乎在垂直对齐时起作用了。
然而,横向是另一回事......似乎
将文本的左上角置于我期望的居中位置,而不是文本的中间位置。
有人知道这个的公式吗?我尝试了一大堆东西,只差一点。
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
的实例
据我所知,class有一个方法可以让你将图像的旋转中心对准指定的点,draw_rot
一旦找到框架的中心,使用 draw_rot
而不是 draw
应该对你有用。
我知道这是一个老问题,但我今天早些时候遇到了这个问题并提出了这个解决方案。
def draw_centered_text(text, size, font)
centered_text = Gosu::Image.from_text(text, size, {:width => WIDTH, :align => :center, :font => font})
end
上述函数将传递的文本转换为宽度等于 WIDTH 的图像(在我的例子中是一个常量,用于存储 window 宽度)并且文本居中。然后你可以像这样调用函数:
draw_centered_text("Your text", 20, "Arial Bold").draw(0, 50, 0, 1, 1, Gosu::Color::WHITE)
您可以将 20 和 50 替换为您想要的任何行高(字体大小)和 y 位置,就像您可以将 "Arial Bold" 更改为 "Arial" 或您系统上的任何其他字体一样。但是,保留 x 位置的 0(draw()
的第一个参数),因为居中的文本图像与 window 宽度相同。
有关 from_text()
和 draw()
的更多信息,请参阅下面的链接:
迟到总比不到好...
无需将文本转换为图像。只需使用 Font.draw_text_rel 方法中可用的两个参数将文本居中:rel_x 和 rel_y。请参阅下面的代码(稍作修改)。
参见:https://www.rubydoc.info/gems/gosu/Gosu%2FFont:draw_text_rel
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)
@font = Gosu::Font.new(45)
@message = "HELLO WORLD"
end
def draw
@font.draw_text_rel(@message, width / 2, height / 2, 1, rel_x = 0.5, rel_y = 0.5)
end
end
window = GameWindow.new
window.show
我一直无法将 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。现在这似乎在垂直对齐时起作用了。
然而,横向是另一回事......似乎 将文本的左上角置于我期望的居中位置,而不是文本的中间位置。
有人知道这个的公式吗?我尝试了一大堆东西,只差一点。
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
据我所知,class有一个方法可以让你将图像的旋转中心对准指定的点,draw_rot
一旦找到框架的中心,使用 draw_rot
而不是 draw
应该对你有用。
我知道这是一个老问题,但我今天早些时候遇到了这个问题并提出了这个解决方案。
def draw_centered_text(text, size, font)
centered_text = Gosu::Image.from_text(text, size, {:width => WIDTH, :align => :center, :font => font})
end
上述函数将传递的文本转换为宽度等于 WIDTH 的图像(在我的例子中是一个常量,用于存储 window 宽度)并且文本居中。然后你可以像这样调用函数:
draw_centered_text("Your text", 20, "Arial Bold").draw(0, 50, 0, 1, 1, Gosu::Color::WHITE)
您可以将 20 和 50 替换为您想要的任何行高(字体大小)和 y 位置,就像您可以将 "Arial Bold" 更改为 "Arial" 或您系统上的任何其他字体一样。但是,保留 x 位置的 0(draw()
的第一个参数),因为居中的文本图像与 window 宽度相同。
有关 from_text()
和 draw()
的更多信息,请参阅下面的链接:
迟到总比不到好...
无需将文本转换为图像。只需使用 Font.draw_text_rel 方法中可用的两个参数将文本居中:rel_x 和 rel_y。请参阅下面的代码(稍作修改)。
参见:https://www.rubydoc.info/gems/gosu/Gosu%2FFont:draw_text_rel
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)
@font = Gosu::Font.new(45)
@message = "HELLO WORLD"
end
def draw
@font.draw_text_rel(@message, width / 2, height / 2, 1, rel_x = 0.5, rel_y = 0.5)
end
end
window = GameWindow.new
window.show