-
Postów
264 -
Dołączył
-
Ostatnia wizyta
-
Wygrane w rankingu
31
Odpowiedzi społeczności
-
SimianVirus7 odpowiedź w Celownik, shooter 2d został oznaczony jako odpowiedź
Pierwsze co przychodzi na myśl, to lengthdir'y. Proste i użyteczne.
Do x celownika dopisujesz x gracza + lengthdir_x(odległość, kierunek);
Do y celownika dopisujesz y gracza + lengthdir_y(odległość, kierunek);
Tu masz przykład jak to zrobić w DRAW w obiekcie gracza, który po prostu rysuje sprite celownika. Tym samym sposobem możesz tworzyć obiekty pocisków wystrzeliwane przez gracza
draw_sprite(sCross, 0,x + lengthdir_x(150, image_angle),y + lengthdir_y(150, image_angle));
-
SimianVirus7 odpowiedź w wyjaśnienie kodu został oznaczony jako odpowiedź
Chodzi tutaj o dodatkowe sprawdzanie każdego piksela, tak zwane "pixel perfect collision". Samo IF sprawdza, czy w odległości od równej prędkości poruszania jest ściana (oWall). Jeśli tak, oczywiście IF wykonuje się. Ale co jeśli prędkość jest większa niż powiedzmy 10px? Wtedy zostanie nam luka, bo IF sprawdził to tylko raz. Kod w WHILE wykonuje się BEZ PRZERWY dopóki warunek jest spełniony. Dlatego łatwo grę można zatrzymać w miejscu, ponieważ WHILE zapętla się i nie pozwala programowi wykonywać się dalej, kiedy źle określimy warunek.
Czyli, wykonując swój kod, IF sprawdza, czy napotkano ścianę, jeśli tak, WHILE sprawdza pozycję gracza + jeden pixel! (sign oznacza jeden pixel) i jeśli nie wykryję ściany, przesuwa gracza o ten jeden pixel i tak w nieskończoność, dopóki pozycja gracza + jeden pixel == pozycja ściany.
W praktyce wygląda to następująco, gdy prędkość poruszania się gracza to 20px
-
SimianVirus7 odpowiedź w Wyskakujące punkty został oznaczony jako odpowiedź
Cóż, jeśli chodzi Ci mniej więcej o taki efekt:
To ja osiągnąłem to następującym sposobem.
Stworzyłem nowy obiekt, który nie ma sprite. W nim mam zmienną text która przechowuje jakiś string. Gdy potrzebuje wyświetlić jakikolwiek, gdziekolwiek tekst, tworzę tą instancje (nazwałem ją obj_Text), w tym miejscu gdzie chcę. Przy tworzeniu, dopisuje tekst, jaki ma wyświetlić. Podstawa kodu jest taka:
var show_text = instance_create(x, y, obj_text); //przypisanie instancji do zmiennej pozwala go konfigurować podczas tworzenia show_text.text = "Zyskujesz 50 punktów"; W obj_Text mam też zdefiniowaną czcionke, kolor, czas wyświetlanego tekstu itp. oraz vspeed = -1; żeby napis leciał w górę
-
SimianVirus7 odpowiedź w Miganie postaci po kolizji został oznaczony jako odpowiedź
Cóż twój największy problem rozwiązuje króciutka linijka kodu:
STEP
///Miganie obiektu image_alpha = sign(sin(current_time/częstotliwość_migania)); sign - sprawia, że obiekt jest albo widoczny, albo nie. Daje wynik zero-jedynkowy. Możesz go usunąć, wtedy będziesz miał płynne przejścia przy miganiu.
częstotliwość_migania - zastąp go jakąś cyfrą. Fajny wynik daje liczba 100 lub 110
Co do innych zapytań:
1) odrzucenie bohatera po kolizji z potworem - wydaje mi się, że nie ma uniwersalnego sposobu, zależy to od twojego kodu. Możesz dać speed = -1 i zobaczyć co się stanie.
2) gracz staję się na chwilę nietykalny - tu także nie będzie uniwersalnego sposobu. Chyba najbardziej banalnym rozwiązaniem będzie stworzenie osobnej zmiennej, która definiuje czy gracz ma być podatny na obrażenia lub nie. Coś w stylu:
if(player.can_get_damage == true) { player.hp -= 10; }