tBane Temat założony przez niniejszego użytkownika |
» 2024-06-05 20:19:43 // edit Przepraszam, mój błąd. Zapędziłem się.
cout << textPart[ textPart.size() - 1 ];
Wyświetla znak interpunkcyjny - znaczy się wyświetla poprawnie, a mimo to w SFML wyskakuje jakiś dziwny krzak. |
|
pekfos |
» 2024-06-05 20:26:08 To nawet nie jest zmienna którą przekazujesz do SFML. Debugowanie na przykładzie Visual Studio 2017Wyświetla znak interpunkcyjny - znaczy się wyświetla poprawnie, a mimo to w SFML wyskakuje jakiś dziwny krzak. for( auto ch: textPart ) std::cout <<( int ) ch << ' ';
std::cout << '\n'; Jeśli naprawdę musisz debugować printfami... |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-06-05 20:52:10 wszystko się wyświetla poprawnie w konsoli. To tak jakby wstring przez SFML był źle obsługiwany. Mogę całą funkcję wrzucić, może tak będzie łatwiej 001.txt "Witaj w czym mogę Ci pomóc?" 2, "Kim Jesteś?" 3, "Co tutaj robisz?" -1, "Żegnaj."
002.txt "Nazywam się Jack i jestem handlarzem, chcesz może rzucić okiem na moje towary?" 2, "Kim Jesteś?" 3, "Co tutaj robisz?" -1, "Żegnaj."
003.txt "Handluje towarami, a na co Ci to wygląda?" 2, "Kim Jesteś?" 3, "Co tutaj robisz?" -1, "Żegnaj."
std::wstring ConvertUtf8ToWide( const std::string & utf8Str ) { if( utf8Str.empty() ) { return std::wstring(); } int wideCharCount = MultiByteToWideChar( CP_UTF8, 0, utf8Str.c_str(), - 1, nullptr, 0 ); if( wideCharCount == 0 ) { throw std::runtime_error( "Error in MultiByteToWideChar" ); } std::wstring wideStr( wideCharCount, 0 ); MultiByteToWideChar( CP_UTF8, 0, utf8Str.c_str(), - 1, & wideStr[ 0 ], wideCharCount ); return wideStr; }
void loadDialogue( int dialogID ) { wcout << L"WCZYTUJE DIALOG: " << dialogID; string textID = to_string( dialogID ); while( textID.size() < 3 ) textID = "0" + textID; string filename = "dialogues/" + textID + ".txt"; ifstream file( filename ); if( !file.is_open() ) { cout << "cant open dialogue " << filename << "\n"; return; } string lineUTF8; getline( file, lineUTF8 ); std::istringstream lineStream( lineUTF8 ); cout << "\n"; string textPart; lineStream >> std::quoted( textPart ); for( auto ch: textPart ) std::cout << ch << ' '; std::cout << '\n'; Dialogue * dial = new Dialogue( dialogID, ConvertUtf8ToWide( textPart ) ); int id = - 1; char comma; while( std::getline( file, lineUTF8 ) ) { std::istringstream lineStream( lineUTF8 ); lineStream >> id >> comma; lineStream >> quoted( textPart ); dial->options.push_back( DialogueOption( id, ConvertUtf8ToWide( textPart ) ) ); } dialogues.push_back( dial ); file.close(); }
|
|
pekfos |
» 2024-06-05 20:57:57 Podaj niedziałający tekst jako sekwencję liczb. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-06-05 21:00:28 87 105 116 97 109 32 119 32 103 114 122 101 32 79 110 101 32 45 32 84 104 101 32 66 101 103 105 110 110 105 110 103 46 32 90 97 -59 -68 -61 -77 -59 -126 -60 -121 32 71 -60 -103 -59 -101 108 -60 -123 32 74 97 -59 -70 -59 -124 46
ostatni znak to jest 46, czyli kropka, więc wychodzi na to, że jest poprawnie. A SFML i tak wyświetla na końcu jakiś dziwny znak |
|
pekfos |
» 2024-06-05 21:02:08 Podaj niedziałający tekst jako sekwencję liczb. Wyraźnie ten jest w UTF-8. Podaj to co podajesz do SFML, dokładnie w momencie gdy podajesz to do SFML. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-06-05 21:17:00 W i t a m w g r z e O n e - T h e B e g i n n i n g . Z a void renderDialogBox( sf::RenderWindow * window, int currentPage = 0 ) { page = currentPage; sf::Texture dialogBoxTexture; if( !dialogBoxTexture.loadFromFile( "assets/GUI/DialogBoxTexture.png" ) ) { return; } sf::Sprite background; background.setTexture( dialogBoxTexture ); background.setOrigin( dialogSize.x / 2.0f, dialogSize.y / 2.0f ); background.setPosition( view.getCenter().x, view.getCenter().y + screenHeight / 2.0f - dialogSize.y / 2.0f ); window->draw( background ); cout << "ten tekst bezpośrednio trafia do SFML: \n"; for( int i = 0; i < 4; i++ ) { if( i + 4 * page >= wrappedText.size() ) break; for( auto ch: wrappedText[ i + 4 * page ] ) wcout << ch << ' '; cout << "\n"; sf::Text text = sf::Text( wrappedText[ i + 4 * page ], dialogBoxFont, characterSize ); text.setFillColor( textDialogueColor ); textPosition.x = background.getPosition().x - dialogSize.x / 2.f + padding; textPosition.y = background.getPosition().y - dialogSize.y / 2.f + float( i ) * lineHeight + padding; text.setPosition( textPosition ); window->draw( text ); } }
dalej nic nie wyświetla a powinno być "Witam w grze One - The Beginning. Zażółć Gęślą Jaźń." |
|
pekfos |
» 2024-06-05 21:22:16 Ja chyba jestem w piekle... Liczby! Wszystkie! AWLDma'sk;ldnhlajkbdljawihdkoawhd;lopiwuquilwfefgbui |
|
1 2 « 3 » 4 |