Float i instrukcja warunkowa IF
Ostatnio zmodyfikowano 2012-05-15 19:01
Temes Temat założony przez niniejszego użytkownika |
Float i instrukcja warunkowa IF » 2012-05-15 17:01:23 Witam, piszę grę - już w bibliotece graficznej i akurat utknąłem na głośności muzyki.
Volume -> głośnośc muzyki.
W allegro 5 tam gdzie jest Volume tam jest głośność:
al_play_sample( MuzykaGlowneMenu, Volume, 0.0, 1.0, ALLEGRO_PLAYMODE_LOOP, NULL );
Volume jest to tryb zmiennoprzecinkowy więc przykład: 1.0
Problem mam tu:
if( Volume == 0.0 ) al_draw_bitmap( V00, 35, 200, 0 );
if( Volume == 0.1 ) al_draw_bitmap( V01, 35, 200, 0 );
if( Volume == 0.2 ) al_draw_bitmap( V02, 35, 200, 0 );
if( Volume == 0.3 ) al_draw_bitmap( V03, 35, 200, 0 );
if( Volume == 0.4 ) al_draw_bitmap( V04, 35, 200, 0 );
I tak dalej, i tak dalej... Problem jest w tym, że program nie che wyświetlić mi żadnego obrazka... Np. podczas gdy Volume = 0.1, program nie wyświetla nic, a powinien wyświetlić V01.
Nie jestem pewien, ale wydaję mi się że chodzi tu o if( Volume == 0.1 ) nie wiem czy dobrze to napisałem, jeżeli Volume jest zmienną typu float .
Reszta kodu:
if( al_key_down( & StatusKlawiatury, ALLEGRO_KEY_LEFT ) ) { if( Volume >= 0.0 ) { Volume -= 0.1; std::ofstream MZO( MuzykaZapisOdczyt.c_str() ); MZO << Volume; MZO.close(); al_rest( 0.10 ); } } if( al_key_down( & StatusKlawiatury, ALLEGRO_KEY_RIGHT ) ) { if( Volume <= 3.0 ) { Volume += 0.1; std::ofstream MZO( MuzykaZapisOdczyt.c_str() ); MZO << Volume; MZO.close(); al_rest( 0.10 ); } } |
|
pekfos |
» 2012-05-15 17:27:48 kwestia dokładności. #include <cmath> bool flt_eq_acc( float a, float b, float acc = 1e - 3 ) { return fabs( a - b ) < acc; }
#include <cstdio> int main() { if( flt_eq_acc( 3.141592, 3.1415926, 1e - 5 ) ) printf( "1" ); if( 3.141592 == 3.1415926 ) printf( "2" ); } Bo w końcu 1 != 1.000000000001 |
|
szyx_yankez |
» 2012-05-15 18:18:28 Dodaj "f" na końcu liczby typu float którą porównujesz.
#include <iostream>
int main() { float a = 0.1; if( a == 0.1 ) std::cout << 1; if( a == 0.1f ) std::cout << 2; }
Output:
2 |
|
Temes Temat założony przez niniejszego użytkownika |
» 2012-05-15 19:01:49 fuck... dzięki szyx_yankez ^^ jedna literka i całkowicie zmienia zycie czlowieka dzieki wszystkim :) |
|
« 1 » |