I am vader Opublikowano 27 Czerwca 2017 Udostępnij Opublikowano 27 Czerwca 2017 Widzę że są inkrementacje +16, więc możesz skrócić kod do dwóch pętli for na zasadzie GML var result=false; for(var i=1;i<4;i++){ if place_meeting(x+1,y-(i*16),obj_clif_right){ if image_xscale=1 clif_id=instance_place(x+1,y-(i*16),obj_clif_right); else clif_id=0; clif_size=i; result=true; break; } } if !result for(var i=1;i<4;i++){ if place_meeting(x-1,y-(i*16),obj_clif_right){ if image_xscale=-1 clif_id=instance_place(x-1,y-(i*16),obj_clif_right); else clif_id=0; clif_size=i; result=true; break; } } if !result{ clif_id=0; clif_size=0; } Używamy zmiennej result do emulowania "else" w pętli for, żeby druga nam się nie wykonała jeżeli znalazło wynik. Emuluje też ostatnie else jeżeli nigdzie nie znalazło żadnego wyniku. Edit: Dzięki zastosowaniu pętli możesz łatwo dodawać ostrzejsze klify bez dopisywania kodu. Edit2: Możesz poeksperymentować czy robienie od razu instance_place zamiast place_meeting nie przyspieszy troche kodu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PatrykPlayingPOLSKA Opublikowano 28 Czerwca 2017 Udostępnij Opublikowano 28 Czerwca 2017 Hey,czy jest jakaś funkcja,która zaokrągla liczby,przykładowo jest 564.934 i po użyciu funkcji liczba wygląda tak 564.9 , Czy muszę samemu to jakoś napisać,na pewno by się dało,ale myślę że jest na to szybszy sposób. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 28 Czerwca 2017 Udostępnij Opublikowano 28 Czerwca 2017 Raczej niema ale możesz zrobić tak GML round(frac(liczba)*10)/10+floor(liczba) Brzydko ale działa :jezor: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
nowy_user Opublikowano 28 Czerwca 2017 Udostępnij Opublikowano 28 Czerwca 2017 Hej czy można ustawić collision circle lub collision line z obiektem jakim jest kursor myszy? Czy może jednak muszę w takim wypadku stworzyć osobny obiekt którego x=mouse_x i y=mouse_y i w odniesieniu do niego badać collision circle lub collision line? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PatrykPlayingPOLSKA Opublikowano 28 Czerwca 2017 Udostępnij Opublikowano 28 Czerwca 2017 Hej czy można ustawić collision circle lub collision line z obiektem jakim jest kursor myszy? Czy może jednak muszę w takim wypadku stworzyć osobny obiekt którego x=mouse_x i y=mouse_y i w odniesieniu do niego badać collision circle lub collision line? Możesz sobie zrobić obiekt który jednocześnie będzie kursorem i będzie miał kolizje.Bo szczerze to wątpię że dałoby radę pierwszemu sposobowi. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
nowy_user Opublikowano 28 Czerwca 2017 Udostępnij Opublikowano 28 Czerwca 2017 Dzięki, no tak robię, ale kiedyś bodajże Marmot napisał w którymś temacie ( już nie pamiętam którym) aby nie tworzyć obiektów ponad miarę, po to , żeby nie obciążać pamięci oraz zachować elegancję kodu, także staram się dostosować do tej rady. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 28 Czerwca 2017 Udostępnij Opublikowano 28 Czerwca 2017 To tylko 1 obiekt :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 28 Czerwca 2017 Udostępnij Opublikowano 28 Czerwca 2017 Hey,czy jest jakaś funkcja,która zaokrągla liczby,przykładowo jest 564.934 i po użyciu funkcji liczba wygląda tak 564.9 , Czy muszę samemu to jakoś napisać,na pewno by się dało,ale myślę że jest na to szybszy sposób. Najprościej jest tak: GML i = floor(i*100)/100 Ale chyba jest do tego funkcja. Tak jest string_format(val, tot, dec) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 28 Czerwca 2017 Udostępnij Opublikowano 28 Czerwca 2017 A nie powinno być GML i = floor(i*10)/10 skoro chce jedną liczbę po przecinku? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 28 Czerwca 2017 Udostępnij Opublikowano 28 Czerwca 2017 Domyślił by się... chyba? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 29 Czerwca 2017 Administratorzy Udostępnij Opublikowano 29 Czerwca 2017 macie może pomysł jak napisać ten sam kod ale w bardziej optymalny sposób? W GMS2: GML var _a = [obj_clif_right, obj_clif_left]; var _break = false; clif_id = 0; clif_size = 0; for(var _obj = 0; _obj < 2; _obj++) { for (var _yy = 0; yy <= 2; yy++) { if place_meeting(x, y-_yy*16, _a[_obj]) { if (image_xscale == (_obj == 0 ? 1 : -1)) { clif_size = _yy+1; clif_id = instance_place(x,y-_yy*16, _a[_obj]); _break = true; break; } } } if _break break; } Dla GMS 1 trzeba zmienić pierwszą linijkę: GML var _a; _a[0] = obj_cliff_right; _a[1] = obj_clif_left; oraz linijkę z image_xscale: GML if (image_xscale == 1 + (_obj == 1) * -2) { Krócej już ciężko, ale może ktoś z was podejmie wyzwanie :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
nowy_user Opublikowano 29 Czerwca 2017 Udostępnij Opublikowano 29 Czerwca 2017 Ja z chęcią podjąłbym wyzwanie gdybym miał troszkę lepszego skilla... A zamiast tego mam małe pytanie: Czy jest jakiś tutorial na to jak wstawić video do swojej gry? I mam tu na myśli nie video na cały ekran , ale raczej video np, w małej ramce w prawym górnym rogu ekranu, a na reszcie ekranu toczy się dalej rozgrywka. Jeśli jest na to jakaś prosta funkcja lub kod , to wybaczcie proszę , że przychodzę z takimi banałami o pomoc. Pozdrawiam, nowy_user Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 29 Czerwca 2017 Udostępnij Opublikowano 29 Czerwca 2017 https://marketplace.yoyogames.com/assets/195/video-player coś takiego? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
nowy_user Opublikowano 29 Czerwca 2017 Udostępnij Opublikowano 29 Czerwca 2017 https://marketplace.yoyogames.com/assets/195/video-player coś takiego? Wygląda na to że tak, kolejne 15 $...niestety pierwsze na mojej liście zakupów jest Text Input , więc video player będzie musiał jeszcze poczekać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 29 Czerwca 2017 Udostępnij Opublikowano 29 Czerwca 2017 Dlatego zastanów się, czy jest Ci to w ogóle potrzebne :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 29 Czerwca 2017 Udostępnij Opublikowano 29 Czerwca 2017 W GMS2: GML var _a = [obj_clif_right, obj_clif_left]; var _break = false; clif_id = 0; clif_size = 0; for(var _obj = 0; _obj < 2; _obj++) { for (var _yy = 0; yy <= 2; yy++) { if place_meeting(x, y-_yy*16, _a[_obj]) { if (image_xscale == (_obj == 0 ? 1 : -1)) { clif_size = _yy+1; clif_id = instance_place(x,y-_yy*16, _a[_obj]); _break = true; break; } } } if _break break; } Dla GMS 1 trzeba zmienić pierwszą linijkę: GML var _a; _a[0] = obj_cliff_right; _a[1] = obj_clif_left; oraz linijkę z image_xscale: GML if (image_xscale == 1 + (_obj == 1) * -2) { Krócej już ciężko, ale może ktoś z was podejmie wyzwanie :D Jak zwykle pokonany przez Gnyska. Ale to dobrze, naucze sie czegos nowego ;). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 4 Lipca 2017 Udostępnij Opublikowano 4 Lipca 2017 top down wprowadzam animację nóg postaci-niezależnie od animacji góry. Mam obiekt "obj_legs" który w zależności od prędkości danej postaci ustala prędkość swojej animacji. Tylko z jakiegoś powodu zmienne "speed" "vspeed" "hspeed" zawsze u każdego wynoszą 0 mimo że aktywnie się poruszają Zastępczo użyłem GML if (x!=xprevious)&&(y!=yprevious) {image_speed=.5} ale mnie to zupełnie nie satysfakcjonuje bo chciałbym 3 prędkości ustawić (powolne kroki ,chód,bieg) Dlaczego te zmienne się nie zmieniają skoro jest ruch? Postaci poruszają się przy pomocy "mp_potential_step"- podejrzewam że to jest problem.Ale jak w takim razie wymierzyć ich prędkość i pod to dostosować szybkość animacji??? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
lew_leo Opublikowano 4 Lipca 2017 Udostępnij Opublikowano 4 Lipca 2017 Widzę że są inkrementacje +16, więc możesz skrócić kod do dwóch pętli for na zasadzie GML var result=false; for(var i=1;i<4;i++){ if place_meeting(x+1,y-(i*16),obj_clif_right){ if image_xscale=1 clif_id=instance_place(x+1,y-(i*16),obj_clif_right); else clif_id=0; clif_size=i; result=true; break; } } if !result for(var i=1;i<4;i++){ if place_meeting(x-1,y-(i*16),obj_clif_right){ if image_xscale=-1 clif_id=instance_place(x-1,y-(i*16),obj_clif_right); else clif_id=0; clif_size=i; result=true; break; } } if !result{ clif_id=0; clif_size=0; } Używamy zmiennej result do emulowania "else" w pętli for, żeby druga nam się nie wykonała jeżeli znalazło wynik. Emuluje też ostatnie else jeżeli nigdzie nie znalazło żadnego wyniku. Edit: Dzięki zastosowaniu pętli możesz łatwo dodawać ostrzejsze klify bez dopisywania kodu. Edit2: Możesz poeksperymentować czy robienie od razu instance_place zamiast place_meeting nie przyspieszy troche kodu. W GMS2: GML var _a = [obj_clif_right, obj_clif_left]; var _break = false; clif_id = 0; clif_size = 0; for(var _obj = 0; _obj < 2; _obj++) { for (var _yy = 0; yy <= 2; yy++) { if place_meeting(x, y-_yy*16, _a[_obj]) { if (image_xscale == (_obj == 0 ? 1 : -1)) { clif_size = _yy+1; clif_id = instance_place(x,y-_yy*16, _a[_obj]); _break = true; break; } } } if _break break; } Dla GMS 1 trzeba zmienić pierwszą linijkę: GML var _a; _a[0] = obj_cliff_right; _a[1] = obj_clif_left; oraz linijkę z image_xscale: GML if (image_xscale == 1 + (_obj == 1) * -2) { Krócej już ciężko, ale może ktoś z was podejmie wyzwanie :D GM2 co prawda nie mam ale dzięki za pomoc :3 już poprawione Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
LolikZabijaka Opublikowano 4 Lipca 2017 Udostępnij Opublikowano 4 Lipca 2017 Pierdoła, ale nie mam pomysłu, szukałem, ale nie znalazłem. Chodzi o dach Top-Down, ustawiłem parenta, co by nie robić wszystkiego osobno, problem polega na tym, że kiedy wchodzę w interakcję w dachem znika tylko część na której stoję(składa się z kafelków 32x32, a ja chcę żeby znikały wszystkie po wejściu. Oto kod: GML if (place_meeting(x,y,o_gracz)) visible=false; else visible=true; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 5 Lipca 2017 Udostępnij Opublikowano 5 Lipca 2017 Muszą być jakoś ze sobą powiązane. Kafelek z którym kolidujesz musi wiedzieć jakie inne kafelki ma ukryć. Jeżeli używasz osobnych obiektów dla każdego dachu (co jest dość złym podejściem) to możesz to przerobić tak: GML if (place_meeting(x,y,o_gracz)) { with (o_Dach_12) { visible=false; } } else { with (o_Dach_12) { visible=true; } } Jeżeli jednak masz tylko jeden obiekt który rozstawiasz na różne dachy to musisz zrobić jakąś listę elementów które są powiązane. A potem ukrywać wszystkie elementy tej listy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 5 Lipca 2017 Administratorzy Udostępnij Opublikowano 5 Lipca 2017 Muszą być jakoś ze sobą powiązane. Kafelek z którym kolidujesz musi wiedzieć jakie inne kafelki ma ukryć. Jeżeli używasz osobnych obiektów dla każdego dachu (co jest dość złym podejściem) to możesz to przerobić tak: GML if (place_meeting(x,y,o_gracz)) { with (o_Dach_12) { visible=false; } } else { with (o_Dach_12) { visible=true; } } Jeżeli jednak masz tylko jeden obiekt który rozstawiasz na różne dachy to musisz zrobić jakąś listę elementów które są powiązane. A potem ukrywać wszystkie elementy tej listy. To coś dla mnie, mistrza optymalizacji! GML o_Dach_12.visible = !place_meeting(x,y,o_gracz); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
LolikZabijaka Opublikowano 5 Lipca 2017 Udostępnij Opublikowano 5 Lipca 2017 Nadałem im parent, jednak po sprawdzeniu waszych metod, nadal to samo, kod mam wpisać w step parenta, czy kafelka dachu ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 31 Sierpnia 2017 Udostępnij Opublikowano 31 Sierpnia 2017 Mam swiatlo ktore roztacza wokol siebie gracz (top down) - ktore stanowi jego zakres widzenia-reszta w mroku. Mam tez swiatlo ktore wytwarzaja pochodnie.Oba swiatla sa zupelnie inne.Zależy mi na tym żeby w trakcie zbliżania sie do pochodni swiatlo gracza stopniowo i plynnie zanikalo i jedynym widocznym stawalo sie swiatlo pochodni (bo jak sie zmieszaja to slabo wyglada)- podobnie jak bede odchodzil chcialbym zeby stopniowo oswietlenie gracza sie wzmacnialo Zrobilem cos takiego if (distance_to_object(obj_glr_fire_light)<350){view_light=0 } else if (distance_to_object(obj_glr_fire_light)<380)&&(distance_to_object(obj_glr_fire_light)>100){view_light=1} else if (distance_to_object(obj_glr_fire_light)<400)&&(distance_to_object(obj_glr_fire_light)>200){view_light=2 } else view_light=4 gdzie zmienna view_light oznacza zasiego swiatla tworzonego przez gracza.Wyglada to ok powiedzmy ale jest dramatycznie NIE płynne,skokowo nastepuje zmiana.Jak to przerobić w płynny efekt? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 31 Sierpnia 2017 Udostępnij Opublikowano 31 Sierpnia 2017 Oj bardzo głupio widzę jest to zrobione. Dlaczego nie jest to interpolacja liniowa? Określ minimalny zasię i maksymalny a potem dziel. To wszystko. var _min=350; var _max=400; view_light=lerp(_min,_max,distance_to_object(obj_glr_fire_light)-_min)*4 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 31 Sierpnia 2017 Udostępnij Opublikowano 31 Sierpnia 2017 "Dlaczego nie jest to interpolacja liniowa?" pewnie dlatego że nie mam pojęcia jak się za to zabrać, do teraz:P Dzięki ale niestety póki co kod w tej wersji mi się nie przysłużył bo wartości view light muszą być zamknięte pomiędzy 0-4.Jeżeli pojawia się minusowa wartość to nic się nie dzieje,a jak powyżej 4 to pole widzenia rozrasta za bardzo.W tej chwili wartości idą w tysiącach- jak podejdę do światła to jest chyba -30000 a jak odchodzę to rooooosnie masakrycznie ;p Sam efekt działa tylko w zakresie 0-4 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 31 Sierpnia 2017 Udostępnij Opublikowano 31 Sierpnia 2017 Myślę że tutaj lepszym rozwiązaniem będzie: var _min = 350; var _max = 450; var clmp = 4; var len = (distance_to_object(obj_glr_fire_light)-_min/(_max-_min))*clmp; view_light=clamp(len,0,clmp); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 1 Września 2017 Udostępnij Opublikowano 1 Września 2017 Vader: Teraz "view light" nie zmienia się w ogóle niezależnie od odległości do światła (cały czas 4) i nagle zmienia się na 0 kiedy wejdę w światło i wtedy staje się ujemny ps.niech ktos coś zrobi z tym logowaniem bo mozna kvrwicy dostać. 9/10 prób logowania kończy się komunikatem "Twoje konto zostało zablokowane spróbuj ponownie za 29minut"- a dodatkowo po każdym wyjściu z GMclanu automatycznie się wylogowuje... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 1 Września 2017 Udostępnij Opublikowano 1 Września 2017 To jest logicznie niemożliwe żeby wartość była inna niż 0<=x<=4 przy użyciu clamp. Coś innego musi Ci zmieniać tę zmienną. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 1 Września 2017 Udostępnij Opublikowano 1 Września 2017 No i nie jest inna.Tylko że albo jest cały czas 4 alb w pewnym momencie nagle zmienia się na 0, skokowo,żadnych wartości pośrednich Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 2 Września 2017 Udostępnij Opublikowano 2 Września 2017 Kolejność wykonywania działać zawiodła, dzieliło _min przez (_max-_min). Żeby nie robić tłoku w jednej lini rozbiłem to na kilka. var _min = 350; var _max = 450; var clmp = 4; var len = distance_to_object(obj_glr_fire_light)-_min; var len2 = _max-_min; var len = (len/len2)*clmp; view_light=clamp(len,0,clmp); Ignatus i Uzjel 2 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ę