Skocz do zawartości

Temat zbiorczy na drobnostki


Chell

Rekomendowane odpowiedzi

2 godziny temu, Ignatus napisał:

Naprawdę nikt nie wie jak zrobić to metodą którą zaproponowałem?

 

 

 

tu nie chodzi o to, ze nikt nie wie - tu chodzi o to ze ten "najprostrzy" sposob sprawi, ze bedziesz sie jeszcze bardziej z tym miotal, bo ma to restrykcje gdzie na przyklad moga pojawiac sie elementy krwi, a gdzie nie, plus wydajnosc to zabije.
my serio staramy sie rozwiazac ten problem na sposoby, ktore pozbawia Cie meczarni i nie zabija aplikacji. to nie jest taki trywialny problem, jak Ci sie wydaje i tutaj w kazdej metodzie zyskujesz cos, tracac cos innego - nie ma tu sytuacji win-win. jak chcesz miec to zrozumiale dla Ciebie, to bedzie to niewydajne i bugogenne, ale zyskujesz wygode prostej implementacji. w druga strone implementacja jest nieco bardziej skomplikowana, ale zyskujesz na wydajnosci.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy
Dnia 30.10.2017 o 14:43, Ignatus napisał:

Nie chce shaderów ani surface

 

Przykład z blogu yoyogames nie korzysta z surface. Ze zmiany blendingu, ale przez to nie obsłguje kanałów alpha.

Odnośnik do komentarza
Udostępnij na innych stronach

Ok,ale ten przykład jest na GM2, no chyba że omineła mnie aktualizacja wprowadzająca do GM1.4 komendy typu "gpu_set_blendenable(false)"

 

A jako że ja mam wiecznie problemy to mam kolejną małą i prostą sprawę w międzyczasie do blood ;p

 

Mam obiekty broni, z parentem obj_weapon_parent.Obiekty maja w create event_inherited().Obj_weapon_parent tworzy zmienną "saved=false".Ale z jakiegoś powodu pojawia się błąd

Variable obj_sword.saved(100335, -2147483648) not set before reading it.
 at gml_Object_obj_weapon_parent_StepNormalEvent_1 (line 2) - if (saved=true){effect_create_above(ef_spark,x,y,.1,c_red) }

Dlaczego event_inherited tutaj nie działa?? Jak wpiszę ręcznie do create obj_sword to wysypie się następna w kolejnosci broń.Dodam że ta komenda z błędu także pochodzi z parenta-jak to jest że step dziedziczy a create już nie ?

 

 

edit.wygląda na to że tym razem wyjątkowo znalazłem nowego buga zamiast popełnić błąd.Ten event Create był całkowicie skopiowany z innego obiektu i z jakiegoś powodu był przez to ignorowany przez jego dzieci....Testowałem na różne sposoby (np instance_destroy()  w pierwszej linijce) .Po usunięciu tego eventu i w nowym wpisaniu wszystkiego ręczenie działa tak jak powinno..Brawo Yoyo

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 tygodnie później...

Czy siatki ds_grid są globalne czy lokalne? Chodzi mi o to, że jeśli w:

 

object1 - create

grid = ds_grid_create(width, height);

object2 - create

grid = ds_grid_create(width, height);

 

To będą się one w jakiś sposób gryzły? czy po prostu jak są w oddzielnych obiektach to siebie nie widzą.

Odnośnik do komentarza
Udostępnij na innych stronach

@SimianVirus7 nie chodzi o to czy kolekcje danych są globalne, czy lokalne - o tym decyduje, gdzie te utworzoną kolekcje zapiszesz, do "czyjej" zmiennej. wszelkie wartości trafią, do tego obiektu on należy, ale nic nie stoi na przeszkodzie współdzielić kolekcję pomiędzy obiektami. taka dana siedzi gdzieś w pamięci komputera i zmienne jedynie wskazują na tę daną w pamięci (w sensie liczby akurat są zawsze kopiowane, stringi prawdopodobnie też ale kolekcje są zawsze gdzieś w pamięci i podczas utworzenia kolekcji dostajesz jej identyfikator, numer, który jest niejako wskaźnikiem, którym przy obsłudze kolekcji mówisz GMowi, którą kolekcję modyfikujesz).

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy
Dnia 16.11.2017 o 18:33, SimianVirus7 napisał:

Czy siatki ds_grid są globalne czy lokalne? Chodzi mi o to, że jeśli w:

 

object1 - create


grid = ds_grid_create(width, height);

object2 - create


grid = ds_grid_create(width, height);

 

To będą się one w jakiś sposób gryzły? czy po prostu jak są w oddzielnych obiektach to siebie nie widzą.

 

Są globalne. Do zmiennej zostanie przypisany numer grida. Jak zrobisz to do tej samej zmiennej, to ten stary grid nadal istnieje, tylko nie masz zapisanego nigdzie jego numerka.

Powiedzmy sobie, że każdy ds_xxx działa tak samo jak dodawanie sprite - dostajesz ID, ale jak znika zmienna to nie znika zasób i nadal wisi w pamięci. I jakbyś na chybił trafił tę cyferkę podał, to byś nawet odczytał te wartości?

Odnośnik do komentarza
Udostępnij na innych stronach

  • 3 miesiące temu...

Mm pytanie co do dźwięku przestrzennego.Na razie dopiero sobie testuje na przykładzie odgłosu pochodni do której się zbliżam i oddalam (top down)

 

Mam 

emisja= audio_emitter_create();

audio_falloff_set_model(audio_falloff_linear_distance_clamped)
audio_emitter_falloff(emisja,100,300,1)

I działa to tak jak powinno ale jest wyczuwalny bardzo wyraźny "skok" pomiędzy jest dźwięk/nie ma dźwięku- dopiero potem zaczyna się odpowiednia regulacja głośności do odległości(wtedy działa dobrze).Jak zrobić maksymalnie płynne przejście w granicę słyszenia cichego dźwięku?Kombinowałem z liczbami w audio_emitter_fallof i modelem fallof ale każde rozwiązanie było tylko gorsze i te ustawienia póki co są najlepsze (tylko jest wyczuwalny skok).Jakieś pomysły?

Odnośnik do komentarza
Udostępnij na innych stronach

Może to kwestia modelu? clamped sugeruje ze jest to zamkniete miedzy dwiema wartosciami i wartosc minimalna moze byc malo plynna, probowales uzyc nieclampniętego liniowego albo exponent?

 

Edit: Z dokumentacji wychodzi że clamp działa na minimalny dystans, nie maksymalny. Nie mam pojęcia jak temu zaradzić w łatwy sposób. Możesz zawsze ręcznie zaprogramować listener robiąc grupę audio i zmieniając jej głośność w zależności od dystansu.

Odnośnik do komentarza
Udostępnij na innych stronach

Mam dziwne wrażenie że ten cały system audio to jakiś niedorobiony jest ,ale może to kwestia braku doświadczenia na tym polu.

 

Załóżmy że mam 5 obiektów "pochodnia" w jakiejś odległości od siebie.Cały dzień już kombinuje jak zrobić żeby głos wydobywał się z każdej pochodni do jakiej podchodzę (i oddalał tak jak powinien)- zamiast tego mam taki efekt że jest ok przy 1 w kolejności- potem mijam kilka i np załącza się 4-5, albo jak spowrotem wracam to znów losowo się uruchamiają.Jak w trakcie gry zrobię reset to nawet ta 1 juz nie dziala prawidłowa.W ogóle nie ogarniam jaki prawami się to rządzi...

Odnośnik do komentarza
Udostępnij na innych stronach

7 godzin temu, Penguin napisał:

Gdy jesteśmy w wodzie, wolniej się poruszamy. Chcę takie coś zrobić w grze, lecz nie wiem, jak się do tego zabrać.

Jakiej funkcji mam użyć? Za wszystkie odpowiedzi dziękuję.

 

To bardzo łatwe,sprawdzasz czy x,y twojej postaci jest na danym obj_woda,jeżeli tak wtedy  movement_speed=/2

Najlepszą do tego funkcją bedzie place_meeting.

Odnośnik do komentarza
Udostępnij na innych stronach

Poradziłem sobie z poprzednim problemem z audio ale teraz mam ciekawszy.

 

Czy ilość dźwięków granych równocześnie jest jakoś limitowana?Mam kilka dzwieków które graja sie naraz (przyklad- uderzenie mieczem- rownoczesnie dzwiek uderzenia i ból wroga)

I baaardzo często odgrywa sie tylko 1 dzwiek, czasem 2 , czasem żaden (bo np w tle sa inne jak kroki itp).Mam różne "priority" ustawione w dzwiekach ale czy to oznacza ze beda sie wzajemnie wylaczac?Dramatycznie slabo to sie prezentuje póki co :/

Odnośnik do komentarza
Udostępnij na innych stronach

Nie rozumiem za bardzo pytania..

 

Mam np sytuację taką

trafiam wroga i mam w evencie kolizji

audio_play_sound_at(snd_hit,x,y,0,100,600,1,0,10)
audio_play_sound_at(snd_pain,x,y,0,100,600,1,0,20)

I odtwarza sie to losowo - raz oba,raz jeden z nich,raz żaden - a powinny zawsze oba naraz

 

edit:dodatkowo po pewnym czasie przestaja grac jakiekolwiek dzwieki,gra staje sie niema :/

Odnośnik do komentarza
Udostępnij na innych stronach

Czy jest jakiś dokładniejszy sposób na pomiar aktualnego czasu niż get_timer()? Nie chodzi mi o jeszcze drobniejszą skalę czasu, tylko coś co faktycznie obecny "moment" zwraca.

Bo get_timer i current_time aktualizują swoje wartości co step, a ja potrzebuje czegoś co zwróci czas pomiędzy stepem. Po co mi to? Do obliczenia pingu. Jak licze (czas obecny - czas wysyłki) to zawsze wynik jest wielokrotnością 16 lub 17, bo 1 step zabiera 16.66ms przy 60 stepach na sekundę.

 

Edit: Alternatywnie to może być jakiś błąd GM'a bo kiedyś sprawdzałem jak długo wykonuje się skrypt używając get_timer przed i po skrypcie i działało - wyświetlało mikrosekundy różnicy. A jak używam tego w funkcji do asynchronous to już nie działa tak.

Odnośnik do komentarza
Udostępnij na innych stronach

moze pokaz jakis przyklad kodu, jak tego uzywasz, bo powinno to dzialac dobrze z get timer

Odnośnik do komentarza
Udostępnij na innych stronach

Aktualizacja pingu:

///NetServerGetPing(Socket);
var _sckpos = ds_list_find_index(PlayerSocket,argument0);
if _sckpos!=-1{
 var ct = floor(get_timer()/1000);
 PlayerTimeout[| _sckpos] = ct;
 PlayerPing[| _sckpos] = ct - PlayerPingStamp[| _sckpos];
 PlayerPingStamp[| _sckpos] = ct;
 NetServerSendPing(argument0);
}

 

Po wykonaniu NetServerSendPing(argument0); serwer oczekuje wiadomości zwrotnej która ponownie wywoła powyższy skrypt. Innymi slowy liczony czas to czas od wywołania aktualizacji do wywołania aktualizacji.

Kod nie wykonuje się w stepie tylko w Asynchronous Networking, więc powinien działać POZA stepem, szybciej od niego, tak szybko jak szybko przychodzą pakiety.

Chyba że czegoś nie wiem o asynchronousie i wykonuje on się tylko tyle razy na sekundę co step.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy
Dnia 9.03.2018 o 12:36, Ignatus napisał:

Nie rozumiem za bardzo pytania..

 

Mam np sytuację taką

trafiam wroga i mam w evencie kolizji


audio_play_sound_at(snd_hit,x,y,0,100,600,1,0,10)
audio_play_sound_at(snd_pain,x,y,0,100,600,1,0,20)

I odtwarza sie to losowo - raz oba,raz jeden z nich,raz żaden - a powinny zawsze oba naraz

 

edit:dodatkowo po pewnym czasie przestaja grac jakiekolwiek dzwieki,gra staje sie niema :/

 

Teoretycznie jest 128 kanałów na dźwięki (na raz) które ustawia audio_channel_num - a korzystanie ze zwykłego audio_play_sound() powoduje to samo ? Ewentualnie źle używasz tej funkcji - x i y to nie powinny być pozycje gracza, tylko pozycje +/- względem audio_listener_position(x,y,z) - zapewne nie zmieniasz tej pozycji, wiec domyślnie masz 0,0,0, jak gracz odejdzie za daleko to po prostu głośność = 0 i dlatego nie gra.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Sprawdzanie czy trzeba wywołać oczywiście wygląda, że jest co step, bo GM nie jest aż tak asynchroniczny. Ciekawostką jest, że większość eventów działa wspólnie dla wszystkich obiektów, tzn. np. http_get można wywołać w jednym a odebrać w drugim (albo kilku obiektach) na raz.

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