Skocz do zawartości

Temat zbiorczy na drobnostki


Chell

Rekomendowane odpowiedzi

Będę strzelał że jeśli używasz view to cos w stylu:

 

window_set_mouse(x_jaki_chcesz - view_xview[twoj_view], y_jaki_chcesz - view_yview[twoj_view])

 

Raz działa, raz nie... :huh:

 

GML
if(global.aimbot){

if(instance_exists(player)){

target = instance_nearest(player.x, player.y, simple_stalker)

if target.x>view_xview[0] and target.y>view_yview[0] and target.x<view_xview[0]+view_wview[0] and target.y<view_yview[0]+view_hview[0] {

window_mouse_set(target.x - view_xview[0], target.y - view_yview[0])

}

}

}

Odnośnik do komentarza
Udostępnij na innych stronach

Co znaczy raz działa a raz nie? kod na oko wygląda ok.

Sprawdź czy wszystkie zmienna są poprawne gdy nie działa, czyli global.aimbot(czy włączony), player(czy to ta instancja którą chcesz), target(czy istnieje i czy zwraca tego którego uważasz że powinno zwrócić), czy przechodzi wtedy ifa. co wypisuje target.x - view_xview[0] ( wtedy kiedy nie działa oczywiście )

Itd aż znajdziesz przyczynę : f

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 tygodnie później...

Chciałem żeby obiekt się niszczył po skończonej animacji. Myślałem, że jak każda instancja będzie miała ten sam speed i image_speed to powinny pokonywać ten sam dystans, ale jak sprawdzam przez distance_to_point(xstart,ystart), to okazuje się, że dla każdego innego kierunku ruchu jest inny pokonany dystans. Skoro speed oznacza ile pixeli pokonuje obiekt w trakcie 1stepu, to skąd różne wartości?

I druga sprawa, do której rozwiązania potrzebuję rozwiązać pierwszy problem. Chcę znając liczbę klatek animacji, speed i dystans który chce żeby obiekt pokonał, wyliczyć jaki musi być dla niego image_speed. Jak to zrobić?

Odnośnik do komentarza
Udostępnij na innych stronach

Różnica w dystansie bierze się stąd, że funkcja distance_to_point() nie mierzy odległości od punktu do punktu, tylko od najbliższej krawędzi maski tego obiektu do punktu.

Jeżeli maska jest kwadratowa to wiadomo że pod różnymi kątami masz inną odległość. Po za tym to jest wolna funkcja w porównaniu do point_distance()

Odnośnik do komentarza
Udostępnij na innych stronach

Początek kodu który ma na celu szukanie gracza w miejscu w którym był ostatnio- kiedy ukryje sie za przeszkodą

 

GML
if (seen=true)&&(collision_line(x, y, obj_Player.x, obj_Player.y, obj_Wall, false, true)){seen=false

tr=instance_create(obj_Player.x,obj_Player.y,obj_track) track=true }

 

if (track=true){ mp_potential_step(tr.x, tr.y, spd, false) }

 

Czyli jak gracz znika z pola widzenia- tworzy obiekt ktory jest w jego ostatniej znanej pozycji i tam idzie.

 

I teraz pytanie- dlaczego przeciwnik (mimo prawidlowego stworzenia obiektu obj_track) idzie w kierunku gracza a nie tego obiektu?Mogę się poruszac i bedzie mnie gonil..

 

Z

GML
mp_linear_step
działa tak jak powinno.....why??
Odnośnik do komentarza
Udostępnij na innych stronach

Ło Panie, przecież to co step będzie tworzyło nowe lastplayerx/y- dopóki gracz jest za przeszkodą - niczym się nie rózni od podążanie za graczem i widzeniu przez ściany...

 

Ale nwm - teoretycznie problem rozwiązany bo działa tak jak powinno.Problem pojawia się inny- koda działa tylko wobec pierwszego przeciwnika który go użyje.Każdy kolejny nie zaznacza zmiennej "track" mimo że spełnia wszelkie warunki ku temu..Tak jakby była jednorazowa..

Odnośnik do komentarza
Udostępnij na innych stronach

Znalazlem ciekawy system swiatel do swojej gry, wszystko dziala tak jak powinno poza jednym elementem-powierzchnia na jakiej dziala

 

Wszystko odbywa sie na surface, w skrypcie mam określić więlkość surface

Początkowo spróbowałem:

 

GML
surface_create(view_wview[0],view_hview[0])

 

Wszystko ok ALE w mojej grze view obraca się razem image_angle postaci- i zawsze kiedy się obrócę to widzę że góra i bok surface się gwałtownie kończy,zostawiając kilka cm widocznej strefy bez surface.I teraz problem jest taki- nieważne jaki rozmiar surface wpiszę (room_width/height ,określone liczby-nawet ogromne viee_wview[0]*5 itp) to zawsze surface kończy się dokładnie w tym miejscu zostawiajać "gołą" strefę...

 

Co z tym zrobić?

Odnośnik do komentarza
Udostępnij na innych stronach

Ustaw application_surface na wymiary Twojego surface

Potem rysuj surface na pozycji 0,0 bez zadnych szalenstw, bedzie 1:1 na luzie wzgledem ekranu. A jezeli nie to musisz tez zmienic view_wport i view_hport na ratio surface'a.

Odnośnik do komentarza
Udostępnij na innych stronach

Pytanie bardzo drobnostkowe,odpowiedź pewnie jest banalna.

Chciałbym zrobić randomowe przywitania NPC,używając tego kodu :

GML
draw_text(x,y,choose("Witaj!","Dzień dobry","Ahoj!"));

Jednak ten kod robi że teksty się zmieniają,co zrobić by pokazał się jeden tekst bez zbędnych zmian?

Odnośnik do komentarza
Udostępnij na innych stronach

Chcę mieć elementy GUI w 4 rogach ekranu . Ap.surface dostosowuje się do rozdzielczosci -jak zrobic ze na kazdym ekranie GUI zawsze byly w tym samym miejscu??

 

mam

GML
w=display_get_gui_width()

h=display_get_gui_height()

 

Jak to przydzielic do 4 rogów?

Odnośnik do komentarza
Udostępnij na innych stronach

[0,0] to zawsze lewy górny

[display_get_gui_width(),0] to zawsze prawy górny

[0,display_get_gui_height()] to zawsze lewy wolny

[display_get_gui_width(),display_get_gui_height()] to zawsze prawy dolny

Odnośnik do komentarza
Udostępnij na innych stronach

kolizja z otoczenie w top down

 

GML
a = point_direction(x, y,other.x, other.y); //Get the direction from the colliding object

xoff = lengthdir_x(1, a) //Get the offset vector

yoff = lengthdir_y(1, a)

 

 

//Move out of collision

while (place_meeting(x, y, other))

{

x -= xoff //Move the instance out of collision

y -= yoff

other.x += xoff //Move the other instance out of the collision

other.y += yoff

 

Działa ok ale daje strasznie nierealistyczny efekt ślizgania- jak idę prosto w obiekt z którym koliduje to mnie gwałtownie przesuwa w bok-szczegolnie nieciekawie to wyglada przy kolizji z przeciwnikiem...

 

pytanie: co zmienić żeby postać przy kolizji po prostu się zatrzymywała w miejscu?? Efekt udaje się uzyskać kiedy dramatycznie zmniejszę zmienne np.

x -= xoff/20000 - wtedy wyglada to tak jakbym chcial- ale fps nieprawdopodobnie spadaja aż do poziomu zawieszenia gry....

Odnośnik do komentarza
Udostępnij na innych stronach

To by było zbyt piękne;p W takiej sytuacji obiekt po prostu zatrzymuje się już na zawsze.Chodzi o dynamiczną kolizję która umożliwia zderzenie ze sobą np 2 przeciwników-tak żeby po kolizji naturalnie się rozmineli, obecny system wydaje się być dobry ale jest 2000x za mocny ;p Muszę zmniejszyc

lengthdir_x(1, a)

lengthdir_y(1, a)

 

Tak żeby prcesor nie oszalał

Odnośnik do komentarza
Udostępnij na innych stronach

A może zaokrąglaj?

GML
//Move out of collision

while (place_meeting(x, y, other))

{

x -= xoff //Move the instance out of collision

y -= yoff

other.x += xoff //Move the other instance out of the collision

other.y += yoff

x = round(x)

y = round(y)

other.x = round(other.x)

other.y = round(other.y)

Odnośnik do komentarza
Udostępnij na innych stronach

Edit: Już mam. -_- Przeczytajcie to zrozumiecie. Debil ze mnie.

 

Czy czegoś nie rozumiem.

W jednym obiekcie (depth = -1) w draw robię:

GML
shader_set(shaderek);

draw_surface(surface,(room_width-surface_get_width(surface))/2,(room_height-surface_get_height(surface))/2)

shader_reset()

Wszystko działa tu dobrze.

 

Teraz w drugim obiekcie (depth = 0) rysuję inne elementy. draw_text(), draw_sprite().

I to już nie działa. To co dzieje się w shaderze sprawia że reszta elementów gry nie jest już rysowana. Jeżeli będę rysował sam surface bez przepuszczania go przez shader to wszystko będzie się dobrze rysować.

 

Any ideas? Wytłumaczenie będzie jeszcze lepsze.

Odnośnik do komentarza
Udostępnij na innych stronach

Czy draw_text i draw_sprite, etc zapisujesz do surface czy bezposrednio "w grze"?

Nie wylączyłeś czasem application_surface? Bez niego nie wyrenderujesz z shaderami.

 

Edit: Dobra, sam to rozwiązałeś, na kij piszę.

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ę...