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ń: 7309 | 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
3 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 1, userów: 2, ukrytych: 0
ANtY, HamsterMan
Użytkownicy na czacie discord
ANtY (9:21, 26.03.19):
www.youtube.com...h?v=rbywG3Qx5tc pierwszy gameplay z gloriousa, patrzcie to i mówcie co myślicie. Całe 10 minut unedited rozgrywki, elo
Dester (22:18, 25.03.19):
jakieś tam zaproszenia się walają po forum
gnysek (16:57, 25.03.19):
to jak inni weszli ? myślałem, że z tego linka
Dester (15:35, 25.03.19):
link do kanału != zaproszenie do serwera
gnysek (13:59, 25.03.19):
A ten na gorze nad shoutboxem nie działa ? jeśli nie, to może discord.gg/eJuFypB
gnysek (13:58, 25.03.19):
do gmclanowego discorda ?
Adriann (11:30, 24.03.19):
discord.gg/NWBv8c a ten?
gnysek (9:46, 24.03.19):
@Dester: on ma 3 palce u ręki, stąd nick
MaxGaming (22:19, 23.03.19):
Ale to jeśli masz w miarę bezpośredni dostęp do klienta, bo jak robisz dla software house'u to dostajesz mniej, ale masz więcej zamówień.
cysior (18:45, 23.03.19):
Dzięki Adriann. Niestety ten link nie oferuje mi dołączenia do serwera.
Adriann (17:59, 23.03.19):
discordapp.com/...199466192207885 aaa Proszę bardzo
cysior (23:35, 22.03.19):
Poratuje ktoś linkiem do discorda?
ANtY (23:00, 22.03.19):
wiec nie tak rzadko u nas sie zdarza ze ktoś kosi ponad 20 kafli miesiecznie (raczej nie w gamedevie xd)
ANtY (22:59, 22.03.19):
@nowy_user nie zapominaj, że jako programista możesz z Polski kodzić dla firmy z USA, a tam programiści potrafią zarabiać po $ 100k+ rocznie
Dester (19:04, 22.03.19):
Dziś odkryłem skąd @Threef wziął swoją nazwę użytkownia: www.reddit.com/..._its_own_number
exp (14:37, 22.03.19):
15 lat pracy, doświadczenia i byle jaka kobieta może zarobić waszą miesięczną pensję w jedną noc nawet się nie rozbierając. życie jest ekstra
nowy_user (14:26, 22.03.19):
Więcej zarabiają już chyba tylko politycy i panie trudniące się najstarszym zawodem świata.
nowy_user (14:21, 22.03.19):
Racja, programiści z dużym doświadczeniem zarabiają bardzo dużo. Nie byłem tylko świadomy, że aż tak dużo. 50 zł na godzinę daje 8 000 - 9 000 zł netto na miesiąc, czyli kwoty, których nie powstydziłby się wyspecjalizowany chirurg, piłkarz polskiej 1 ligi, czy też topowy handlowiec.
gnysek (12:59, 22.03.19):
Oczywiście to adekwatnie do umiejętności, jak programujesz rok to i 20 może być dużo, jak tak jak ja masz za sobą 15 lat doświadczenia i ponad 40 sklepów internetowych postawionych, no to można szaleć.
gnysek (12:58, 22.03.19):
No co ty, firma by wzięła 80-100zł/h netto, bo jeszzce jest szef i biuro do utrzymania.
nowy_user (12:53, 22.03.19):
Nieźle, myślałem że tyle zarabiają w Polsce jedynie lekarze i prawnicy.
gnysek (11:42, 22.03.19):
40 - 50zł netto
MaxGaming (23:48, 21.03.19):
Dodam, że chodzi o portal, a nie stronę wizytówkę
MaxGaming (23:35, 21.03.19):
Jeżeli robicie strony WWW na zlecenie to ile cenicie jedną roboczogodzinę mniej więcej?
nowy_user (19:05, 21.03.19):
Całkiem nieźle ( choć ja tworzę program, a nie grę). Trochę już jestem zmęczony, kod jest nieźle rozrośnięty i poplątany , ale staram się regularnie przesuwać projekt do przodu. A u Was?
Temporal (16:23, 21.03.19):
heja, jak tam idzie tworzenie gier?
exp (11:44, 21.03.19):
chłopaki musze wam sie do czegos przyznac, nigdy nie robiłem nic w php
gnysek (0:43, 21.03.19):
więc... nie tylko w PHP można je spotkać.
gnysek (0:43, 21.03.19):
ja nie chcę nic mówić, ale zmienna $_SERVER to są dane przekazane z APACHE a nie PHP. Jak odpalisz PHP z konsoli nie masz takowych
Nikas (23:57, 20.03.19):
Serio exp? Nic w php? Totalnie? Wow.......
MaxGaming (19:35, 20.03.19):
Poważnie exp? Nie robiłeś nigdy nic w php?
exp (17:10, 20.03.19):
niech ktoś wytłumaczy o czym oni rozmawiają
Konrad-GM (20:12, 19.03.19):
Mi to wygląda na to, że w globalnej zmiennej $_SERVER po prostu czasami brakuje indeksu HTTP_REFERER. Spróbuj sprawdzać czy taka zmienna w tablicy istnieje funkcją isset($_SERVER['HTTP_REFERER']). Jaka wersja php? Działasz z php poprzez fastcgi? Jaki serwer? Nginx czy apache?
Dester (18:35, 19.03.19):
nic nie zmieniam - raz działa, raz segfault
Dester (18:16, 19.03.19):
trudno mi uwierzyć, że ta konkretna instrukcja jest winna, ale jak ją usuwam to działa
Dester (18:12, 19.03.19):
czy to normalne, że header("Location: " . $_SERVER["HTTP_REFERER"]); powoduje segfault testowego serwera php?
exp (12:06, 19.03.19):
facebook research
gnysek (22:34, 18.03.19):
ja nie wiem, czy to samo zaproszenie wystarczy, nie było tam jakiegoś limitu ?
MaxGaming (20:06, 17.03.19):
Mam swój telefon, wrócił z serwisu. Możecie przypomnieć nazwę tej apki FB za 20$/mies i skąd wziąć polecenie? Ktoś chyba wspominał, że na jakimś forum jest.
I am Lord (17:44, 15.03.19):
w room edytorze możesz myszką spradzić jakie id ma która instancja i zobaczysz że wyświetlały się komunikaty w tej kolejności w której ustawiałeś te obiekty
I am Lord (17:43, 15.03.19):
poustawiaj sobie jakieś obiekty które w create będą mieć linikę: show_debug_message("jestem instancją o ID: "+string(id))
I am Lord (17:41, 15.03.19):
jeżeli nic się nie zmieniło w GMS2 to jest tak jak Konrad mówi.
I am Lord (17:41, 15.03.19):
Ale mowa o jakim GMie?
nowy_user (14:41, 15.03.19):
Hmm .. obstawiałbym, że Depth raczej nie ma tu wiele do gadania, ale kolejność tworzenia instancji w roomie - podejrzewam, że tak. Jednak w przypadku gdy wstawisz kilka obiektów do jednego room’a to im nadawane są ID zgodnie z kolejnością w resource tree , a nie np. zgodnie z kolejnością ich ręcznego umieszczenia w room edytorze- tak sądzę, ale mogę się mylić
Konrad-GM (13:13, 15.03.19):
A to nie jest tak, że o kolejności wykonywanego eventu (np. step) decyduje kolejność tworzenia instancji w roomie? No i depth, ale dotyczy to chyba tylko draw event.
nowy_user (9:07, 15.03.19):
Gdy robicie porządki w swoich projektach i tworzycie grupy aby obiekty ładnie posegregować - pamiętajcie o jednym: Zmiana kolejności obiektów w resource tree może mocno namieszać i wywalić nieoczekiwane bugi. Dzieje się tak dlatego, że GM przetwarza kod zgodnie z kolejnością ustawioną w resource tree. Ja przez to niedopatrzenie straciłem trochę czasu na wyszukanie buga, ale mam lekcję na przyszłość
I am Lord (16:43, 14.03.19):
dopiero się dowiedziałem jak zobaczyłem tweeta od yoyo
I am Lord (16:42, 14.03.19):
a nie wiedziałem że można sobie pokolorować drzewko zasobów w gms2
gnysek (11:18, 14.03.19):
50% zmian w update to nowe bugi
I am Lord (22:30, 13.03.19):
więc często przy update
Ankieta
» Ile powinny trwać tury Ligi 24?
24h
48h
54h (piątek od 18:00)
7 dni
inna długość (podałem w komentarzu ankiety)

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.02586 sekund ] [ Liczba zapytań MySQL: 14 ]