Skip to main content
GameDev.net gamedev.net
🔒 Locked

about SFML1.5 - Chinese language support

Started by qxtianlong Nov 3, 2009 at 11:58 PM 2 replies 1.2k views
Original Post
qxtianlong
qxtianlong
How does this engine support Chinese?

#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>

#pragma comment(lib,"sfml-main-d.lib")
#pragma comment(lib,"sfml-system-d.lib")
#pragma comment(lib,"sfml-window-d.lib")
#pragma comment(lib,"sfml-graphics-d.lib")
#pragma comment(lib,"sfml-audio-d.lib")

int main()
{
     // Create the main window
     sf::RenderWindow App(sf::VideoMode(800, 600,32), "SFML 你好");

     // Load a sprite to display
     sf::Image Image;
     if (!Image.LoadFromFile("data/gfx/intro.jpg"))
         return EXIT_FAILURE;
     sf::Sprite Sprite(Image);

     // Create a graphical string to display
     sf::Font Arial;
     if (!Arial.LoadFromFile("data/fonts/simsun.ttc"))
         return EXIT_FAILURE;
     
     sf::String Text("Hello 什么东西", Arial, 50);

     // Load a music to play
     sf::Music Music;
     if (!Music.OpenFromFile("data/sfx/main.ogg"))
         return EXIT_FAILURE;
     // Play the music
     Music.Play();

     // Start the game loop
     while (App.IsOpened())
     {
         // Process events
         sf::Event Event;
         while (App.GetEvent(Event))
         {
             // Close window : exit
             if (Event.Type == sf::Event::Closed)
                 App.Close();
         }

         // Clear screen
         App.Clear();

         // Draw the sprite
         App.Draw(Sprite);

         // Draw the string
         App.Draw(Text);

         // Update the window
         App.Display();
     }

     return EXIT_SUCCESS;
}
EDIT: Changed topic title to be more descriptive. - jba. [Edited by - jbadams on November 4, 2009 1:42:44 AM]
fastcall22
fastcall22
SFML is Unicode compliant. sf::Font will open a font file and render a few glyphs to a texture. The problem is that there are more than a million glyphs that can be rendered and can be impossible to store on video memory. The SFML documentation for sf::Font specifies that you can select what glyphs you'll use in a font (by default, it'll use the ISO-8859-1 printable characters):

     // Create a graphical string to display     // bool sf::Font::LoadFromFile( const std::string& Filename, unsigned charSize = 30, const Unicode::Text& Charset = ourDefaultCharset ) 		     sf::Font Arial;     if (!Arial.LoadFromFile("data/fonts/simsun.ttc", 30, L"Helo\x4E48\x4EC0\x4E1C\x897F" ) )         return EXIT_FAILURE;          sf::String Text( L"Hello \x4EC0\x4E48\x4E1C\x897F", Arial, 50);


[Edited by - _fastcall on November 4, 2009 12:03:13 AM]
Codeka
Codeka
Quote:
Original post by qxtianlong
How does this engine support Chinese?
What do you mean "how"?

It looks like it's using HTML entity reference to include Unicode characters in the ASCII strings. 你 looks like a HTML entity reference, and since 20320 decimal is 4F60 in hexadecimal, it corresponds to Unicode characters U+4F60, which is 你.
qxtianlong
qxtianlong
Quote:
Original post by Codeka
Quote:
Original post by qxtianlong
How does this engine support Chinese?
What do you mean "how"?

It looks like it's using HTML entity reference to include Unicode characters in the ASCII strings. 你 looks like a HTML entity reference, and since 20320 decimal is 4F60 in hexadecimal, it corresponds to Unicode characters U+4F60, which is 你.


thanks all

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.