[SFML] Złe działanie funkcji
Ostatnio zmodyfikowano 2012-08-19 14:38
starter Temat założony przez niniejszego użytkownika |
[SFML] Złe działanie funkcji » 2012-08-18 22:50:40 Witam, pisze prostą grę używając SFML 1.6. W grze tej jest funkcja (napisane przeze mnie) zamieniająca zmienne int i float na zmienne sf::String , aby mogły one być wyświetlane w oknie gry w czasie rzeczywistym. Funkcja ta jest wywoływana przy każdym przebiegu pętli głównej gry. Problem polega na tym, że: zmienna scoree przyjmuje tylko wartość "0" i "1"; zmienne predkoscc1 i predkoscc2 przyjmują wartości tylko co "0.5(0,0.5,1,1.5 itd.) oraz "zła wartosc";void sprwydruku( int & wynikk, float & speedd, float & speedd2, sf::String & scoree, sf::String & predkoscc1, sf::String & predkoscc2 ) { if( speedd == 0 ) predkoscc1.SetText( L"0" ); else { if( speedd == 0.1 ) predkoscc1.SetText( L"0.1" ); else { if( speedd == 0.2 ) predkoscc1.SetText( L"0.2" ); else { if( speedd == 0.3 ) predkoscc1.SetText( L"0.3" ); else { if( speedd == 0.4 ) predkoscc1.SetText( L"0.4" ); else { if( speedd == 0.5 ) predkoscc1.SetText( L"0.5" ); else { if( speedd == 0.6 ) predkoscc1.SetText( L"0.6" ); else { if( speedd == 0.7 ) predkoscc1.SetText( L"0.7" ); else { if( speedd == 0.8 ) predkoscc1.SetText( L"0.8" ); else { if( speedd == 0.9 ) predkoscc1.SetText( L"0.9" ); else { if( speedd == 1 ) predkoscc1.SetText( L"1" ); else { if( speedd == 1.1 ) predkoscc1.SetText( L"1.1" ); else { if( speedd == 1.2 ) predkoscc1.SetText( L"1.2" ); else { if( speedd == 1.3 ) predkoscc1.SetText( L"1.3" ); else { if( speedd == 1.4 ) predkoscc1.SetText( L"1.4" ); else { if( speedd == 1.5 ) predkoscc1.SetText( L"1.5" ); else { if( speedd == 1.6 ) predkoscc1.SetText( L"1.6" ); else { if( speedd == 1.7 ) predkoscc1.SetText( L"1.7" ); else { if( speedd == 1.8 ) predkoscc1.SetText( L"1.8" ); else { if( speedd == 1.9 ) predkoscc1.SetText( L"1.9" ); else { if( speedd == 2 ) predkoscc1.SetText( L"2" ); else { if( speedd == 2.1 ) predkoscc1.SetText( L"2.1" ); else { if( speedd == 2.2 ) predkoscc1.SetText( L"2.2" ); else { if( speedd == 2.3 ) predkoscc1.SetText( L"2.3" ); else { if( speedd == 2.4 ) predkoscc1.SetText( L"2.4" ); else { if( speedd == 2.5 ) predkoscc1.SetText( L"2.5" ); else { if( speedd == 2.6 ) predkoscc1.SetText( L"2.6" ); else { if( speedd == 2.7 ) predkoscc1.SetText( L"2.7" ); else { if( speedd == 2.8 ) predkoscc1.SetText( L"2.8" ); else { if( speedd == 2.9 ) predkoscc1.SetText( L"2.9" ); else { if( speedd == 3 ) predkoscc1.SetText( L"3" ); else { if( speedd > 3 ) predkoscc1.SetText( L">3" ); else { if( speedd > 100 ) predkoscc1.SetText( L">100" ); else { if( speedd > 1000 ) predkoscc1.SetText( L">1000" ); else predkoscc1.SetText( L"zla wartosc" ); } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } if( speedd2 == 0 ) predkoscc2.SetText( L"0" ); else { if( speedd2 == 0.1 ) predkoscc2.SetText( L"0.1" ); else { if( speedd2 == 0.2 ) predkoscc2.SetText( L"0.2" ); else { if( speedd2 == 0.3 ) predkoscc2.SetText( L"0.3" ); else { if( speedd2 == 0.4 ) predkoscc2.SetText( L"0.4" ); else { if( speedd2 == 0.5 ) predkoscc2.SetText( L"0.5" ); else { if( speedd2 == 0.6 ) predkoscc2.SetText( L"0.6" ); else { if( speedd2 == 0.7 ) predkoscc2.SetText( L"0.7" ); else { if( speedd2 == 0.8 ) predkoscc2.SetText( L"0.8" ); else { if( speedd2 == 0.9 ) predkoscc2.SetText( L"0.9" ); else { if( speedd2 == 1 ) predkoscc2.SetText( L"1" ); else { if( speedd2 == 1.1 ) predkoscc2.SetText( L"1.1" ); else { if( speedd2 == 1.2 ) predkoscc2.SetText( L"1.2" ); else { if( speedd2 == 1.3 ) predkoscc2.SetText( L"1.3" ); else { if( speedd2 == 1.4 ) predkoscc2.SetText( L"1.4" ); else { if( speedd2 == 1.5 ) predkoscc2.SetText( L"1.5" ); else { if( speedd2 == 1.6 ) predkoscc2.SetText( L"1.6" ); else { if( speedd2 == 1.7 ) predkoscc2.SetText( L"1.7" ); else { if( speedd2 == 1.8 ) predkoscc2.SetText( L"1.8" ); else { if( speedd2 == 1.9 ) predkoscc2.SetText( L"1.9" ); else { if( speedd2 == 2 ) predkoscc2.SetText( L"2" ); else { if( speedd2 == 2.1 ) predkoscc2.SetText( L"2.1" ); else { if( speedd2 == 2.2 ) predkoscc2.SetText( L"2.2" ); else { if( speedd2 == 2.3 ) predkoscc2.SetText( L"2.3" ); else { if( speedd2 == 2.4 ) predkoscc2.SetText( L"2.4" ); else { if( speedd2 == 2.5 ) predkoscc2.SetText( L"2.5" ); else { if( speedd2 == 2.6 ) predkoscc2.SetText( L"2.6" ); else { if( speedd2 == 2.7 ) predkoscc2.SetText( L"2.7" ); else { if( speedd2 == 2.8 ) predkoscc2.SetText( L"2.8" ); else { if( speedd2 == 2.9 ) predkoscc2.SetText( L"2.9" ); else { if( speedd2 == 3 ) predkoscc2.SetText( L"3" ); else { if( speedd2 > 3 ) predkoscc2.SetText( L">3" ); else { if( speedd2 > 100 ) predkoscc2.SetText( L">100" ); else { if( speedd2 > 1000 ) predkoscc2.SetText( L">1000" ); else predkoscc2.SetText( L"zla wartosc" ); } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } switch( wynikk ) { case 0: scoree.SetText( L"0" ); break; case 1: scoree.SetText( L"1" ); break; case 2: scoree.SetText( L"2" ); break; case 3: scoree.SetText( L"3" ); break; case 4: scoree.SetText( L"4" ); break; case 5: scoree.SetText( L"5" ); break; case 6: scoree.SetText( L"6" ); break; case 7: scoree.SetText( L"7" ); break; case 8: scoree.SetText( L"8" ); break; case 9: scoree.SetText( L"9" ); break; case 10: scoree.SetText( L"10" ); break; case 11: scoree.SetText( L"11" ); break; case 12: scoree.SetText( L"12" ); break; case 13: scoree.SetText( L"13" ); break; case 14: scoree.SetText( L"14" ); break; case 15: scoree.SetText( L"15" ); break; case 16: scoree.SetText( L"16" ); break; case 17: scoree.SetText( L"17" ); break; case 18: scoree.SetText( L"18" ); break; case 19: scoree.SetText( L"19" ); break; case 20: scoree.SetText( L"20" ); break; default: if( wynikk > 20 ) scoree.SetText( L">20" ); else scoree.SetText( L"zla wartosc" ); break; } }
Sory za długość funkcji, ale tylko tak potrafiłem zamienić int i float na sf::String. |
|
m4tx |
» 2012-08-18 23:09:23 |
|
starter Temat założony przez niniejszego użytkownika |
» 2012-08-18 23:13:44 potrzebuje sf::String i zamienę zrobiłem tylko źle działa chociaż moim zdanie powinno być okej |
|
akwes |
» 2012-08-18 23:17:33 @starter
int lub float -> std::string
a potem z tego std::string możesz stworzyć sf::String(std::string) będzie Ci łatwiej..
Aczkolwiek warto też przeglądnąć kurs C++ tutaj |
|
starter Temat założony przez niniejszego użytkownika |
» 2012-08-18 23:28:03 int -> std::string znalazłem metodę: int i = 42; ostringstream ss; ss << i; string str = ss.str(); dalej działa tylko dla wartości 0 i 1 //edit: a float to string nie mogę znaleźć |
|
akwes |
» 2012-08-18 23:55:51 float i = 42.234f; ostringstream ss; ss << i; string str = ss.str();
Może ;> |
|
waxx |
» 2012-08-19 00:06:11 template < class T > std::string itos( T i ) { std::stringstream ss; std::string str; ss << i; ss >> str; return str; }
sf::String text; text.SetText( itos( 0.5f ) ); text.SetText( itos( 2 ) );
?? |
|
Mrovqa |
» 2012-08-19 12:18:34 Możesz użyć wygodniejszego sposobu - sstream - albo itoa oraz ftoa (czy jak to się zapisywało). Osobiście polecam pierwszy sposób (jak przedmówcy), ponieważ jest o wiele wygodniejszy. |
|
« 1 » 2 |