Ignatus Opublikowano 2 Września 2017 Udostępnij Opublikowano 2 Września 2017 I teraz jest idealnie.Dzięki Uzjel 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 5 Września 2017 Udostępnij Opublikowano 5 Września 2017 Jak dołączyć float do int? Zmienić int w float, ale tak, żeby ten int było po przecinku. Coś takiego: zmienna = 0.hspeed zmienna = 0. && hspeed zmienna = 0. and hspeed zmienna = 0.+hspeed (tak wiem, to jest bez sensu, bo to zwykłe dodawanie dwóch liczb) Chodzi mi o to, żeby liczba przed przecinkiem zawsze wynosiła 0 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 5 Września 2017 Udostępnij Opublikowano 5 Września 2017 Jednym z pewnych rozwiązań jest zabawa stringami. Nie mam siły teraz myśleć więc czekam aż ktoś zaproponuje optymalniejsze rozwiązanie. zmienna = real("0."+string(zmienna2)) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
strzelec Opublikowano 5 Września 2017 Udostępnij Opublikowano 5 Września 2017 Trochę innym rozwiązaniem (dłuższym) jest podzielenie zmiennej przez wielokrotność 10: zmienna = 4467; zmienna2 = string(zmienna); // zmiana liczby na string zmienna3 = string_length(zmienna2); //policzenie z ilu cyfr składa sie string zmienna zmienna4 = zmienna / power(10, zmienna3); // podzielenie zmiennej przez dzisiątkę do potęgi zmienna3 zmienna5 = string_format(zmienna4, 1, zmienna3); // wypisuje zmienną po z odpowiednią ilością miejsc po przecinku Zmienna5 jest po to. bo GM zaokrąglał wynik do 2 miejsc po przecinku. A tu wklejając wszystko do przykładu Threefa zmienna2 = string_format(real("0."+string(zmienna)), 1, string_length(string(zmienna))); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 5 Września 2017 Udostępnij Opublikowano 5 Września 2017 To mam już lepsze: liczba = 31352 wynik = liczba while(wynik>1) { wynik/=10 } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 5 Września 2017 Udostępnij Opublikowano 5 Września 2017 W tym momencie czy nie wydajniej juz zostac przy "0."+string(zmienna)? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 6 Września 2017 Udostępnij Opublikowano 6 Września 2017 Mam do narysowania setki drzew.Tzn dokładnie każde drzewo w top-down jest "fake 3d" rysuje się kilka razy w zależności od pozycji gracza-wygląda to spoko ale x100 to zaczyna zamulać.Teraz pytanie jak to najskutczniej zoptymalizować? Próbowałem w draw drzew: if (distance_to_object(obj_Player<900)){ // Draw } - nic to nie dało albo if (rectangle_in_rectangle(bbox_left, bbox_top, bbox_right, bbox_bottom, bview_xview[0], view_yview[0], view_xview[0] + view_wview[0], view_yview[0] + view_hview[0])) { // Do something } Trochę lepiej ale niewiele i do tego drzewa pojawiają sie na skraju view co jest widoczne Jakieś pomysły? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 6 Września 2017 Udostępnij Opublikowano 6 Września 2017 @Ignatus Drugie rozwiązanie, ale musisz uwzględnić rozmiar drzew. Niestety ale prawdopodobnie rysujesz tego za dużo. Poza tym nie rób if(rectangle_in_rectangle()){draw_sprite()} Rób w step: if(point_in_rectangle()) {visible =true} else {visible=false} W ten sposób całkiem wyłączasz event draw. To o wiele bardziej przyśpiesza bo dany obiekt wcale nie wykonuje eventu draw. Sprawdzenie punktu też jest szybsze niż prostokąta. Dobież tylko marginesy w rozmiarach sprite. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 6 Września 2017 Udostępnij Opublikowano 6 Września 2017 Jakoś nie potrafię tego skutecznie ogarnąć, zapewne dlatego że view obraca się razem z graczem i zawsze jakiś fragment widoku jest w innej pozycji niż zakładałem -a drzewa pojawiają sie i znikają z kosmosu.. Stąd kolejne pytanie jak zrobić pole większe od view np o połowę? jak testowo zrobię draw_rectangle(view_xview[0], view_yview[0], view_xview[0] + view_wview[0], view_yview[0] + view_hview[0],0) to widzę wyraźnie że jest mnóstwo miejsca poza obrazem zaznaczonym-jak zaznaczyć pole większe o połowę od aktualnego view? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 6 Września 2017 Udostępnij Opublikowano 6 Września 2017 Jeżeli dobrze przyjrzysz się temu jak się obraca kamera to zauważysz ze lewy górny punkt zostaje w miejscu ale pozostałe rogi się obracają dookoła punktu w lewym górnym rogu. Jeżeli obrócisz kamerę o 90 stopni to zamienią się osie. W górę będziesz mieć x a w prawo y. Wtedy szerokość ekranu która wynosiła np 1280 jest w przeciwną stronę. To co jest najbezpieczniej robić to w twoim wypadku operować na promieniu względem środka ekranu. var r = max(view_wview[0],view_hview[0])+margines var px = view_xview[0]+view_wview[0]/2 var py = view_yview[0]+view_hview[0]/2 with (drzewo) { if(point_distance(x,y,px,py)>r) { visible=false } else { visible=true } } Edit: A nie, bo właśnie w tym chyba problem. Musiałbyś wymnażać to przez sin i -cos z view_angle[0] żeby dawało ci dobrą pozycję środka kamery... Chyba. Nie jestem już w stanie odpowiedzieć. Z dużo wypiłem. :| Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 6 Września 2017 Udostępnij Opublikowano 6 Września 2017 Działa idealnie.Wstawiłem z 200 drzew i zerowa ścina.Teraz pytanie- czy lepiej zrobić te var r,px,py w każdym obiekcie drzewo, zrobić to tylko np w obj control czy walnąć z tego global? Co najlepsze dla optymalizacji (teraz mam w obj_tree_parent i dziala dobrze ale może da się lepiej;p?) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 7 Września 2017 Udostępnij Opublikowano 7 Września 2017 W teorii teraz jedynie wyłączasz rysowanie. Dzięki temu kolizje dalej zachodzą poza ekranem, więc unikniesz dzięki temu sytuacji że np jakiś NPC utknie w drzewie gdy zbliżysz się. Ale jeżeli nie potrzebujesz sprawdzać kolizji to możesz równie dobrze dezaktywować obiekty. Jeżeli dezaktywujesz to lepiej wrzucić ten kod do drzew. Ale jeżeli nie to ja bym zrobił jeden obiekt który zarządzałby tym rysowaniem. Może to też robić gracz. No i 200 drzew to... ok. Ja przy tej technice w GM miałem 200000 obiektów w 30FPS na Pentium 4 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 1 Października 2017 Udostępnij Opublikowano 1 Października 2017 Zaimportowałem do projektu grupę skryptów z innego projektu.W tamtym projekcie wszystko śmiga ok- tutaj natomiast Reading project file....Error : script missing "scripts\animated_tile_add.gml" Error : script missing "scripts\animated_tile_cleanup.gml" Error : script missing "scripts\animated_tile_disable_all.gml" Error : script missing "scripts\animated_tile_enable_all.gml" Error : script missing "scripts\animated_tile_get_animation_speed.gml" Error : script missing "scripts\animated_tile_get_background.gml" Error : script missing "scripts\animated_tile_get_current_background.gml" Error : script missing "scripts\animated_tile_get_current_frame.gml" Error : script missing "scripts\animated_tile_get_frame_count.gml" Error : script missing "scripts\animated_tile_get_next_frame.gml" Error : script missing "scripts\animated_tile_init.gml" Error : script missing "scripts\animated_tile_is_playing.gml" Error : script missing "scripts\animated_tile_update.gml" Projekt w ogóle się nie kompiluje bo wyskakuje od razu okienko z takimi błędami. Odpowiedź wydaje się oczywista- błąd w końcu oznacza że nie istnieją takie skrypty- problem polega na tym że jak najbardziej istnieją i to o dokładnie takich nazwach. O co tu chodzi? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 1 Października 2017 Udostępnij Opublikowano 1 Października 2017 Nie działa dodawanie kilku skryptów na raz. Musisz robić to pojedynczo. Usuń wszystkie które stwarzają błędy i dodaj je ręcznie Ignatus i Uzjel 1 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 1 Października 2017 Udostępnij Opublikowano 1 Października 2017 Normalnie geniusz:) Dzięki Swoją drogą to jest bug czy co? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 1 Października 2017 Udostępnij Opublikowano 1 Października 2017 Tak to jest bug. Wcześniej można było tak importować. Teraz po prostu dodaje się wpis do *.project.gmx ale nie kopiują się pliki. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 27 Października 2017 Udostępnij Opublikowano 27 Października 2017 Walczyłem z tym parę miesięcy temu ale okazało się że problem nie jest rozwiązany :/ Top down.System kolizji Kod kolizji gracza z nieruchomym obiektem (np sciana) 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 x = round(x) y = round(y) } Wszystko spoko,tylko następuje bardzo nienaturalne ślizganie.Np idę w ścianę,delikatnie skręcę w bok i nagle przerzuca na kraniec obiektu.Kombinuje od bardzo dawna i nic nie potrafię wymyśleć.Zależy mi tylko na tym żeby tak zmienić ten kod żeby gracz po prostu wracał do poprzedniej pozycji-nie ruszał się.Akcje typu x=xprevious nie mają sensu bo po prostu utyka jak w bagnie.Zatrzymanie ruchu kiedy jest blisko ściany też się nie sprawdza bo działa tylko przy prostym poruszaniu.Jak gracza popchnie przeciwnik na ścianę albo zrobię obrót dotykając ściany to wszystko się wali..... Jak zrobić żeby TYLKO się zatrzymał? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 27 Października 2017 Udostępnij Opublikowano 27 Października 2017 Może zrób sterowanie tak, by do kolizji nie dopuścić, zamiast cofać ruch. Pokaż kod poruszania. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 27 Października 2017 Udostępnij Opublikowano 27 Października 2017 Eh Potrzebuję cofnięcia do poprzedniej pozycji, ruch nie ma znaczenia.Mój system jest sporo bardziej skomplikowany i jedyny element który kuleje to ślizganie w kolizji.W przypadku elementów ruchomych np.innych wrogów sprawdza się super ale do ścian już nie koniecznie.Ściana musi odepchnąć gracza do jego poprzedniej pozycji-bez uwięzienia go Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 27 Października 2017 Udostępnij Opublikowano 27 Października 2017 Nie, nie chcesz poprzedniej pozycji. Szukasz czegoś innego. Poprzednia pozycja to: x = xprevious y = yprevious Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 29 Października 2017 Udostępnij Opublikowano 29 Października 2017 Niestety rozwiązania w kodzie nie znalazłem więc użyłem drogi na skróty.Kolizje zrobiłem zamiennie zawsze z obiektami mniejszymi od gracza-stąd ślizganie na koniec obiektu którego dotyka jest niezauważalne.Jakby nie patrzeć problem rozwiązany Teraz mam coś dużo prostszego ale nie wiem jak się za to zabrać. Chciałbym żeby krew zostawiała ślady na ścianie.Jak zrobić żeby rysował się tylko kawałek sprite krwii i to tylko w tej części w której nastąpiła kolizja z obj_blood ? Przykłady które znalazłem (np z gry Ink) są dla nie absurdalnie skomplikowane i nie potrzebuje czegoś takiego.Wystarczy mi określenie tego miejsca na ścianie gdzie ma się rysować.Macie jakieś pomysły? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 29 Października 2017 Udostępnij Opublikowano 29 Października 2017 Godzinę temu, Ignatus napisał: Chciałbym żeby krew zostawiała ślady na ścianie.Jak zrobić żeby rysował się tylko kawałek sprite krwii i to tylko w tej części w której nastąpiła kolizja z obj_blood ? Przykłady które znalazłem (np z gry Ink) są dla nie absurdalnie skomplikowane i nie potrzebuje czegoś takiego.Wystarczy mi określenie tego miejsca na ścianie gdzie ma się rysować.Macie jakieś pomysły? są skomplikowane bo to nie jest taki prosty trick na zrobienie tego w grze z widokiem top-down. jak ja bym to zrobił: dzielisz rendering na kilka passów (pass to w skrócie przebieg renderingu, dla przykładu pierwej renderujesz scenę normalnie do surface, w kolejnym passie renderujesz informacje o światłach do drugiego surface, w trzecim renderujesz same normalki sceny do trzeciego surface, a w czwartym zaś w shaderku renderujesz już kombinację trzech surface na ekran gdzie masz wynikowy obraz oświetlonej sceny z cieniowaniem wypukłości - oczywiście tak się dokłądnie nie robi oświetlenia, ale rozumiesz już jak działają passy renderingu); w pierwszym passie renderujesz scenę normalnie na ekran; w drugim passie renderujesz na biało elementy, na których ma się odkładać krew i zabrudzenia zaś na czarno wszystko to, czego ma nie brudzić, do surface #1 - to będzie maska krwi i zabrudzeń; w trzecim passie renderujesz krew i zabrudzenia do surface #2 - to będzie kolor krwi i zabrudzeń; w czwartym passie rysujesz pełnoekranowy czworokąt z shaderkiem, w którym jako alphe stosujesz któryś z kanałów RGB z surface #1, a kolor zabrudzenia i krwi bierzesz z RGB surface #2. ten pass renderujesz na ekran. jeśli uznasz tę metodę za wartościową, to daj znać to zrobię przykład jak takie coś działa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 29 Października 2017 Udostępnij Opublikowano 29 Października 2017 Nie na moje możliwości ale brzmi na tyle ciekawie że chętnie przykład zobacze Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 30 Października 2017 Udostępnij Opublikowano 30 Października 2017 Ale tu przykładu nie trzeba. Masz idealnie opisane kroki. Shaderów też nie trzeba bo można to samo zrobić z blend modes. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 30 Października 2017 Udostępnij Opublikowano 30 Października 2017 Doceniam- ale ja z tego po prostu nic nie rozumiem Ja chcę iść po najniższej lini oporu-tak żebym miał nad tym później pełną kontrolę Potrzebuje takiego planu,nic więcej do szczęścia mi niepotrzebne : Na razie próbowałem: Kolizja: Cytuj splash=true vspeed=0 hspeed=0 wl=instance_place(x,y,other) depth=wl.depth-10 sh=sprite_height/2 pd=point_direction(x,y,wl.x,wl.y) xx = x + lengthdir_x(sh, pd); yy = y + lengthdir_y(sh, pd); x=xx y=yy Draw: if (splash=true){ draw_sprite_part(sprite_index,im,0,0,sprite_width,sh,xx,yy) } I jest beznadziejnie Nic nie działa jak powinno Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 30 Października 2017 Udostępnij Opublikowano 30 Października 2017 @Ignatus a powiedz mi, z ktorej wersji GMa korzystasz? sprobuje znalezc ominiecie problemu dla niej, Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 30 Października 2017 Udostępnij Opublikowano 30 Października 2017 1.4.1772 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 30 Października 2017 Udostępnij Opublikowano 30 Października 2017 okej, w domu pokombinuje z tym, dzis raczej nie ale jutro najpredzej Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 30 Października 2017 Administratorzy Udostępnij Opublikowano 30 Października 2017 Co do malowania krwi, to albo https://www.yoyogames.com/blog/430/dynamic-rendering-masks albo gra ink która była w humble bundle (tam był chyba kod źródłowy) ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 30 Października 2017 Udostępnij Opublikowano 30 Października 2017 w pierwszym poście napisałem " Przykłady które znalazłem (np z gry Ink) są dla nie absurdalnie skomplikowane i nie potrzebuje czegoś takiego.Wystarczy mi określenie tego miejsca na ścianie gdzie ma się rysować.Macie jakieś pomysły?" Nie chce shaderów ani surface bo mam ich ze względu na dość złożony system oświetlenia już dużo,dodatkowo skomplikowane przez system save nad którym dobre kilkanaście godzin spędziłem .W pierwszej kolejności chcę spróbować najprostszego możliwego wyjścia-z obj_blood które po prostu zostaje na ścianie.Naprawdę nikt nie wie jak zrobić to metodą którą zaproponowałem? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę