Thread Rating:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[PL]1.Ucz się z Danielem - pierwsze zmiany w skryptach serwera. 2
#1
3. Pozycja
Przez to, że nie wiedziałem skąd się biorą "te cyferki" długo zwlekałem z rozpoczęciem nauki pisania skryptów serwerowych. Okazało się, że całkiem nie potrzebnie.
Nie wiem, jakie starsi czy lepsi "skrypterzy" mają sposoby, na dobieranie pozycji na ekranie, ja pokaże wam tutaj formę, która mi w zupełności odpowiada.
Na początek dodajemy kursor. Czy po kliknięciu klawisza, czy od razu gdy wejdziemy do gry - wasza sprawa. Żeby dowiedzieć się, jak to zrobić, wchodzimy na wiki, wchodzimy w funkcje klienta i odnajdujemy akapit "Cursor". Od razu widzimy funkcję setCursorVisible.
Niektórzy mogą się już domyślać, że kolejną potrzebną nam funkcją będzie getCursorPosition. Tutaj sprawa robi się trochę ciekawsza
Quote:Przydatne! Gdy tylko aktywujemy nasz kursor, kamera oraz gracz w grze wciąż się poruszają przy ruchach myszki. W tym wypadku, razem z aktywacją kursora polecam użyć setFreeze(true);   

Jak można się domyśleć, najeżdżam kursorem w miejsce w którym chciałbym umieścić teksturę, później...zaraz zaraz, no ale nasza tekstura ma swoją szerokość, wysokość, a my mamy tylko punkcik. Wyobrażamy sobie, że w koordynatach które wpiszemy znajdzie się LEWY GÓRNY róg naszej tekstury, drawa czy innego tekstu.
Więc, najeżdżam kursorem  w odpowiednie miejsce i klikając klawisz, wyświetlam na ekranie pozycje kursora. Nie będę pisał o wywoływaniu funkcji, ale muszę pochylić się nad wyświetlaniem pozycji.
Zamiast podawać cały kod, teraz zrobimy to krokowo.
1. Wpisuję kod na klawisz/komendę którą będę pobierał pozycję.
2. Tworzę zmienną lokalną i przypisuję do niej pozycję kursora
 local pozycja = getCursorPosition();
Czym jest pozycja? Każdy kto miał matematykę, wie, że pozycji 2d odpowiada układ współrzędnych z dwiema osiami (X,Y). Czyli mamy tutaj dwie wartości X i Y a zmienna jest tylko jedna. To oznacza, że zmienna będzie
.
.
.
.
.
Tabelą!
3. Wyświetlam pozycję kursora.
a) Jak wgl cokolwiek wyświetlić? Ogólnie mamy dwie możliwości
addMessage()
print()

Nie wiem czy tak ma być, ale wyświetlanie pozycji kursora w addMessage mi nie działa. Więc opiszę print, a przykładów na addMessage macie już w skryptach masę. Powiem tylko, że addMessage wypisuje nam coś na czasie, a print na środku ekranu.[/color]
print(pos.x+" "+pos.y);
Można się już co-nieco domyślić prawda?
print czyli print
pozycja.x pozycja.y To jest bardzo ważne, szczególnie, że nie zawsze tak będzie. Po kropce wypisujemy nazwę pola do którego chcemy się odwołać. Wracając do definicji getCursorPosition w wiki czytamy:
Quote:Current position of cursor in table with fields x and y.

Obecna pozycja kursora w tabeli znajduję się w polach X i Y. Dlatego po kropce mamy podane akurat X i Y.
Spójrzcie na przykłady innych tabel w tych artykułach:
http://gothic-online.com.pl/wiki/index.p...erPosition
http://gothic-online.com.pl/wiki/index.p...layerColor

+ " " Plusa używamy, żeby połączyć tekst ze zmienną. Cudzysłowie zaczyna i kończy tekst, a spacja to jest po prostu przerwa pomiędzy tymi współrzędnymi. Zastanówcie się, jak by wyglądał print, gdybyśmy chcieli napisać
Współrzędna X: xxxx , Współrzędna y: yyyy
Rozwiązanie 
print("Współrzędna X: "+pos.x+" , Współrzędna Y: "+pos.y);



Quote:WAŻNE!
Pobranie pozycji jest łatwiejsze niż się wydaje. Problemem może być też dobranie szerokości czy wysokości NA EKRANIE. Nie odpowiada to faktycznym rozmiarom tekstury, tylko faktycznej odległości początków i końców punktów na ekranie. Ciężko mi to wytłumaczyć. Po prostu sami to sprawdźcie: Każdy zna rozdzielczość swojego monitora. Sprawdźcie teraz pozycję kursora w grze w 4 rogach waszego monitora (chyba, że ktoś ma okrągły, Big Grin ) .I co, zdziwieni? Teraz według tych wartości musicie wpisywać szerokość i wysokość tekstury w grze. Spokojnie, parę tekstur i nabierzecie wyczucia.
Możecie też zrobić tak, że po kliknięciu w wybranym miejscu wyświetli wam się tekstura. Podpowiem, że wtedy najpierw wywołujemy kursor, później teksturę, gdzie w jej skrypcie zamiast pozycji wpisujemy współrzędne z tabeli (czyli np. pozycja.x, pozycja.y). Musicie też przeczytać o zdarzeniu OnClick, lub poczekać na odpowiedni poradnik).
Myślę, że wyczerpałem temat. Gdzie kod? Sami go napiszcie Big Grin On już tu jest,  skrypty można pisać samymi opisami, czy nawet rysując kwadraciki i strzałeczki z kolejnymi instrukcjami. To są tzw. algorytmy.

4. Przeniesienie paska życia.
Szczerze mówiąc, tą część moglibyście zrobić sami. Ponieważ pozycję i inne problemy już opisałem, a operacje manipulacji na paskach (czyli Bars) już są w pliku main.nut.
Nie będę taki zły i to opiszę. Chyba, że ktoś postawi sobie wyzwanie i sam to zrobi, wtedy koniecznie musi pochwalić się w komentarzu Big Grin
U mnie akurat wygląda to tak, że miejsce na bary narysowałem sobie na teksturze panelu, więc tam je umiejscowię. A wygląda to tak.

Code:
            setBarPosition(HEALTH_BAR, 240, 7550);
            setBarSize(HEALTH_BAR, 2560, 170);

Oczywiście aktywowane (najlepiej) tym samym klawiszem czy komendą, co nasz panel.
setBarPosition(HEALTH_BAR, 240, 7550);
HEALTH_BAR to odwołanie do paska życia. Warto zauważyć, że nie utworzymy nowego paska, tylko przesuniemy ten stary. Łatwo też się domyśleć, jaka będzie instancja paska many, prawda?
Dalej jest już odpowiednio: Pozycja X, Pozycja Y. Widać, że pozycja X rośnie od lewej do prawej, a pozycja Y id góry do dołu.
setBarSize(HEALTH_BAR, 2560, 170);
Znów instancja bara, później Szerokość (całkiem duża zresztą) i Wysokość. Od razu widać, rozdzielczość szerokości mojego monitora to 1360, a tutaj mam pasek szeroki na 2560 i sami widzicie jak jest stosunkowo krótki (obrazek w poprzednim temacie).

Tym sposobem mamy coś na wzór naszego dolnego paska. Wiem, że nie jest on tak funkcjonalny jak w prawdziwych grach MMO. Nie wykluczam, że wrócimy jeszcze do niego, ponieważ ta seria nazywa się "Ucz się z Danielem", a Daniel jeszcze tego, po prostu nie umie.
Poza tym, to już solidna podstawa do zrobienia ciekawego interfejsu. Można na takim pasku dodać np. godzinę, guziki z menu, pomoc, komendy, cokolwiek. Sam wyobrażam sobie, że można by zrobić obrazek zmieniający się np. co godzinę Gothicową i odwzorowujący pozycję słońca na niebie, zupełnie jak w Wiedźminie 3. Może właśnie tym się zajmiemy. A może wstawimy boty? Sam jeszcze nie wiem, za co wezmę się następnym razem. Ale napewno podzielę się tym z wami. Tak samo jak chciałbym, żebyście pochwalili się paskami, które sami zrobicie i wstawicie do gry!
A zapomniałbym! Jeśli się nie brzydzicie, macie tu ten mój nieszczęsny panel:
http://hostuje.net/file.php?id=4bdf5013d...54002ffbe3

Przypominam, poszukuję tłumaczy!
http://gothic-online.com.pl/forum/showth...hp?tid=389
Nie będzie mnie do sierpnia, jestem w Szkocji i zarabiam na studia. Do zobaczenia.
Reply
#2
http://strefagothic.eu.org/thread-31.html Jak ci sie coś z tego przyda to hapśnij. Chyba tam 12 poradników jest. Ale kiepa troszku.
Reply
#3
getCursorPosition nie zwraca tablicy, tylko tabele. To różnica. Tablica jest jakby taką listą elementów, a tabela ma dane przechowywane w indeksach do których dostajemy się po nazwie. Jak np. pozycja.x pozycja.y, w tablicy było by coś takiego pozycja[0], pozycja[1].

Czyli w skrócie, tablica to kontener na dane układane jeden po drugim, tabela to również kontener ale tam dostęp do danych uzyskujemy przez podanie konkretnej nazwy indeksu.
Reply
#4
Wow. Nie wyłapałbym tego sam. Efekt pisania tych poradników przez kilka bitych godzin. Już poprawiam.
Quarchodron, no fajna stronka, ale ja tu chcę pouczyć na przykładach Gothicowych. Można by to gdzieś przypiąć w jakimś temacie z polecanymi poradnikami, albo na wiki.
#Uff, tylko na początku napisałem Tablica.
Nie będzie mnie do sierpnia, jestem w Szkocji i zarabiam na studia. Do zobaczenia.
Reply
#5
Hmm. Dodałbym dla potomnych, aby się nie męczyli:
local stex0 = createTexture(0, 0, 8192, 8192, "Menu_InGame.TGA");
to wyświetla tekstrę na cały ekran, chcę wam wyjaśnić współrzędne.
Po kolei:
0 - Początek "X" od lewej
0- Początek "Y" od góry
8192 - Rozciągnięcie "X" w prawo (W tym przypadku na maxa)
8192 - Rozciągnięcie "Y" w dół (Jak wyżej)
Reply
#6
Te X w Prawo to szerokość i odpowiednio wysokość.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Visual Studio Code - uruchamianie serwera i gry jednym kliknięciem marcinbar 1 2,383 17.06.2020, 14:56
Last Post: marcinbar
  [PL]1.Skryptuj z Danielem - DeatchMatch Ignisio 11 9,296 15.03.2016, 21:49
Last Post: Bimbol
  [PL]2.Skryptuj z Danielem- Role-Play. Ignisio 0 3,642 15.02.2016, 19:06
Last Post: Ignisio
  [PL]2.Ucz się z Danielem - wyświetlanie i odliczanie. Ignisio 12 9,607 31.01.2016, 13:26
Last Post: Son Goku
  [PL]1. Ucz się z Danielem - pierwsze zmiany w skryptach serwera. Ignisio 4 6,847 21.01.2016, 15:58
Last Post: Ignisio

Forum Jump:


Users browsing this thread: 2 Guest(s)