Zaloguj się by uzyskać pełen dostęp. Nie masz jeszcze konta? Założ je już teraz w kilka sekund.

Wysłany: 2013-09-27, 22:21


Brzysiek

Skrypter pralek






Wiek: 27
Na forum: 5199 dni
Posty: 488
Nick w MP: Brzysiek

Piwa: 1034

Respekt: 360
Respekt: 360Respekt: 360Respekt: 360Respekt: 360

W MTA jest bardzo ma?o skrypt?w napisanych za pomoc? klas. Skryptowanie t? technik? daje nam du?e u?atwienia i jest bardzo przejrzyste.
Przed przeczytaniem tego poradnika do ko?ca - radz? zapozna? si? z poj?ciem programowania obiektowego.

Jako nasz przyk?ad we?miemy sobie supermarket, w kt?rym b?dziemy robi? zakupy. Na pocz?tku musimy wzi??
koszyk, bo oczywi?cie nie b?dziemy nosi? zakup?w w r?kach :) .

Musimy zdeklarowa? nasz koszyk jako nowy obiekt, do kt?rego b?dzie wk?adali rzeczy.

local koszyk = {} -- deklarujemy nowklas?
koszyk.__index koszyk -- w??czamy index klasy koszyk do tej klasy

O co chodzi z drug? linijk?? Ma?a powt?rka. Je?li spr?bujemy wywo?a? pole w tabeli, kt?ra jest pusta, zwr?ci
nam ona nil. Je?li dodamy index(czyli __index, kt?ry mo?e zawiera? funkcj? lub tabele), Lua wpierw spojrzy na zawarto?? indexu, i u?yje jego zawarto?ci w funkcjach kt?re s? wy?owywane przez ow? tablic?. Mo?e
to czyta si? zagmatwanie, ale zrozumienie tego poj?cia przyda si? w dalszej cz??ci poradnika.
Kontynuujemy tworzenie naszego koszyka.

function koszyk:new(przedmioty)
    atrybuty = {} -- tworzymy tabelew kt?rej..
    atrybuty.przedmioty przedmioty -- ..dodamy przedmioty do klasy.
    setmetatable(atrybutykoszyk) -- ??czymy tabele z przedmiotami naszego koszyka z klaskoszykOd teraz klasa "pami?ta", ?e mo?emy w?o?y? do niej przedmioty.
    self.__index self -- wlaczamy index klasy do tej klasy
end

My?l?, ?e ten kod jest w miar? zrozumia?y. Mo?esz mie? problem ze zrozumieniem przedostatniej linijki, kt?ra
zawiera self. Za pomoc? tego wyra?enia mo?esz zwr?ci? klase kt?ra jest w funkcji. Zaraz zrozumiesz, o co z tym chodzi.

Wracamy do naszych zakup?w. Podchodzimy do p??ki ze s?odyczami. Zauwa?amy czekolad? w promocji, wrzucamy j? do naszego obiektu(koszyka). Nie b?dziemy tworzy? nowych funkcji odpowiedzialnych za wk?adanie x prodkukty, lecz zrobimy jedn?.


function koszyk:wrzuc(przedmiot) -- tworzymy funkcjektora jest w klasie
    if przedmiot then
        self.przedmioty przedmiot -- uzywamy selfby wydobyc liste przedmiotow po czym 'wkladamy' przedmiot do koszyka
    end
end
koszyk:wrzuc("Czekolada")


Co ju? mamy w naszym koszyku?

function koszyk:pokaz()
    return self.przedmioty -- zwracamy przedmioty
end
koszyk:pokaz() -- rezultat"Czekolada"


Mam nadziej?, ?e zrozumieli?cie to w przynajmniej ma?ym stopniu. Podam przyk?ad zwi?zany z MTA.


local panowie = {}
panowie.__index panowie
local idpana function panowie:stworz(skinrotxyz)
    idpana idpana 1
    atrybuty = {}
    atrybuty.skin skin
    atrybuty.rot 0
    atrybuty.id idpana
    atrybuty.x
    atrybuty.y
    atrybuty.z
    createPed(skinxyzrot) -- tworzymy peda
    setmetatable(atrybutypanowie)
    self.__index self
end
function start()
    panowie:stworz(03003050)
    panowie:stworz(05009030)
    panowie:stworz(070305060) -- tworzymy 3 panow
end
addEventHandler("onResourceStart"resourceRootstart)

function panowie:informacje(idpana)
    if self.id == idpana then -- jesli id podane w funkcji jest rowne id w klasie
        return outputChatBox("ID Pana: "..tostring(idpana).."\n"
                                Skin"..tostring(self.skin).."\n"
                                X, Y, Z: "..tostring(x)..","..tostring(y)..","..tostring(z).."\n"
                                Rotacja"..tostring(rot))
    end
end


Powiniene? go w 100% zrozumie?. Teraz sam mo?esz spr?bowa? pisa? skrypty obiektowo. Mo?esz to zastosowa? jako ?wietn? alternatyw? dla setElementData. T? metod? mo?na stosowa? po stronie clienta i servera. Odpowiem na wszystkie pytania.

Pozdrawiam.

Ostatnio zmieniony przez Brzysiek 2013-09-28, 10:07, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 

 
Więcej szczegółów
Wystawiono 2 piw(a):
manieks78, Kacperiusz
Wysłany: 2013-09-28, 23:28


Riot

3X






Wiek: 29
Na forum: 5729 dni
Posty: 1123
Nick w MP: Riot/3X

Piwa: 286

Respekt: 123
Respekt: 123

LUA nie nadaje si? do programowania obiektowego. Bodaj?e znany skrypt "rpg by marmat" ma towary w?a?nie stworzone obiektowo. Tak mi si? przynajmniej wydaje, bo ten kod widzia?em dobre 2 lata temu.

Z tego co pami?tam, dzia?a?o to co najmniej ?le. Lepiej korzysta? z tego co mamy (strukturalnego). Eleganckie wiki, i mniejszy problem z odczytaniem kodu ;)

Postaw piwo autorowi tego posta
 

 
Wysłany: 2013-09-28, 23:45


Piorun







Wiek: 32
Na forum: 6712 dni
Posty: 1837
Nick w MP: Piorun

Piwa: 516

Respekt: 480,7
Respekt: 480,7

...ale poradnik owszem, przyda si? :) . Tak na wszelki wypadek. Stawiam piwo :) .

Podpis
Możesz mnie znaleźć na: Facebook
Postaw piwo autorowi tego posta
 

 
Wysłany: 2013-09-30, 14:47


Brzysiek

Skrypter pralek






Wiek: 27
Na forum: 5199 dni
Posty: 488
Nick w MP: Brzysiek

Piwa: 1034

Respekt: 360
Respekt: 360Respekt: 360Respekt: 360Respekt: 360

"Ziomek11" napisał/a:

LUA nie nadaje si? do programowania obiektowego. Bodaj?e znany skrypt "rpg by marmat" ma towary w?a?nie stworzone obiektowo. Tak mi si? przynajmniej wydaje, bo ten kod widzia?em dobre 2 lata temu.

Z tego co pami?tam, dzia?a?o to co najmniej ?le. Lepiej korzysta? z tego co mamy (strukturalnego). Eleganckie wiki, i mniejszy problem z odczytaniem kodu ;)

Akurat te towary to wina ?le napisanego kodu, a nie z?ej obs?ugi klas w lua.
Sam zaczn? pisa? w klasach, bo po prostu strukturalne kodowanie mi si? znudzi?o :)

Postaw piwo autorowi tego posta
 

 
Tagi: skryptowanie :: pseudo-oop
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » LUA » Poradniki do LUA Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi

Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Dodaj temat do Ulubionych
Wersja do druku