I'm trying to output text to the main window with unicode character like that
def initialize
super 800, 800
self.caption = 'Chess'
@font = Gosu::Font.new(self, Gosu.default_font_name, 100)
end
def draw
text = "Chess \u2658".encode('utf-8')
@font.draw(text, 100, 100, 10, 1, 1, Gosu::Color::BLACK)
end
but the window displays only the 'Сhess' string without unicode symbol '♘' as supposed.
What I have tried so far:
- to change font name itself, 'Gosu.default_font_name' to 'Serif', 'Arial', 'Hack' - same result only 'Chess' string changes font but not displaying glyph
- use symbol '♘' instead of unicode code
- use .draw_markup, .draw_text, Gosu::Image.from_text.
- use different unicode code, for example with cyrillic letter '\u0416' it worked as supposed.
- use different encoding arguments.
- use different colors.
I looked for similar problems on the Gosu forum, but I could not find anything.
CodePudding user response:
You need to use a font that includes those Unicode characters or Gosu's internal font rendering code will return a 0 width image for drawing that character.
A font like: https://fontlibrary.org/en/font/chess
require "gosu"
class Window < Gosu::Window
def initialize(*args)
super
@font = Gosu::Font.new(28, name: "Chess.odf")
end
def draw
@font.draw_text("♘\u2658", 10, 10, 10)
end
end
Window.new(100, 100, false).show
