Autor Wątek: gra wyścigowa i sprawdzanie kto jest pierwszy  (Przeczytany 6221 razy)

Offline steffan

  • Użytkownik
    • Adam Roszyk Blog VR, Startups, Travels

# Lipiec 11, 2008, 17:38:12
Witam

Mam taki mały, ale wkurzający problem-
jest sobie dość prosta wyścigową gra dla dzieci. Ogólnie rzecz biorąc to już jej spora część jest zrobiona, ale nie mam pomysłu w jaki sposób zrealizować sprawę tego na którym miejscu (względem przeciwników) znajduje się gracz...
Gdyby trasy były proste, to można było by sprawdzić po prostu pozycję względem prostej drogi i porównać ją do pozycji przeciwników, ale droga jest ostro pokrzywiona, ma dużo zakrętów i kilka okrążeń, tak więc zupełnie nie wiem, jak powinienem to zrealizować.

Będę dozgonnie wdzięczny za jakiekolwiek rozsądne pomysły  ;)

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Karczas

  • Użytkownik
    • DevBlog

# Lipiec 11, 2008, 17:44:50
A jak reprezentujesz swoją drogę? Po prostu trzymasz ją jako zbiór wierzchołków czy może trzymasz w pamięci np. zbiory punktów, na których budujesz odcinki i na tej podstawie obliczasz pozycje vertexów?

Offline diplodoc

  • Użytkownik

# Lipiec 11, 2008, 17:46:38
Będziesz pewnie musiał ustalić długość trasy i brać pod uwagę nie tylko położenie względem układu xy tylko pamiętać ile ruchów i jakich wykonał każdy gracz.

Offline yarpen

  • Użytkownik

# Lipiec 11, 2008, 17:47:28
2 slowa: punkty kontrolne.

Offline Karczas

  • Użytkownik
    • DevBlog

# Lipiec 11, 2008, 17:54:00
Cytuj
Będziesz pewnie musiał ustalić długość trasy i brać pod uwagę nie tylko położenie względem układu xy tylko pamiętać ile ruchów i jakich wykonał każdy gracz.
Trochę naciągane imo...

Cytuj
2 slowa: punkty kontrolne.
Myślę, że nie tak wprost. Jeżeli punkty kontrolne steffan rozstawi sobie co 50 metrów i dwóch graczy znajdzie się między dwoma, tymi samymi punktami, to nie będzie można wprost określić, który jest pierwszy.
Jeżeli trzymasz trasę tak, jak napisałem w poprzednim poście, to możesz traktować poszczególne punkty, tak jak podpowiedział Ci yarpen, jako punkty kontrolne i zliczać po prostu ile punktów minął każdy gracz + obliczać odległość do następnego punktu. Oczywiście trzeba by się zabezpieczyć przed cofaniem i wielokrotnym zliczaniu tego samego punktu ;)

Edit: Ogólnie to czy będziesz miał od licha roboty, czy trochę mniej :) zależy od tego jak reprezentujesz sobie drogę.

Offline steffan

  • Użytkownik
    • Adam Roszyk Blog VR, Startups, Travels

# Lipiec 11, 2008, 17:58:47
myślałem już nad tymi punktami kontrolnymi i właśnie w ten sposób określam sobie to, kto pierwszy dojechał na metę :)
Ale tak jak mówił Karczas wydaje mi się że głupio będzie wyglądać to, gdy pomiędzy jednym a drugim punktem kontrolnym, akurat gracz się zatrzyma i wyprzedzą go wszyscy pozostali, a na ekranie nadal widnieć będzie 1# ;)

Edit: Z drogą może być mały problem, bo jest to tylko jeden mesh więc punkty kontrolne jako poszczególne części trasy odpadają...
« Ostatnia zmiana: Lipiec 11, 2008, 18:01:27 wysłana przez steffan »

Offline Złośliwiec

  • Użytkownik
    • Dark Cult

# Lipiec 11, 2008, 18:01:41
A tak z matematycznego punktu widzenia: "pierwszy" jest ten, kto przejechał najdłuższą drogę, zaś droga to po prostu całka prędkości po czasie od momentu rozpoczęcia ruchu do momentu jego zakończenia :).

Offline Gecio

  • Użytkownik

# Lipiec 11, 2008, 18:07:33
Można porozstawiać punkty kontrolne i w sytuacji gdy dwa pojazdy są miedzy dwoma punktami kontrolnymi liczyć odległość do tego punktu (następnego). Ten kto ma mniejszą odległość - jest pierwszy.

@edit
Nie zauważyłem, że Karczas podał już takie rozwiązanie.  Przepraszam za posta ;).

Offline steffan

  • Użytkownik
    • Adam Roszyk Blog VR, Startups, Travels

# Lipiec 11, 2008, 18:11:47
A tak z matematycznego punktu widzenia: "pierwszy" jest ten, kto przejechał najdłuższą drogę, zaś droga to po prostu całka prędkości po czasie od momentu rozpoczęcia ruchu do momentu jego zakończenia :).
Z tym że trasy są dość szerokie- ktoś sobie może postanowić jechać zygzakiem- przebyć największą odległość i być na końcu  ;D
A tak na serio, to chyba motyw z przebytymi odległościami mógłby się sprawdzić, no a przy tym nie muszę się bawić w wymyślanie jakiejś funkcji, która w miarę rozsądnie te punkty kontrolne porozkłada...  :P
Dzięki popróbuję trochę i dam znać :)

Offline yarpen

  • Użytkownik

# Lipiec 11, 2008, 18:16:49
A tak z matematycznego punktu widzenia: "pierwszy" jest ten, kto przejechał najdłuższą drogę, zaś droga to po prostu całka prędkości po czasie od momentu rozpoczęcia ruchu do momentu jego zakończenia :).
Z tym że trasy są dość szerokie- ktoś sobie może postanowić jechać zygzakiem- przebyć największą odległość i być na końcu  ;D
A tak na serio, to chyba motyw z przebytymi odległościami mógłby się sprawdzić, no a przy tym nie muszę się bawić w wymyślanie jakiejś funkcji, która w miarę rozsądnie te punkty kontrolne porozkłada...  :P
Ale po co f-kcja? Przeciez to mozna recznie w 5 minut rozlozyc na dowolnej trasie.

Offline steffan

  • Użytkownik
    • Adam Roszyk Blog VR, Startups, Travels

# Lipiec 11, 2008, 18:43:16
Może i racja, ale moim celem jest zrobienie czegoś na kształt szkieletu aplikacji do innych racerków, więc najpierw pomęczę się z jakąś fajną procedurą. W sumie może to nawet szybciej wyjdzie, bo tych planszy trochę się szykuję, więc samo rozstawienie może zająć jednak nieco więcej niż "5 minut"  ;)

Offline vashpan

  • Użytkownik
    • Strona

# Lipiec 11, 2008, 18:43:40
Ha, ciekawy problem i jak sie okazuje nietrywialny ( chyba )

Ja wpadlem na cos takiego:

- liczyc srednia prekosc dla kazdego pojazdu, co pare klatek/ pol sekundy ( po prostu przebyta calkowita droga/czas od startu ). Wydaje mi sie ze jezeli jeden samochod wyprzedza tego drugiego, sila rzeczy jego srednia predkosc od poczatku trasy jest wieksza niz pojazdu wyprzedzanego... Dobrze mysle ? :/

Oczywiscie trzeba uwzglednic "cofanie" sie ;) No i rozne "skroty" ( w przypadku skrotow wydaje mi sie ze wystarczy zapisac gdzies "ilosc nadrabianej drogi przez skrot" )
« Ostatnia zmiana: Lipiec 11, 2008, 18:50:52 wysłana przez vashpan »

Offline dzemeuksis

  • Użytkownik
    • Blog quodmeturbat

# Lipiec 11, 2008, 18:45:57
Dodam (jeśli to oczywiste, to przepraszam), że punkty kontrolne moim zdaniem najlepiej rozmieścić najrzadziej jak się da. Jednocześnie jednak należy spełnić założenie, że linia prosta łącząca dwa kolejne punkty będzie na całej swojej długości "dotykała" toru. Wówczas możesz zastosować to, co ktoś powiedział, tzn. proste obliczanie odległości od ostatniego zaliczonego punktu.

Offline Karczas

  • Użytkownik
    • DevBlog

# Lipiec 11, 2008, 18:47:49
Po pierwsze można rozstawić w 5 minut a po drugie można to trochę rozbudować (co do jazdy zygzakiem) i postawić swego rodzaju bramki kontrolne. Czyli aby zaliczyć punkt - gracz musi przejechać przez bramkę (oczywiście nie musi ona być widoczna), która będzie ciut szersza niż droga w danym miejscu. Oczywiście bramka będzie stawiana prostopadle do drogi. Dla każdego gracza zliczasz sobie ile bramek już minął (zabezpieczając przed powtarzaniem, cofaniem i innymi niesportowymi zachowaniami;)). A między bramkami to zliczasz odległość punktu pozycji gracza do płaszczyzny, w której zawarta jest kolejna bramka, przez którą powinien gracz przejechać. Myślę, że jeżeli nawet w jakichś szczególnych wypadkach (np. prostopadłe zakręty itp.) zbyt dokładne, to dzieci się nie zorientują ;) z resztą chyba drobne błędy podczas zakrętów i manewrów są dopuszczalne bo i tak liczy się w końcu kto szybciej pokona linię mety.

//Edit: Jak widać ilu programistów tyle rozwiązań ;) Musisz po prostu znaleźć najlepsze dla konkretnej sytuacji (Twojej gry)
//Edit2: Oj.. czy ja nazwałem się programistą?:D "Pardą" ;)
« Ostatnia zmiana: Lipiec 11, 2008, 18:50:51 wysłana przez Karczas »

Offline steffan

  • Użytkownik
    • Adam Roszyk Blog VR, Startups, Travels

# Lipiec 11, 2008, 18:51:06
Wydaje mi sie ze jezeli jeden samochod wyprzedza tego drugiego, sila rzeczy jego srednia predkosc od poczatku trasy jest wieksza niz pojazdu wyprzedzanego...
No właśnie tak jak mówiłem, nie koniecznie, wyobraź sobie taką sytuację-
Jedzie sobie pojazd sterowany przez ai, który ma większą średnią prędkość od prędkości gracza (nie znacznie, ale jednak) i mimo wszystko jest za graczem o mniejszej prędkości, dlaczego ? Gracz był mądrzejszy od mojego prostego Ai i postanowił ostro ścinać zakręty, czego przeciwnik nie potrafi  ;)
Zostanę jednak przy tych punktach kontrolnych. Sprawdziły się przy mecie- tutaj także muszą zadziałać :)

Edit: Dobra myślę że już będę potrafił to jakoś w miarę przyzwoicie sklecić.
Wielkie dzięki +  ;)
« Ostatnia zmiana: Lipiec 11, 2008, 18:54:22 wysłana przez steffan »