• Advertisement
Sign in to follow this  

about SFML1.5 - Chinese language support

This topic is 3034 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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 &#20320;&#22909;");

     // 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 &#20160;&#20040;&#19996;&#35199;", 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]

Share this post


Link to post
Share on other sites
Advertisement
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);



  • 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 你.

    Share this post


    Link to post
    Share on other sites
    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

    Share this post


    Link to post
    Share on other sites
    Sign in to follow this  

    • Advertisement