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

Float i instrukcja warunkowa IF

Ostatnio zmodyfikowano 2012-05-15 19:01
Autor Wiadomość
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ść:
C/C++
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:

C/C++
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:
C/C++
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 );
    }
}
P-56734
pekfos
» 2012-05-15 17:27:48
kwestia dokładności.
C/C++
#include <cmath>
bool flt_eq_acc( float a, float b, float acc = 1e - 3 ) //acc - dokładność (domyślnie do 0.001)
{
    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
P-56738
szyx_yankez
» 2012-05-15 18:18:28
Dodaj "f" na końcu liczby typu float którą porównujesz.
C/C++
#include <iostream>

int main()
{
    float a = 0.1;
   
    if( a == 0.1 ) std::cout << 1;
   
    if( a == 0.1f ) std::cout << 2;
   
}
Output:
2
P-56742
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 :)
P-56745
« 1 »
  Strona 1 z 1