Fastbar
Powrót do strony głównej
Trzymaj pliki na gmclan.org!
Game Maker w pytaniach i odpowiedziach!
Polska dokumentacja
Tabela wyników ligi 24
Pobierz GM
Akademia GMCLANu
Kategorie bazy artykułów
Artykuły -> Game Maker -> Kursy GML
Treść artykułu
Operacje na zmiennych
autor: gnysek (5.11.09)
W Game Makerze wyróżniamy dwa typy zmiennych:

1) Zmienne liczbowe (real) - są to po prostu liczby rzeczywiste, np. a = 5, a=17.32, a = $A1 (szesnastkowo 161);

2) Łańcuchy tekstowe (string) - są to zmienne zawierające tekst, np. a = 'tekst';

Należy jednak zauważyć, że a=5 to nie to samo co a='5', gdyż tekst nie jest liczbą i na odwrót i tych dwóch typów nie wolno bezpośrednio ze sobą porównywać.

Do zamiany liczby w tekst służy funkcja string(), do zamiany tekstu w liczbę służy funkcja real(), jednak tekst taki może zawierać tylko cyfry, znak minus, kropkę oddzielającą część dziesiętną oraz znak wykładniczy E (np. 1.E+1), bez liter i innych znaków.

Istnieje również wiele funkcji pozwalających na bardziej zaawansowane działania na zmiennych, skupię się jednak tylko na operatorach.

Operacje na łańcuchach tekstu:

Na tekście możemy dokonać dwóch operacji:

1) Konkatenacja, czyli łączenie tekstów: np. a = 'xxx' + 'yyy', a+='xxx';

2) Konkatenacja tekstu z samym sobą określoną ilość razy, np. a = 5 * 'x' zwraca 'xxxxx';


Operacje na liczbach:

Na liczbach można wykonać następne operacje:

Dodawanie: a=5+7; a=a+5, a+=5;

Odejmowanie: a=5-7; a=a-5; a-=5;

Zmiana znaku na przeciwny: a = -a;

Mnożenie: a=5*7; a=a*7; a*=7;

Dzielenie: a=5/7; a=a/7; a/=7; (nie można dzielić przez 0!)

Dzielenie całkowite div (dzielenie bez reszty / z zaokrągleniem w dół): a = 7 div 3 (7 div 3 = 2, bo 7/3 = 2, reszty 1);
Wynikiem dzielenia całkowitego jest zawsze liczba całkowita.

Reszta z dzielenia modulo : a = 7 mod 3 (7 mod 3 = 1, bo 7/3 = 2 reszty 1);
Reszta z dzielenia x mod y jest zawsze liczbą z zakresu od 0 do y-1.

Porównania:
Do porównań funkcji służą następujące operatory:
>, >=, ==, !=, <> , <, <= : większe, większe równe, równe, nierówne, różne, mniejsze, mniejsze równe

W Game Makerze nie ma funkcji post/pre-inkrementacji oraz post/pre-dekrementacji, które występują w innych językach.


Operacje logiczne:

W operacjach logicznych rozróżniamy dwie wartości: true, false. Wartość true (prawdę) oznaczają wszystkie liczby > 0, oraz stała true, wartość false (fałsz) oznaczają wszystkie zmienne <= 0 oraz stała false. Wykorzystywane są głównie do operacji warunkowych (if, while, etc.)

Rozróżniamy następujące operacje logiczne:

&&, and: prawdziwa, gdy wszystkie wartości wyrażenia mają wartość true, fałszywa w pozostałych przypadkach, np. 7 and 14 to prawda, 7 and -1 to fałsz.

||, or: prawdziwa, gdy co najmniej jedno wyrażenie jest prawdziwe, fałszywe tylko gdy wszystkie są fałszywe, np. 7 or -1 to prawda, 0 or -1 to fałsz.

^^, xor: prawdziwa, gdy oba argumenty są sobie przeciwne, fałszywa, gdy są takie same, np. 7 xor -1 to prawda, 7 xor 14 to fałsz

!: negacja, zamienia prawdę w fałsz i na odwrót, np. x = !7 to fałsz, x = !0 to prawda, x = !x zamienia prawdę w fałsz i na odwrót



Operacje bitowe:

Operacje bitowe to operacje, które zachodzą bezpośrednio na bitach liczby w systemie dwójkowym, np. liczba 12 to binarnie 1100.

>> : przesunięcie podanej ilości bitów w liczbie w prawo, poprzez usunięcie bitów na najmłodszej pozycji i dopisanie zer na najstarszej
np. 12 >> 1 to 6, 12 >> 2 to 3 (bo 1100 >> 1 = 0110 czyli 6, 1100 >> 2 = 0011, czyli 3)
Przesunięcie bitów w prawo o 1 jest równoznaczne z operacją dzielenia przez 2.

<< : przesunięcie podanej ilości bitów w liczbie w lewo, poprzez usunięcie bitów na najstarszej pozycji i dopisanie zer na najmłodszej
np. 12 << 1 to 24, 12 << 2 to 48 (bo 1100 << 1 = 1 1000 czyli 24, 1100 << 2 = 11 0000, czyli 48)
Przesunięcie bitów w lewo o 1 jest równoznaczne z operacją mnożenia przez 2.

|, &, ^ : operacje or,and,xor na bitach liczby
12 | 3 = 15, bo 1100 | 0011 = 1111
12 & 4 = 4, bo 1100 & 0100 = 0100
5 ^ 3 = 6, bo 0101 ^ 0011 = 0110

~: negacja bitowa liczby, np. ~12 = -13, bo 12 = ~0000 0000 ... 1100 = 1111 1111 ... 0011 (zmieniany jest także bit parzystości, liczby w GM mają 8 bajtów, od -9223372036854775808 do +4611686018427387904, dla których oznaczenie INF (nieskończoność) nie pozwala na operacje dodawania / odejmowania)

**********

Funkcje takie jak potęgowanie, pierwiastkowanie, logarytmowanie etc. wykonywane są przez funkcje wbudowane w Game Makera, nie są jednak operatorami, więc do ich poznania polecam lekturę dokumentacji programu.
głosów: 5 | ocena: 6.40 oceń zasób | dodał: gnysek
Komentarze
stron: 21

2


av

MagnusArias (18:13, 25.03.2010)

A czy w operacjach logicznych, wykrzyknika nie można zamienic cząstką"not" ? no zamiast "if !instance_exists", to "if not instance_exists"

av

Makary155 (13:30, 26.03.2010)

! - not
&& -and
|| -or.

stron: 21

2



Dodaj komentarz:
Treść:
Menu
Panel użytkownika
Jesteś niezalogowany!

Nie masz konta? Zarejestruj się
Użytkownicy on-line
1 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 1, userów: 0, ukrytych: 0
Użytkownicy na czacie discord
exp (23:59, 9.12.18):
teraz spoko wygląda
MaxGaming (23:28, 9.12.18):
To już dużo lepsze! Chociaż nadal wygląda trochę jakby to był bug a nie feature
gnysek (22:33, 9.12.18):
ok, to zostawię wersję pierwszą jaką miałem - zmniejszenie przeźroczystości. Będą lekko jaśniejsze ikonki.
MaxGaming (22:24, 9.12.18):
ale nie wszystko na szaro(bo najczęściej większość tematów jest szara przez mały ruch)
MaxGaming (22:24, 9.12.18):
lepiej już oznaczyć wykrzyknikiem małym te nowe, albo coś
MaxGaming (22:23, 9.12.18):
Według mnie to glupio działa. Nagle wszystko jest szare jakby się zepsuło
gnysek (17:26, 9.12.18):
Od teraz posty napisane przed waszą ostatnią wizytą dostaną szarka ikonkę na stronie głównej - łatwiej znaleźć nowy kontent
MaxGaming (17:22, 9.12.18):
po prostu rób coś, zdobywaj doświadczenie i czytaj na jakiś temat żeby się rozwijać
exp (16:43, 9.12.18):
kurczę chciałbym się znać na czymś tak jak ty na gamedevie
exp (16:42, 9.12.18):
aha, więc to o to chodzi
gnysek (13:51, 9.12.18):
prawdopodobnie po to, żeby Steam VAT odprowadzał w stanach, w których trzeba, w Twoim imieniu.
gnysek (13:51, 9.12.18):
bo teraz 100$ wystarczy, tylko z polskiego punktu widzenia musisz zgłosić firmę do podatku (zerowego), w USA (telefonicznie), żeby dostać ichni NIP.
exp (13:40, 9.12.18):
właśnie też wyczytałem to w regulaminie, no ale coś mi tu nie pasuje. ludzie ciągle wrzucają na steama takie gówienka, że nie wierzę, że oni się tak wysilali
gnysek (13:24, 9.12.18):
musiałbyś założyć firmę, zawrzeć umowę ze steam itd.
Temporal (9:52, 8.12.18):
ambicje zawsze nas gubią
exp (22:52, 7.12.18):
w sensie 99 dolarów
exp (22:50, 7.12.18):
tak z ciekawości, jakbym chciał sprzedawać swoją grę, np. na steamie, to po prostu wystarczy zrobić upgrade do wersji "developer" za cztery stówki?
exp (14:37, 7.12.18):
ale mój poprzedni koncept był całkiem fajny i chyba oryginalny. było to tak jakby połączenie spelunky i contry, choć nie do końca
exp (14:36, 7.12.18):
znów naszła mnie ochota na zrobienie gierki i dobrze wiem, że skończy się tak, że mój prosty pomysł się rozrośnie i nigdy jej nie skończę
MaxGaming (23:53, 6.12.18):
co tam u was mordeczki
MaxGaming (3:01, 5.12.18):
też o tym myślałem, lub po prostu ograniczenie np maks 4 strzał i trzeba wytwarzaćnowe
gnysek (23:04, 4.12.18):
Dzida/oszczep. Można rzucać i ma jakaś tam wytrzymałośc, nie trzeba naboi, w razie czego można wytwarzać nową.
exp (19:16, 4.12.18):
może zastawianie pułapek
MaxGaming (17:45, 4.12.18):
U mnie to działa trochę inaczej. Ciężko ranne zwierze przyśpiesza i albo ucieka albo podejmuje walkę i wtedy szarżuje w naszym kierunku
MaxGaming (17:41, 4.12.18):
np łuk, tylko trzeba to tak zrobić aby taki łuk nadawał się jedynie do absolutnie podstawowych celów
MaxGaming (17:41, 4.12.18):
ze trzeba coś zrobić jako taką broń powszednią która akurat będzie miała sporo naboi i łatwo je będzie zdobyć
MaxGaming (17:40, 4.12.18):
hmm, ciekawy system, ale na razie chodzi mi
gnysek (17:37, 4.12.18):
wtedy można mieć mało naboi i ryzykujesz, albo strzelasz 2/3 razy i zgon od razu, albo czekasz aż padnie
gnysek (17:36, 4.12.18):
duże powinny krwawić, jednym strzałem = czekasz 5 minut na śmierć, albo strzelasz dalej
MaxGaming (17:35, 4.12.18):
a chodzi mi o stworzenie bardzo realnego respectu dla dużych zwierząt, chcę żeby polowanie na coś dużego było dla gracza czymś wyjątkowym i odświętnym, kiedy znajdzie jakąś amunicję do fajniejszej broni
MaxGaming (17:34, 4.12.18):
Co nie jest takie proste, bo strzelanie z łuku 3 razy żeby zabić zająca to na przykłąd pomyłka i byłoby bardzo śmiesznie. Zabicie zająca za jendym strzałem = obrażeniom na tyle dużym że na upartego upolowałoby się i dużo większe zwierzęta
MaxGaming (17:34, 4.12.18):
coś takiego żeby nie dało się z tego za wiele zrobić, ale żeby wystarczyło na polowanie na najprostrze zwierzęta pokorju zająca żeby zdobyć pożywienie
MaxGaming (17:33, 4.12.18):
a same pociski będą na wagę złota. Tylko muszę wymyślić jak w to wszystko wpleść uzbrojenie inne niż broń palna
MaxGaming (17:33, 4.12.18):
broń krótka na prawdę nie za bardzo nadaję się do polowania ze względu na swój bardzo mały zasięg i celność, broń pokroju kar98k dla gracza który według fabuły nie za bardzo miał wcześniej kontakt z militariami nie jest szybka do przeładowania i chociaż ma duży zasięg i potrafi powalać z nóg na prawdę szybko to jednak jeden pochopny strzał i zanim przeładujemy to możemy być już martwi
MaxGaming (17:31, 4.12.18):
ale jednoczęśnie funkcjonalna. Unikam realizmu na siłę który by komplikował rozgrywkę i zmieniał ją w niezrozumiałą, a staram się to nadrobić po prostu realizmem w postaci ograniczeń które nałożone są na nas
MaxGaming (17:30, 4.12.18):
jak wspominałem już moja gra ma być jak najprostrza zarówno dla gracza jak i dla mnie w rozwijaniu
MaxGaming (17:30, 4.12.18):
a w grze otwartego świata wcale być nie miało, dopiero w trakcie tworzenia doszedłem do wniosku że można to łatwo i fajnie zrobić i jednoocześnie uniknąc problemów typu "mam misje fabularną 10tyś pikseli ode mnie"
MaxGaming (17:29, 4.12.18):
ale to ma swój haczyk, bo nie dałoby się w tak prosty sposób zrobić otwartego świata, ale wiem jak obejść minusy tego
MaxGaming (17:28, 4.12.18):
Zrobiłem w swojej grze teoretycznie nie limitowany niczym otwarty świat, w praktyce jedynym limitem jest pozycja, czyli zwyczajnie żeby x i y były w stanie się zmieścić w int'cie
MaxGaming (17:09, 4.12.18):
#JANUSZ100%
MaxGaming (17:05, 4.12.18):
To ja daję 20euro jak zorganizujesz to tak że ja ją wygram
gnysek (10:43, 4.12.18):
mam nadzieję w święta w końcu wgrać zmiany które mam gotowe i ruszyć z drugim sezonem ligi 24... jakieś nagrody zorganizujemy, sam osobiście dam kartę na 25eur na Steam
gnysek (10:41, 4.12.18):
że kiedyś był cebulacki ?
Wojo (23:53, 3.12.18):
polemizowałbym
exp (22:56, 3.12.18):
Wojo gmclan raczej nie jest takim cebulackim forum, może kiedyś trochę było, ale i tak wszystko w granicach
MaxGaming (1:05, 3.12.18):
słuszna uwaga w sumie
gnysek (0:42, 3.12.18):
spróbuj z while
MaxGaming (23:34, 2.12.18):
Wybaczcie bo nie jestem w stanie wygooglować. Ma ktoś pojęcie jaka jest maksymalna ilość znaków dla stringa w GMS 1.4?
Wojo (21:55, 2.12.18):
czyli mniej więcej tak jak na gmclanie
exp (19:57, 2.12.18):
potem mogą walić konia do swojej elitarności na swoim forum z 9 użytkownikami
Ankieta
» Jakie kursy najchętniej widziałbyś na stronie ?
GM Studio
GM Studio 2
Godot
Construct

GMCLAN to serwis o programie Game Maker i nie tylko.
[ Polityka prywatności ]
Copyright © 2002-2018. GMCLAN.ORG
Wszelkie prawa zastrzeżone. Kopiowanie materiałów bez zgody redakcji zabronione!
© 2002-2017 Ranmus (ranmus.pl), © 2017-2018 {=|=} fable_inside();

[ Czas generowania strony: 0.02176 sekund ] [ Liczba zapytań MySQL: 13 ]