Skocz do zawartości

MZG

Użytkownicy
  • Postów

    65
  • Dołączył

  • Ostatnia wizyta

O mnie

  • Płeć
    Male

Osiągnięcia MZG

Smart Newbie

Smart Newbie (2/13)

0

Reputacja

  1. Nie wiem jak miałoby to działać. Tu właśnie chodzi że floaty nawalają. Kiedy do floata dodaje 0.001 ciągle to wychodzi coś takiego(nie idealnie tak samo, ale na tej zasadzie): 0.00100000000000000001 0.00200000000000000002 0.00300000000000000004 . . . 0.45600000000000000757 0.45699999999999999987 Bardzo dziwny błąd. Tak jakby komputer "niedokładnie dolewał" co już wspomniałem. A czy wszelako różnych konwersjach sprawa się pogarsza. W dodatku napisałem prosty kod if(static_cast<int>(i/0.001) != 0) //obliczanie reszty dzielenia z floata continue; //jezeli reszta nie jest rowna zero to wroc do poczatku petli Jedyne co zobaczyłem to ekran konsoli z jednym zerem. [EDIT] Meh, znalazłem powód tego stanu rzeczy. Te liczby napisanie binarnie są nieskończone, więc komputer nie może ich "skończyć" dziesiętnie. Wychodzi na to że jedynym ratunkiem jest zaokrąglanie. Ale dziwne jest to że w javie tego nie ma. Przecież tam też się oblicza binarnie...
  2. Ja za to za javą zbytnio nie przepadam ;P. Ale uniwersalne zdolności programistyczne i to że jednak na wszelki wypadek mam kompilator również do javy to pozwoliłem sobie to sprawdzić i racja, w javie nie ma tego błędu. Nawet skopiowałem skrypt żeby było 30 liczb po przecinku i tak wszystko dokładnie obliczone. W takim razie czemu w C++ się to rypie? :mellow:
  3. O coś takiego Ci chodzi?: int a = 1000; int b = 1; for(;;){ cout << (static_cast<float>(b) / static_cast<float>(a)); --a; cout << endl; } Spróbowałem i wychodzą dużo gorsze błędy i większe różnice od prawdziwej wartości która powinna być. :/
  4. Witam. Ostatnio czytałem co nieco o typach z ułamkowych i postanowiłem sam sprawdzić kilka kwestii. Słabą dokładność przy dużych liczbach mogę wybaczyć, ale bardzo nietypowego błędu zwykłego dodawania już nie. O co mi chodzi? O to kod obrazujący to doskonale: #include <iostream> #include <iomanip> using namespace std; int main() { double a = 0; //moze byc zarowno float czy long double, efekt jest ten sam cout << a; cout << setprecision(32); //ustalanie precyzji ulamka dziesietnego for(;;) { a += 0.001; cout << a; cout << endl; } } Ten kod powinien dodawać nieskończenie 0.001 zaczynając od zera. I to robi, jednak dzięki funkcji "setprecision" można spojrzeć ukradkiem na część która jest zwykle ukryta. Mianowicie w po tej dodawanej części tysięcznej następuje ciąg zer, i na końcu też pojawiają się cyfry. Ale w kodzie nie dodawane są takie małe ułamki! Porównać to można do tego, że komputer niedokładnie dolewa wody do dzbanka zmiennej "a" że są te "nierówności". Co więcej, po wcale nie długim czasie ten błąd pomiarowy wpływa na wynik. Zamiast "1" dodaje jakimś cudem "0.9999..." i już jest strata jednej wartości. To może być wąż boa wychodowany na gardle jeśli próbujemy wewnętrznie liczyć czas w grze takim typem(bo potrzebowałby dokładności). Dziwi mnie taka kolej rzeczy, przecież komputery(a dokładnie procesory0 powinny być idealnie dokładne. Czym może być spowodowany ten błąd? Może to przez funkcję set precision(w co bardzo wątpie)? Wiem że nie jest to może jakiś critical error który przeszkadza w kompilowaniu programuale trochę mnie to irytuje że do takich zmiennych szczycących się wysoką dokładnością obliczeń po przecinku może wbić się taki błąd... I jestem ciekawy jaki jest tego powód :twisted:
  5. MZG

    Allegro - warstwy rysowania

    Problem rozwiązany :D. Ale nie, nie chodziło o przestawienie (próbowałem wcześniej), tylko o to że napis raz rzutowany na ekran nie był odświeżany. Czyli nie przechodził przez bufora, więc gdyby się ruszał zostawiał by ślady. Teraz jest wszystko dobrze :D Dzięki za to że chciało wam się w ogóle odpisywać, temat do zamknięcia.
  6. MZG

    Allegro - warstwy rysowania

    int draw_ball() { draw_sprite(bufor, kulka, b_x, b_y); blit( bufor1, screen, 0, 0, 0, 0, 1180, 720 ); } Tym kodem rysuje kulkę. int draw_text() { textout_ex(bufor, font, "jakiśtam tekst", 400, 10,makecol(0, 0, 0), -1); } Tym tekst. while (!key[KEY_ESC]) { (...fps...) while(fps_licz > 0) { int fps_stary_licz = fps_licz; hero.move_ball(); hero.speed_ball(); fps_licz--; if(fps_stary_licz <= fps_licz) break; } (...inne fps...) system.draw_text(); hero.draw_ball(); hero.debug(); clear_to_color(bufor, makecol(255,255,255)); textprintf_ex(bufor, font, 10, 10, makecol(0, 0,0),-1, "FPS:%d", fps_fps); } A to pętla gry. Tyle z kodem, jakoś sam nie wiem po co go pokazywać. Chciałbym wiedzieć jak zrobić te warstwy, bo kolejność w przypadku napisów chyba nie ma znaczenia :/
  7. MZG

    Allegro - warstwy rysowania

    No właśnie kolejność nie ma nic do rzeczy. Jakkolwiek bym kolejność nie ułożył ZAWSZE napis będzie za spritem. A co do parametru głębokości - to nigdzie go nie widzę i nie mam pomysłu jak on mógłby działać :/
  8. MZG

    Allegro - warstwy rysowania

    Witam. Próbuje swoich sił w bibliotece Allegro i mam pewien irytujący problem którego nie umiem rozwiązać. (Wspomnę że jestem początkujący, więc to jest błahy problem). Przykładowo - mam grę(jeśli można to tak nazwać) w której chodzę czerwoną kulką po ekranie. Chciałem aby jej prędkość była napisana w środku jej samej, w tym celu użyłem funkcji "textout_ex" z koordynatami skierowanymi na środek owej kulki. I tu pojawia się problem, tekst jest za kulką a nie przed nią. Jest jakiś sposób żeby to kontrolować "co będzie na czym"? Sposób żeby każdy napis lub sprite miał swoją warstwę. Żebym np. kulka była NA obrazku ziemi a POD teoretycznym "dachem"(patrząc z góry kulka po prostu schowała by się pod prostokąt)?
  9. ___________________________________________ ERROR in action number 1 of Step Event for object Real_wire: Error in code at line 3: xx1=start_line.x at position 17: Unknown variable x Wyświetliło się jak miałem klawiatura+Inkrementacja+Emiter Dźwięku ERROR in action number 1 of Step Event for object Gate_Plus: Error in code at line 26: in01=in01_id.out01; at position 15: Unknown variable out01 a to potem i tak na przemian
  10. No to może na poważnie: Grafika 0.5/5 (0.5 za to że grafika w ogóle jest), czy to ludzie, czy coś innego? Na pewno nie przypominają mi człowieka Dźwięki 2/5 No, muzyka czasami drażni moje biedne uszy, ale zawsze mogło być gorzej Grywalność 3/5 jeżeli weźmie się tą grę za żart, a 0/5 jeżeli całkowicie na poważnie. Plusy: + Śmieszne jakby na to patrzeć ale na pewno nie idzie w stronę - "Być dobrym programistą" Np:Czy w GTA chodzimy żółtym murzynem? Minusy: - Sama nazwa: "Seid do pobrania" - Używanie ręki do wspinania się to może był dobry pomysł ale używanie afro?! - Prolog (ta pierwsza misja z kolcami która oficjalnie misją nie jest) jest do bani - Sprity Ludzi (Raczej zwierząt) - Boss trudny że hej... Za pierwszym razem go nawet nie zauważyłem.... - ...a za drugim mnie oślepił (Qwadójkąło?) - Ten gościu co mam mu dać maskę jest... hm... chwile....co by tu powiedzieć....a już wiem.....jest ********************!!!!!!! - Cytat: daj mi tom maske i uciekaj bo jestes zagrożony..... - ... jest nieczytelny, ledwie skoczyłem nacisnąłem "Print Screen" i dopiero zobaczyłem - Ostatni level jest głupi i niema żadnego sensu. No kolce, niewidzialna zapadnia, a na dole jakiś buldożer. Biorąc pod uwagę tą fabułę to był "wrak buldożera" który go wywiózł z "zagrożenia"(czyt. szpitala dla psychopatów) Co to mogło znaczyć? Może wszystkie przygody po "maskę" to był tylko jego sen? Maybe potem jakiś jego kumpel wjechał do szpitala i go zabrał. Może te kolce, te na w pół-ludzie, Qwadójkąło i owy "Szef" to była tylko jego chora wyobraźnia? Dodatkowo jest(znaczy na stronie dyzmaken strona) jeszcze dodatek:The Seid Destiny który (sugerując po nazwie) potwierdza ucieczkę ze szpitala i majaczenie w drodze. Ogólna Ocena: 1/5
  11. gra bardzo słaba, lepiej rób gry prywatnie, a potem je wrzucaj, ok? Grafika 1/5 no, bugi czyli jak utopić się w ścianie Dźwięk 0/5 bo go niema Grywalność 0/5 bo jej też nie ma Ogólna ocena:0.25/5
  12. MZG

    Upadek

    działa ale trzeba było zamiast *2 to /2 bo za dużo hp odbierało THX wszystkim!
  13. MZG

    Upadek

    Tera w ogóle nie odejmuje życia
  14. MZG

    Upadek

    No dobra, ale cały czas są ułamki, przypomni mi ktoś kod na zaokrąglanie?
  15. MZG

    Upadek

    Ja mam grawitacje z FAQ, a tam jest: GML if place_free(x,y+1) {gravity = 0.5} else {gravity = 0} No działa, ale koleś skacze i 36 hp mu odbiera :/ EDIT: Zmniejszyłem skoczność ale i tak duże liczby, w dodatku wychodzą ułamki (zapomniałem kod na zaokrąglanie)
×
×
  • Dodaj nową pozycję...