Ikarusowe FLOAT 4580 10

O temacie

Autor Bogdan Zwei

Zaczęty 20.05.2016 roku

Wyświetleń 4580

Odpowiedzi 10

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Witam. Dzisiaj opiszę wam floaty z Ikarusów (w zasadzie, nie jest to jako tako tylko w Ikarusie), bo nie każdy z Was je ogarnia.

Najpierw, co oznacza sama nazwa FLOAT? Nic innego jak liczba, która ma jeszcze coś po przecinku (tak, nigdy nie słuchałem na matematyce, nie wiem jak wam to powiedzieć), czyli na przykład 1.69, 4.20, 46.2378478 itd.

Przejdźmy do opisania poszczególnych funkcji i wyjaśnienia ich.
Spoiler
mkf(int) - Make Float - Stwórz Float -> Przeobraża liczbę int (czyli np. 16, 33, 120, 420) w float, czyli po zapisaniu mkf(1); otrzymamy dziwną liczbę, jeśli ją wyświetlimy w grze poprzez np. Print(). W tym przypadku otrzymamy liczbę 1065353216, czyli 1.0 (nie 1, bo już mamy float, a nie int).

truncf (int) - Truncate Float - Zetnij float -> Przywraca Float do inta. Czyli, jeśli nasz float wynosi 1.0, zmieni go na 1 (int), jeśli nasz float wynosił 3.528, przywróci nam 3. Ważna uwaga, int działa tak, że odczytuje tylko liczbę pierwszą, przed przecinkiem, czyli jeśli nasz float będzie miał 3.999... to i tak dostaniemy 3 z powrotem (obcina przecinek).

roundf (int) - Round Float - Zaokrąglij float -> konwertuje naszego float do int, zaokrąglając jego wartość, czyli jeśli po przecinku będzie 5 i więcej, zwiększy nam wartość o jeden do góry i odda int. Przykład: 4.3 = 4, 7.6 = 8.

addf (int x, int y) - Add Floats - Dodaj floaty -> dodawanie, floatów nie da się dodawać jak inty, trzeba używać tej funkcji. Jeśli nie wiadomo, co znaczy dodawanie: łączy liczbę X i liczbę Y, np. 1+1=2.

subf (int x, int y) - Subtract Floats - Odejmij floaty -> odejmowanie floatów. 2-1=1.

negf (int) - Negate Float - Negacja floata -> przeobrażanie liczby dodatniej na ujemną (np. -1 = 1).

mulf (int x, int y) - Multiply Floats - Pomnóż floaty -> mnożenie. 4*4 = 16.

divf (int x, int y) - Divide Floats - Dziel floaty -> dzielenie. 16/4 = 4.

invf (int) - Inverse Float -> Nie do końca wiem o co tu chodzi, dzieli 1 przez wasz float, czyli np. 1/32 = 0.03125.

fracf (int x, int y) - to samo co divf (nie wiem po co).

gf (int x, int y) - Greater Float - Większy float -> zwraca true jeśli x > y, false jeśli nie.

gef (int x, int y) - Greater or Equal Float - Większy bądź równy float -> zwraca true jeśli x > y, lub x = y, false jeśli mniejszy.

lf (int x, int y) - Lower Float - Mniejszy float -> zwraca true, jeśli x < y.

lef (int x, int y) - Lower or Equal Float - Mniejszy bądź równy float -> zwraca true jeśli x < y, lub x = y, false jeśli większy.

sqrtf (int) - Square root Float - Skróć Float -> zmniejsza float z x.abcdef... do x.abcd.

sqrtf_approx (int) - to samo, co sqrtf, tyle, że zaokrągla ostatnią liczbę, czyli 3.5888883 = 3.5889.

printf (int) - Pokazuje napis z wartością naszego floata. Osobiście polecam to, ponieważ nie ucina żadnych liczb i można użyć do wszystkiego, nie tylko, żeby wyświetlić wartość na ekranie.
Ten pakiet floatów pozwala na edytowanie dużej ilości wartości systemowych, takich jak deszcz, chmury, rozmiar słońca, a także szerokość ekranu czy innych rzeczy, oznaczonych jako zFLOAT czy zREAL.
Zmienne (te systemowe oczywiście) oznaczone tymi oto komentarzami nie czytają intów (tzn. czytają, ale musi być przekonwertowany na bitowe floaty). Można także edytować te zmienne bez używania tego pakietu, ale wtedy trzeba będzie znać konwertowanie intów do bitów, a tego raczej nie jest nikt w stanie się nauczyć.

Teraz parę przykładów użycia tych floatów.

var int TwoAndHalf; TwoAndHalf = divf(mkf(25), mkf(10)); //2.5
var int ThreeSeventyFive; ThreeSeventyFive = divf(mkf(375), mkf(100)); //3.75
var int FiveTwentyFive; FiveTwentyFive = addf(ThreeSeventyFive, TwoAndHalf); //5.25 !!! UWAGA! Jeśli float jest zapisany w zmiennej, nie używamy już mkf, ponieważ jest on już floatem.
var int TenAndHalf; TenAndHalf = mulf(FiveTwentyFive, mkf(2)); //10.5
var int Eight; Eight = subf(TenAndHalf, TwoAndHalf); //8
var int MinusEight; MinusEight = negf(Eight); //-8

Teraz przykłady zmiennych, które posługują się tylko i wyłącznie floatami:

MEM_SkyController.cloudShadowScale = 1; // wynosi 0, bo nie jest float
MEM_SkyController.cloudShadowScale = 180; // wynosi 0, bo nie jest float
MEM_SkyController.cloudShadowScale = 95771; // wynosi 0, bo nie jest float
MEM_SkyController.cloudShadowScale = mkf(1); // wynosi 1, bo jest float
MEM_SkyController.cloudShadowScale = mkf(951); // wynosi 951, bo jest float
MEM_SkyController.cloudShadowScale = mkf(18883636); // wynosi 18883636, bo jest float

Teraz odczytywanie. Jeśli używacie tego, możecie także dodać funkcję do książki (jak na screenie), lub do printu lub gdziekolwiek:
Print(Float32ToString(TenAndHalf)); // napis 10.5 na ekranie
Print(Float32ToString(MinusEight)); // napis -8 na ekranie
Samo Float32ToString(x) można wpakować do stringa i używać gdziekolwiek się chce (oczywiście razem ze stringami).
W przeciwnym razie używacie Printf(x) i pokazuje się wam na ekranie float x.abcd (np. 10.5000).

Teraz potrzebujemy przekonwertować nasze Eight (8) do inta, bo potrzebujemy (nie wnikam gdzie i po co), lecz wiedząc, że wynosi 8.0, a nie 8.x, to używamy truncf.
var int intEight; intEight = trunkf(Eight); //int 8
Ale w sumie, potrzebuję jeszcze przekonwertować TenAndHalf (10.5) do inta, lecz wiem, że zmienna ta wynosi coś między 10 a 11:
var int intTenAndHalf; intTenAndHalf = roundf(TenAndHalf); //11, ponieważ jeśli zaokrąglimy 10.5 to da nam 11

Teraz możemy używać intEight (8) i intTenAndHalf (11) gdziekolwiek chcemy, możemy dodać do odporności pancerza, do obrażeń jakiejś broni itp.



To chyba na tyle. W razie jakichkolwiek pytań piszcie.

Zabraniam kopiowania. Temat powstał tylko dla użytkowników tego forum.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Siemekk

Siemekk

Złote Wrota
Untersturmfuhrer
posty2143
Propsy1151
ProfesjaProgramista
  • Złote Wrota
  • Untersturmfuhrer
A chciałem pisać w problematyce o float'cie a tu proszę tutorial. Łap zasłużonego propsa,  dzięki temu moje umiejętności rosną :lol2:
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
A chciałem pisać w problematyce o float'cie a tu proszę tutorial. Łap zasłużonego propsa,  dzięki temu moje umiejętności rosną :lol2:

Czytam Ci w myślach!  :lol:
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.

Bogdan Zwei

Ikarusowe FLOAT
#3 2016-05-30, 14:02(Ostatnia zmiana: 2016-05-30, 14:09)
Taki mały dodatek:

Czasami trzeba używać długich zmiennych floatowych, które są ogromne i trudno się zapisuje. Przez to polecam albo zapisywać oddzielnie i potem dodawać po kolei, albo używać zmiennych i przypisywać wszystko zmiennymi. Przykłady:

roundf(mulf(addf(mulf(divf(mulf(mkf(hero.attribute[ATR_DEXTERITY]), mkf(60)), mkf(350)), mkf(hero.level)), mkf(hero.attribute[ATR_HITPOINTS])), divf(mkf(25), mkf(100))));
Jak widać dosyć duży fragment, ale zawsze można go uprościć, zapisując poszczególne floaty jeden pod drugim, po czym dodać do siebie:
mulf(mkf(hero.attribute[ATR_DEXTERITY]), mkf(60))
divf(, mkf(350))
mulf(, mkf(hero.level))
addf(, mkf(hero.attribute[ATR_HITPOINTS]))
mulf(, divf(mkf(25), mkf(100)))
roundf();

Dla niekumatych:

Cytuj
1.   mulf(mkf(hero.attribute[ATR_DEXTERITY]), mkf(60))
2.   divf(1., mkf(350))
3.   mulf(2., mkf(hero.level))
4.   addf(3., mkf(hero.attribute[ATR_HITPOINTS]))
5.   mulf(4., divf(mkf(25), mkf(100)))
   roundf(5.);

Albo użyć zmiennych:

var int source; source = mulf(mkf(hero.attribute[ATR_DEXTERITY]), mkf(60));
var int DivideSourceWithLimit; DivideSourceWithLimit = divf(source, mkf(350));
var int MultiplyDivision; MultiplyDivision = mulf(DivideSourceWithLimit, mkf(hero.level));
var int AddToHealth; AddToHealth = addf(MultiplyDivision, mkf(hero.attribute[ATR_HITPOINTS]));
var int ReduceToProperSize; ReduceToProperSize = mulf(AddToHealth, divf(mkf(25), mkf(100)));
roundf(ReduceToProperSize);


Osobiście polecam sposób bez zmiennych (czyli ten pierwszy), ponieważ zmienne niepotrzebnie zaśmiecają grę (można je wyczyścić, jak się ich już nie potrzebuje, ale i tak zawsze miejsce będzie zajęte). Każda zmienna (pusta) zajmuje 1 bajt (jeśli dobrze pamiętam) i dodana jest do tego wielkość zmiennej (czyli jak zmienna wynosi 1, zajmuje 2 bajty, jeśli zmienna string ma dwa znaki, zajmuje 3).


Dziękuję. :F

 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Siemekk

Siemekk

Złote Wrota
Untersturmfuhrer
posty2143
Propsy1151
ProfesjaProgramista
  • Złote Wrota
  • Untersturmfuhrer
Pozwól że cię poprawię :F
Cytuj
fracf (int x, int y) - to samo co divf (nie wiem po co).
Różnica jest taka że w divf jako argumenty podajemy zmienne typu float. divf(mkf(2),mkf(2));
Zaś w fracf jako argumenty podajemy liczby bez przecinka :F
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Dodatki:
absf(int) - Trudno stwierdzić, co to za skrót (abs) - Zmienia -float na +float.
invf(int) - W sumie walić nazwy, po co to komu - dzielenie float 1 przez nasz float.
fracf(int x, int y) - dzielenie, nie wymaga wpisywaniu mkf do zmiennych. Słusznie zauważył SiemaczyS.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

A.K.

A.K.

Użytkownicy
posty159
Propsy161
Profesjabrak
  • Użytkownicy
absf(int)
Może wartość bezwzględna (absolute)?
 

Siemekk

Siemekk

Złote Wrota
Untersturmfuhrer
posty2143
Propsy1151
ProfesjaProgramista
  • Złote Wrota
  • Untersturmfuhrer

Siemekk
Złote Wrota

Ikarusowe FLOAT
#7 2017-04-17, 12:04(Ostatnia zmiana: 2017-04-17, 13:44)
Kolejny błąd :F Lepiej edytuj :)
sqrtf (int) - Square root Float - Wyciągnij pierwiastek kwadratowy z floata. Czyli jeżeli np. float będzie = 16, to ta funkcja zawróci nam liczbę 4!
sqrtf_approx (int) - Nie jest używane - robi to samo co sqrtf(int); dowód:

 /* deprecated */
func int sqrtf_approx(var int f) { return sqrtf(f); };
Wpadłem na to z potrzeby wyciągania pierwiastka do normalizacji wektora.

Edit: To jest tak jest w wersji Ikarusowej :F Chociaż dziwne bo w C++ funkcja sqrt = pierwiastek z ...
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Tak jest w nowszej wersji float. Na starej wersji (tzn. teraz tej, która nie wymaga Ikarusa) działa tak jak ja napisałem. Powinieneś poprawić swój post.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Siemekk

Siemekk

Złote Wrota
Untersturmfuhrer
posty2143
Propsy1151
ProfesjaProgramista
  • Złote Wrota
  • Untersturmfuhrer
Jest jakaś nowa wersja? Można link?
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Najnowsza jest z 2012 bodajże. Ta używa Ikarusa, a stara go nie używa.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry