Nasze strony: gmclan.org gameonly.pl ps-plus.pl gameswithgold.pl n-switch.pl hmt.pl
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
Akademia GMCLANu
Menu
Panel użytkownika
Jesteś niezalogowany!

Nie masz konta? Zarejestruj się
Kategorie bazy artykułów
Artykuły -> AKADEMIA: Game Maker Studio 2 -> Zmiany w GMS 2.3
Lekcja w akademii
×
GMS 2.3 - funkcje, kontstruktory, klasy, dziedziczenie, lekkie obiekty
autor: gnysek (31.01.20), czas czytania: 3 minuty, 19 sekund
Pokaż na pełym ekranie× Zamknij pełny ekran
GMS 2.3 zmienia dotychczasowe działanie skryptów.

Kiedyś definiowało się np. scr_leading_zero(); (np. funkcja dodająca zera poprzedzające do liczby) i wstawiało kod:
kod:return string_repeat("0", max(0, argument1 - string_length(string(argument0)))) + string(argument0);
Ale od nowej wersji, gdzie wprowadzono funkcje, nie ma już skryptów, więc tę samą funkcjonalność zapisujemy tak:

kod:function scr_leading_zero(a, b) {
return string_repeat("0", max(0, a - string_length(string(b)))) + string(argument0);
}

Wskazówka:
GM 2.3 sam przekonwertuje skrypty na funkcje. Ponieważ argument0...argument15 nie jest już używane przez skrypty, w trakcie konwersji tak zostaną nazwane nasze argumenty funkcji, co pozwala nie utracić funkcjonalności. Nadal natomiast działa argument_count i argument[n] dla uzyskania "opcjonalnych" argumentów.
[hr]
GLOBALNY ZASIĘG

Co ważne, od wersji 2.3 wszystko co wpiszemy w skryptach, wykona się w trakcie inicjacji gry (przed pierwszą klatką), w zasięgu globalnym (tak jakby w ramach global.). Każda zmienna więc stanie się globalna.

I tak, w GMS 1.0 - 2.2 mogliśmy uzyskać globalną zmienną bez prefixu global. za pomocą (nie dało się nadać od razu wartości, w przeciwieństwie do var):
kod:globalvar NAZWA; NAZWA = 1;Od wersji 2.3 możemy napisać w skrypcie:
kod:NAZWA = 1;I zmienna już będzie globalna. Oczywiście można nadal używać global.
[hr]
Stałość funkcji
GMS 2.3 pozwala tworzyć funkcje anonimowe (lambda), które można przypisać do zmiennej. Dzięki temu, funkcja może być elementem tablicy, struktury ds_xxx, czy nawet przypisana do zmiennej tymczasowej i znika z pamięci, gdy zniknie przypisanie do zmiennej/elementu struktury/tablicy (skasowanie lub zmiana wartości).

Oznacza to, że pisząc:
kod:function a() {return 1;}W całej grze nie można już używać zmiennej pod nazwą "a" w obiektach/funkcjach, gdyż jest to identyfikator funkcji (można go np. użyć do script_execute).
kod:a = function() {return 1;}Przypisanie jednak funkcji do zmiennej (wtedy nie podajemy już nazwy), powoduje, że możemy tą samą zmienną nadpisać potem czymś innym (liczba, string, inna funkcja). Wciąż można użyć script_execute, ale napisanie a = 1; usunie funkcję z pamięci.
[hr]
Konstruktory - namiastka klas w GMS 2.3

Jeżeli chcielibyśmy skorzystać z funkcjonalności podobnej do struktur, i przetrzymywać w niej dane, ale nie umożliwiać już tak dynamicznego dodawania elementów, można stworzyć konstruktor funkcji w innych językach nazywany klasą.

Należy wtedy przed nawiasem klamrowym[b] dodać instrukcję [b]conctructor. Dozwolona jest oczywiście przemienność, powodująca możliwość nadpisania.

kod:class_a = function() constructor() {};
function class_b() constructor {};

Oczywiście w takiej "klasie" można wstawiać kolejne funkcje, tablice i struktury.

kod:
Vector2 = function(_x, _y) constructor {
x = _x;
y = _y;
static Add = function( _other ) {
x += _other.x;
y += _other.y;
}
};
a nowy egzemplarz takich funkcji tworzymy z pomocą instrukcji new:
kod:var a = mystruct();
var b = Vector2(5,10);
Wskazówka:
Instrukcja static oznacza, że dana funkcja będzie współdzielona, zamiast nowa jej instancja tworzona wraz z każdą nową instancją struktury
[hr]
Funkcje-konstruktory mogą też dziedziczyć po innych funkcjach-konstruktorach - służy do tego znak dwukropka:
kod:function Vector3(_x, _y, _z) : Vector2(_x, _y) constructor {
z = _z;
static Add = function( _other ) {
x += _other.x;
y += _other.y;
z += _other.z;
}
};
Można wtedy napisać:
kod:var v1 = new Vector3(10, 10, 20);
var v2 = new Vector3(100, 100, 200);
v1.Add( v2 );
show_debug_message(v1);

Funkcje z konstruktorem przypominają więc struktury (albo struktury zwracane funkcją), ale pozwalają na nieco więcej opcji, z drugiej strony ograniczając swoją strukturę początkową definicją.

Zwykła struktura przypomina więc bardziej JSONa, a funkcje - klasy.
Komentarze
stron: 1

1


av

Uzjel (16:49, 31.01.2020)

Tyle zmian, że nie wiadomo jak teraz projekty przerabiać

stron: 1

1



Dodaj komentarz:
Treść:

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

[ Czas generowania strony: 0.21765 sekund ] [ Liczba zapytań MySQL: 10 ]