Skocz do zawartości

Okrążenia w wyścigach - problem


Pieter

Rekomendowane odpowiedzi

Jak już wiecie od pewnego czasu próbuje napisać silnik naliczania okrążeń do mojej gry. Okazało się to bardzo proste i mam już prawie wszystko ukończone lecz znów mam problem. Silnik opiera się na checkpointach, by zaliczyć okrążenie musisz zaliczyć każdy "punkt kontrolny" wszystko ładnie, pięknie zrobione gdyby nie to że moja gra ma bardzo pozawijane mapy i żeby narysować każdy chceckpoint musiał bym strasznie długo nad tym siedzieć. Dlatego wymyśliłem system w którym kładę klocki o powierzchni 16x16 obok siebie i gdy samochód przejedzie jeden z nich i oznacza go jako zaznaczony to klocki w odległości 16 pixeli od zaznaczonego także się powinny zaznaczać. Powinny bo się nie zaznaczają i tu jest mój problem. Gdzie popełniłem błąd? Kod sprawdzający czy inne klocki są zaznaczone znajduje się w obiekcie check w evencie step.

 

https://gmclan.org/up44_11_laps.html

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Szczerze mówiąc to głupie rozwiązanie. Ja bym na twoim miejscu zrobił coś takiego jak w różnych edytorach wyścigówek, a mianowicie stawiasz jeden klocek po jednej stronie drogi, potem drugi po drugiej i między nimi powstaje linia, przez którą każdy zawodnik musi przejeżdżać. Teraz każdy z graczy sprawdza cały czas czy nie koliduje z tą linią za pomocą funkcji collision_line. Oczywiście sprawdzamy kolizję tylko z następnym checkpointem a nie wszystkimi na raz, bo w ten sposób obciążylibyśmy niepotrzebnie gm'a.

 

I jeśli nie chcesz robić osobnego edytora tras, to po prostu stawiając klocki w edytorze room'a, w ich eventach create twórz zmienne z id klocka pary.

Odnośnik do komentarza
Udostępnij na innych stronach

Dobry pomysł Ranmus. Spróbuje coś zrobić i jeżeli mi się uda to tu to opublikuje.

Ale jeżeli nie to będę potrzebował pomocy z tym obecnym co tu jest...

 

EDIT:

Nie daje rady. Co chwile jakiś błąd. :/ Pomóżcie mi z jednym z tym pomysłów plss

Odnośnik do komentarza
Udostępnij na innych stronach

Ja bym zrobił objekt Point1 i Point2, który tworzy Line1 w ten sposób:

lin = instance_create(x,y,Line1);
p2 = instance_nearest(x,y,Point2);
lin.image_angle = point_direction(x,y,p2.x,p2.y);
lin.image_xscale = distance_to_object(p2) / 64

zamiast 64 możesz wpisać szerokość sprite'a

ważne jest aby origin_x Line1 miał wartość 0 a origin_y miał wartość center

Odnośnik do komentarza
Udostępnij na innych stronach

Zawsze się zastanawiałem co obliczają...

 

bez znajomości matmy to nigdy nie zrobisz dobrego programu takiego naprawde dobrego który byłby napisany w taki sposób by ciagnąć jak najmniej mocy kompa i jednocześnie wydajnie pracować...

 

jak na złość matma jest trudna :/ ja szczególnie to odczuwam ostatnio i też mam problem z funkcją sin i cos mimo że już to miałęm w budze...

Odnośnik do komentarza
Udostępnij na innych stronach

Hanjuso, masz w pełni rację :) Powinienem dodać jeszcze pozycję punktu.

 

Mat, wiesz że ja należę do osób leniwych :P

https://gmclan.org/up152_11_czekpointy.html

Mi się nie chce rozstawiać setki razy takich punktów jak tylko zmieni mi się path dla samochodów AI.

 

Pieter, zaraz wpiszę Ci to w ten pliczek.

Odnośnik do komentarza
Udostępnij na innych stronach

Pieter co do twojego przykladu, to popelniles 2 bledy.

1. Jezeli uzywasz instance_place, to musisz podac dokladna pozycje pozycje obiektu, czyli np. x+16, nie x+1. Zeby dzialalo x+1 trzeba uzyc instance_place.

2. Zle uzyles other. Uzywamy to, gdy kozystamy z eventu kolizji z obiektem, lub instrukcji po kodzie with(xxx).

W twoim przykladzie wystarczy napisac obj.costam zamiast other.costam.

 

Edit. nie odswiezylem tematu i Tymon mnie wyprzedzil ;(

Edit2. tak patrze ze jednak z tym instance position bylo dobrze ;|

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...