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 plików
Pliki -> Game Maker -> Przykłady
Informacje o pliku: Przyszła pozycja gracza
Przykład pokazuje jak obliczyć przyszłą pozycję gracza na podstawie jego kierunku i prędkości. Przydatne jest to w grach typu Tower Defence, strategiach, TDS'ach.
rozmiar: 13 KB | autor: Uzjel
pobrań: 7114 | głosów: 12 | ocena: 7.33 oceń zasób
data dodania: 23.09.10 | dodał: Tymon
Komentarze
stron: 1

1


av

Makary155 (17:06, 24.09.2010)

Świetne! Wreszcie moi łucznicy będą trafiać w ruchomy cel

av

Dawidds (18:21, 24.09.2010)

Idea przykładu fajna, ale jednak zastosowany mechanizm sprawia że przy stałym ruchu gracza kościotrup nie zawsze trafia (chociaż i tak w większości trafia, a w tdsach nie ma co się z tym bawić bo i tak gracz będzie robił uniki) w cel. Nie mam pomysłu jak to wyjaśnić to daję obrazek:
img832.imagesha...64/fgfdgdfg.png

I teraz po kolei kroki, które wykona algorytm w tym przykładzie (czarne to kościotrup, niebieskie jabłko):
1. Sprawdzamy, w ilu klatkach strzała doleci do AKTUALNEJ pozycji gracza. Wynik - 4 klatki (taki przykład ofc). Czerwona linia na obrazku.
2. Obliczamy, na jakiej pozycji będzie gracz za tyle klatek, ile wyszło na wyżej. Niebieska linia na obrazku, ta pozycja gracza, która nam wyszła jest oznaczona jako puste niebieskie kółko.
3. Strzelamy w to puste niebieskie kółko. Zielona linia na obrazku.
//tutaj koniec algorytmu, ale obserwujmy dalszy przebieg zdarzeń
4. Niestety, wyszło tak, że strzale dojście do pozycji którą wyliczyliśmy zajęło 6 klatek (sprawdzaliśmy to w 1 punkcie, wtedy innymi danymi nie dysponowaliśmy), a nie 4. I przez te 6 klatek gracz zdążył ominąć trajektorię - różowe kółko.

Obliczanie pozycji, na której będzie gracz w momencie gdy trafi go strzała nie opiera się na dystansie do rzeczywiście tego punktu, gdzie trafi go strzała (choć szczerze sam nie mam pojęcia jakby to obliczyć, mógłby się wypowiedzieć jakiś ekspert : D), a na dystansie do gracza. A nas interesuje PRZYSZŁA pozycja gracza i to na niej powinniśmy oprzeć obliczenia - a nie na aktualnej.
Opieramy się na czerwonej kresce, a powinniśmy na zielonej.

Inna sprawa, że wychodzi na to, że aby obliczyć przyszłą pozycję gracza potrzebujemy pozycji gracza. Dlatego to takie ciekawe : D

av

Tymon (18:25, 24.09.2010)

Ale Ty uwzględniasz ruch przyspieszony którego nie ma w tym przykładzie.

av

Dawidds (18:25, 24.09.2010)

Nie chce mi się myśleć dokładnie jaki by to miało sens, ale logiczne wydawało by się zrobienie po prostu powiedzmy 5 iteracji - z których każda opierała by się na wyniku poprzedniej.
Czyli że rysunek który wyżej dałem to 1 iteracja - w drugiej program liczy, gdzie będzie gracz za 6 klatek (długość zielonej kreski, tą, którą właśnie obliczyliśmy). I wtedy przekazujemy do następnej iteracji, aby obliczyła, gdzie będzie gracz za (tutaj wynik tej 2 iteracji) klatek.

Całkowicie precyzyjne by to nie było, ale było by to już dużo większe przybliżenie.

av

Tymon (18:27, 24.09.2010)

Stary, komplikujesz sobie życie. Do podręcznika fizyki, marsz.

av

Dawidds (18:37, 24.09.2010)

Nie, nie uwzględniam przyspieszonego : D

Obliczamy, gdzie będzie gracz, gdy trafi go strzała - ale opieramy to na AKTUALNEJ sytuacji (aktualnym dystansie kościotrup-gracz, co przekłada się na wynik "w ilu klatkach strzała dotrze do celu", a nie na tej przyszłej. Nie mam pojęcia jak to lepiej wyjaśnić, także muszę liczyć, że kogoś oświeci i zrozumie, o co mi chodzi

Tyle tylko że mówię, do gier to w 100% wystarcza - ale tak czysto teoretycznie patrząc to ten przykład nie jest całkiem skuteczny

Zresztą najlepiej zwiększyć sobie ekran i się zauważy, że rzeczywiście gdy poruszamy się tak, że szybko zmienia się dystans jabłko-kościotrup (mijamy go w odległości gdzieś 150px) to szkielet w nas po prostu nie trafia (mimo, że nie zmieniamy kierunku ani prędkości).

av

Dawidds (18:38, 24.09.2010)

Chyba inne podręczniki od fizyki mamy

av

Tymon (18:46, 24.09.2010)

Dobra, już to widzę.

W alarmie szkielecika trzeba poprawić liczenie dist.

dist = point_distance(
x,
y,
obj_apple.x + lengthdir_x( obj_apple.apple_speed, obj_apple.apple_direction ),
obj_apple.y + lengthdir_y( obj_apple.apple_speed, obj_apple.apple_direction )
);

Zwykły błąd, bo w końcu ma strzelać w kierunku przyszłej pozycji jabłka, a nie obecnej.

Dawidds i tak masz pałę za sposób rozwiązania problemu.

av

Uzjel (20:01, 24.09.2010)

Napiszmy o tym pracę magisterską i chodźmy na piwo. Dla mnie tamto rozwiązanie jest wystarczające, bo snajper nie jest potrzebny

av

pablo1517 (16:45, 29.11.2010)

Dawidds, to nie wystarczy brać sobie odległości kosciotrup - przyszła pozycja gracza, zamiast kosciotrup - gracz? Wtedy masz wszystko policzone bezbłędnie, tak na chłopski rozum, bo z fizyki to ja same 2 mam :/

av

Dawidds (17:47, 29.11.2010)

Się obudziłeś : D
No ale jak już mamy się czepiać to na chłopski rozum wychodząc od tego co napisałeś:

1. Chcemy obliczyć [odległość kościotrup - przyszła pozycja gracza], potrzebujemy do tego ofc:
-pozycja kościotrupa (mamy)
-przyszła pozycja gracza (nie mamy, liczymy)
2. Do obliczenia [przyszła pozycja gracza] potrzebujemy:
-kierunku gracza (mamy)
-jego prędkości (mamy)
-czasu, jaki zajmie pociskowi dotarcie do tej [przyszłej pozycji gracza] - (nie mamy, liczymy)
3. Do obliczenia [czasu jaki zajmie pociskowi dotarcie do tej [przyszłej pozycji]] potrzebujemy:
-prędkości pocisku (mamy)
-dystansu jaki musi przebyć pocisk, czyli właśnie [odległość kościotrup - przyszła pozycja gracza] - no jak nieciężko zauważyć, zapętliliśmy się.

Myślę że trochę lepszy sposób na pokazanie tego niż to co pisałem ostatnio, ale i tak gadanie nad tym jest czystą głupotą bo w 95% przypadków pocisk mimo drobnej nie-precyzji (tak, wiem, słowotwórstwo - you're doing it wrong) trafi gracza, a w pozostałych 5% gracz zrobi unik i tyle ze snajperskich zdolności szkieletu, więc naprawdę nie ma o czym gadać. Czysto matematycznie technika jest nieprecyzyjna, ale w kontekście gier i tak w 100% wystarczająca.

I end of topic, bo nie dam rady tego lepiej wytłumaczyć a na pisanie aplikacji która to zademonstruje jestem zbyt leniwy.

stron: 1

1



Dodaj komentarz:
Treść:
W bazie mamy plików: 215
Menu
Panel użytkownika
Jesteś niezalogowany!

Nie masz konta? Zarejestruj się
Użytkownicy on-line
4 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 1, userów: 3, ukrytych: 0
gnysek, SLy, I am Lord
Użytkownicy na czacie discord
gnysek (10:39, 21.01.19):
tylko pod inną wodzą
pablo1517 (6:37, 21.01.19):
Tu wciąż wszystko śmiga . Damn
gnysek (0:10, 21.01.19):
Uff, @Uzjel zdążył
gnysek (0:09, 21.01.19):
tak było, jak nie działał uploader, bo Ranma nie ustawił uprawnień na katalogu
exp (0:05, 21.01.19):
a może to było na turnieju? tak czy inaczej było lepiej
exp (0:04, 21.01.19):
i tak było lepiej według mnie
exp (0:04, 21.01.19):
jeżeli dobrze pamiętam, w poprzedniej edycji głosowało się postem, a nie w ankiecie
Korodzik (0:03, 21.01.19):
czy jest jakieś zabezpieczenie przed tym?
Korodzik (0:03, 21.01.19):
na lidze da się głosować na siebie?
Uzjel (0:00, 21.01.19):
Za mao, daj 20 :p
gnysek (0:00, 21.01.19):
10 MB jest limit.
Uzjel (23:55, 20.01.19):
Na uploader też nie idzie...
Uzjel (23:52, 20.01.19):
Moja gra też jest za ciężka ;(
gnysek (23:46, 20.01.19):
Tak, dorobię, bo tym razem była też gra w HTML, więc faktycznie może się to zdarzać częściej. Ale to już nie dziś
Konrad-GM (23:36, 20.01.19):
Ok, dzięki @gnysek , poszło btw. fajna byłaby też opcja do wklejenia linku obok uploadera
gnysek (23:24, 20.01.19):
@Chell: poprawiłem, dzięki W ten weekend wrzuciłem już chyba z 15 hotfixów na stronę
gnysek (23:21, 20.01.19):
10 MB ustawiłem limit właśnie, był 2MB. Jak gra jest większa, daj zipa z linkiem w pliku .txt
Konrad-GM (22:56, 20.01.19):
Po spakowaniu gry to mi wychodzi ~18mb i nie mogę przesłać
Konrad-GM (22:52, 20.01.19):
Pany, jaki jest limit rozmiaru plików w uploaderze ligowym?
Chell (22:42, 20.01.19):
charset w nowościach z forum się sypnął
Chell (21:52, 20.01.19):
uf, głosowania gotowe
gnysek (21:38, 20.01.19):
Poprawiłem uprawnienia w dziale Liga24, teraz każdy może odpowiadać.
gnysek (20:56, 20.01.19):
jeśli ktoś odda czwartą, to strzelam, że będzie "nadzwyczajny" albo coś takiego
I am Lord (18:31, 20.01.19):
podobają mi sie nazywy gier
I am Lord (18:30, 20.01.19):
I i to jest bajer który trzeba jakoś jeszcze bardziej uwidocznić
Uzjel (13:15, 20.01.19):
Ekstra!
gnysek (13:09, 20.01.19):
Dodałem jeszcze listę uczestników na główną, może to was zachęci
I am Lord (8:57, 20.01.19):
No inny
Adriann (22:33, 19.01.19):
To chyba jakiś inny;p Tak czy inaczej ja też coś majstruję;>
I am Lord (21:58, 19.01.19):
ponoć Adrian szykuje metal gear solid w wersji CTC, ciekawe czy zdąrzy
exp (20:33, 19.01.19):
już wiem na co głosuje
Chell (20:09, 19.01.19):
miśki, jutro wieczorem startuje wielkie głosowanie!
gnysek (19:31, 19.01.19):
Poświęcił na to z tydzień, ale to nic innego jak nakładka/bypass.
gnysek (19:30, 19.01.19):
A to nie takie trudne tak naprawdę, bo każdy "własny" skrypt po kompilacji pozostawia swoją nazwę (do script_get_name()), więc do każdej istniejącej funkcji w GMS, wygenerował skrypt typu own_instance_create() z tą samą liczbą argumentów, a potem przeparsował kod wynikowy JS i znalazł co jest co, imo obfuskacji.
gnysek (19:29, 19.01.19):
Jakim oswobodzonym? On po prostu znalazł który skrpyt jak się nazwał po kompilacji przy eksporcie do HTML5 i konwertuje funkcje w jednym okienku, żeby działały w drugim. Ja bym to nazwał nakładką na dowolną grę GM wyeksportowaną do HTML5.
nowy_user (11:14, 19.01.19):
Może udostępnienie GMS2 jako open source byłoby tu najlepszym rozwiązaniem? Swoją drogą, autor GMLive stworzył też coś takiego: yal.cc/r/gml , gdzie możemy sobie kodzić w GML'u bez GMa ! Czy to znaczy, że GML powoli staje się jezykiem oswobodzonym z kajdan GM'a i być może niedługo będziemy mogli programować w GMLu w innych narzędziach?
nowy_user (11:13, 19.01.19):
Zgadza się, choć z drugiej strony, tak jak pisałeś kiedyś, przed erą PlayTech GM też nie był rentowny i przecieżbez wsparcia inwestora, GM utknąłby w miejscu. Bez odpowiednich funduszy musieliby w końcu zrobić redukcje etatów, bo niebyłoby ich stać na utrzymanie całego zespołu, a z koleji z mniejszym zespołem, postępy byłby znacznie wolniejsze.
gnysek (10:04, 19.01.19):
Ale nie oszukujmy się, nawet jak YYG nie zarabia na siebie, to playtech zarabia na nich na giełdzie, bo ludzie inwestują w akcje tylko dla tego, że mają YYG w portfelu. Więc ogólnie jednak zarabia na siebie, ale nie GMem.
gnysek (10:03, 19.01.19):
Tym się właśnie różni INDIE developer od korporacji. Korporacje strasznie narzucają, nawet jak klienci i programiści mówią "nie idźcie tą drogą".
gnysek (10:03, 19.01.19):
To jest możliwe tak: Playtech uważa, że to nie jest priorytet A zatrudnianiem zajmuje się YYG stąd czasem fajne osoby wejdą ale nie mogą dodać fajnych rzeczy, bo Playtech ma inne cele
nowy_user (9:32, 19.01.19):
Panowie, od 2 tygodni używam GMLive i musze przyznać, że ten asset to prawdziwy gamechanger. Jak to możliwe, że funkcja livecoding nie jest wbudowana domyślnie w GMS2 ? Tym bardziej to dziwi, że autor GMLive podobno pracuje dla YoYo...
gnysek (1:15, 19.01.19):
Masz, paczka: web.archive.org...rials/first.zip
gnysek (1:12, 19.01.19):
to było w tutkach na gamemaker.nl tylko
I am Lord (0:19, 19.01.19):
co jest grane, to ja już nie wiem w którym GMie to było, może GM8
I am Lord (0:18, 19.01.19):
ej bez jaj ściągnąłem GM6, GM7, GM8.1 i w żadnym nie ma catch the clowna w przykładach
I am Lord (0:17, 19.01.19):
mogę pobrać
gnysek (0:13, 19.01.19):
ja z googli wziąłem, powycinałem - możesz pobrać moją grę chyba już ?
I am Lord (23:50, 18.01.19):
a nie, to była z Gm8 bo widzę że defaultowe zasoby z gm6 mam jeszcze na dysku
I am Lord (23:48, 18.01.19):
Kurde gnysek gdzie można ściągnąć paczkę grafik z gm 6? bo z niej chyba te klauny pochodzą
Korodzik (22:05, 18.01.19):
Świetnie!
Ankieta
» Dżem czy konfitura?
Dżem
Konfitura

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

[ Czas generowania strony: 0.03436 sekund ] [ Liczba zapytań MySQL: 14 ]