Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

konwersja string na wstring

Ostatnio zmodyfikowano 2024-06-05 22:06
Autor Wiadomość
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.
P-181206
pekfos
» 2024-06-05 20:26:08
To nawet nie jest zmienna którą przekazujesz do SFML.
» Kurs C++» Poziom XDebugowanie na przykładzie Visual Studio 2017 lekcja

Wyświetla znak interpunkcyjny - znaczy się wyświetla poprawnie, a mimo to w SFML wyskakuje jakiś dziwny krzak.
C/C++
for( auto ch: textPart )
   
 std::cout <<( int ) ch << ' ';

std::cout << '\n';
Jeśli naprawdę musisz debugować printfami...
P-181207
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."

C/C++
std::wstring ConvertUtf8ToWide( const std::string & utf8Str ) {
   
// Convert string (UTF-8) to wstring (wide string)
   
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';
   
   
// stworzenie dialogu
   
Dialogue * dial = new Dialogue( dialogID, ConvertUtf8ToWide( textPart ) );
   
   
int id = - 1;
   
char comma;
   
   
// wczytanie odpowiedzi do dialogu
   
while( std::getline( file, lineUTF8 ) ) {
       
       
std::istringstream lineStream( lineUTF8 );
       
lineStream >> id >> comma;
       
lineStream >> quoted( textPart ); // wczytywanie between cudzysłowami " "
       
dial->options.push_back( DialogueOption( id, ConvertUtf8ToWide( textPart ) ) );
   
}
   
   
// dodanie dialogu do listy wszystkich dialogow
   
dialogues.push_back( dial );
   
   
file.close();
}
P-181208
pekfos
» 2024-06-05 20:57:57
Podaj niedziałający tekst jako sekwencję liczb.
P-181209
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
P-181210
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.
P-181211
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


C/C++
void renderDialogBox( sf::RenderWindow * window, int currentPage = 0 ) {
   
   
page = currentPage; // global variable "page"
   
   
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źń."
P-181212
pekfos
» 2024-06-05 21:22:16
Ja chyba jestem w piekle... Liczby! Wszystkie! AWLDma'sk;ldnhlajkbdljawihdkoawhd;lopiwuquilwfefgbui
P-181213
1 2 « 3 » 4
Poprzednia strona Strona 3 z 4 Następna strona