在Gosu集中文本

时间:2015-08-23 17:08:59

标签: ruby libgosu

我一直无法将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.现在,这在垂直对齐时似乎有效。

enter image description here

然而,横向是一个不同的故事......似乎 采取文本的左上角,并将其置于我期望它做的中心,而不是文本的中间。

enter image description here

任何人都有这个公式吗?我尝试了很多东西,但只是接近了。

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

您的@messageGosu::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()的更多信息,请参见下面的链接:

相关问题