gunarkill Opublikowano 22 Kwietnia 2017 Udostępnij Opublikowano 22 Kwietnia 2017 Sprawa dotyczy Gamemaker studio 1.4 powiedzmy że jeżeli prędkość obiektu>0 prędkość=3 jeżeli prędkość=0 prędkość=1 (z tym oczywiście nie mam problemu) Jednak chciałbym przy jednym i drugim założeniu mieć inną frykcje, no i tu zaczynają się schody, jak użyje tego w stepie to frykcja nie działa poprawne jeżeli jest zmienna :( Ogólnie w skrócie chodzi żeby coś takiego podobnego działało: if player.speed>0 {speed=3 friction=0.3} if player.speed=0 {speed=1 friction=0.1} chodzi tu o taki rodzaj bullet timeu jeżeli obiekt jest wolniejszy frykcja musi się też zmniejszyć bo inaczej obiekt zatrzyma się za szybko. Z góry dzięki za pomoc :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dester Opublikowano 22 Kwietnia 2017 Udostępnij Opublikowano 22 Kwietnia 2017 (friction to po polsku tarcie - https://translate.google.pl/?hl=pl#en/pl/friction) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
gunarkill Opublikowano 22 Kwietnia 2017 Autor Udostępnij Opublikowano 22 Kwietnia 2017 (friction to po polsku tarcie - https://translate.google.pl/?hl=pl#en/pl/friction) Tarcie to tarcie, a friction to friction, jest to wartość wbudowana i to o nią dokładnie mi chodzi. Więc nigdy jej nie przetłumaczę mądralo, chyba że: https://translate.google.pl/?hl=pl#en/th/friction po tajlandzku friction to แรงเสียดทาน :] Jeżeli to ci pomoże żeby mi pomóc, czekam... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 22 Kwietnia 2017 Udostępnij Opublikowano 22 Kwietnia 2017 Hmm... Wszystkie bullet time, slow motion i zatrzymanie czasu ja zawsze rozwiązuje poprzez jedną zmienną odpowiadającą za szybkość czasu. Jeżeli zrobisz sobie globalna zmienną i będziesz przez nią przemnażał wszystko to efekt potrafi być świetny. GML (gdzie w create) global.timeSpeed=1 GML (step obiektu) speed=spd*global.timeSpeed Dzięki temu ustawienie global.timeSpeed=0 zatrzyma poruszanie wszystkiego, global.timeSpeed=0.5 spowolni obiekty dwukrotnie, a global.timeSpeed=2 sprawi że czas będzie płynąć 2 razy szybciej. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
gunarkill Opublikowano 22 Kwietnia 2017 Autor Udostępnij Opublikowano 22 Kwietnia 2017 Hmm... Wszystkie bullet time, slow motion i zatrzymanie czasu ja zawsze rozwiązuje poprzez jedną zmienną odpowiadającą za szybkość czasu. Jeżeli zrobisz sobie globalna zmienną i będziesz przez nią przemnażał wszystko to efekt potrafi być świetny. GML (gdzie w create) global.timeSpeed=1 GML (step obiektu) speed=spd*global.timeSpeed Dzięki temu ustawienie global.timeSpeed=0 zatrzyma poruszanie wszystkiego, global.timeSpeed=0.5 spowolni obiekty dwukrotnie, a global.timeSpeed=2 sprawi że czas będzie płynąć 2 razy szybciej. Tak tak jasne, jednak interesuje mnie zmiana Friction, bo jak się jej używa w stepie to się namnaża i obiekty za szybko się zatrzymują, chcę żeby zatrzymywały się zgodnie z czasem nie używając zmian prędkości gry, chce żeby główna postać poruszała się niezależnie. Prędkość nie jest tu problemem tylko wyhamowanie jej w 2 wariantach. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 22 Kwietnia 2017 Udostępnij Opublikowano 22 Kwietnia 2017 W takim razie co jest nie tak? Wszystko co pokazałeś powinno działać. Nie będziemy mogli pomóc rozwiązać problemu którego nie potrafisz przekazać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 23 Kwietnia 2017 Administratorzy Udostępnij Opublikowano 23 Kwietnia 2017 nie działa poprawnie, to znaczy jak działa ? No i mam nadzieję, zę kod który podałeś nie znajduje się w obiekcie "player", oraz w evencie step a nie create :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 23 Kwietnia 2017 Udostępnij Opublikowano 23 Kwietnia 2017 Czysto logicznie, ten kod nie moze byc w stepie: GML if player.speed>0 {speed=3 friction=0.3} if player.speed=0 {speed=1 friction=0.1} Bo zgodnie z tym kodem speed zawsze bedzie wynosic 3 i friction zawsze bedzie wynosic 0.3. Przeciez przy speed=0 ustawiasz speed=1. A speed=1 jest także speed>0, wiec zmieni speed na 3 i friction na 0.3. A ze speed=3 jest speed>0 to gra juz na tym zostanie. Edit: I brzmisz śmiesznie mówiąć "frykcja" więc mów friction, jak już "tarcie" nie odpowiada. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
gunarkill Opublikowano 23 Kwietnia 2017 Autor Udostępnij Opublikowano 23 Kwietnia 2017 Czysto logicznie, ten kod nie moze byc w stepie: GML if player.speed>0 {speed=3 friction=0.3} if player.speed=0 {speed=1 friction=0.1} Bo zgodnie z tym kodem speed zawsze bedzie wynosic 3 i friction zawsze bedzie wynosic 0.3. Przeciez przy speed=0 ustawiasz speed=1. A speed=1 jest także speed>0, wiec zmieni speed na 3 i friction na 0.3. A ze speed=3 jest speed>0 to gra juz na tym zostanie. Edit: I brzmisz śmiesznie mówiąć "frykcja" więc mów friction, jak już "tarcie" nie odpowiada. Tak przyznaje się, źle to wszystko wytłumaczyłem. Ogólnie pisałem już 30 wersji tego kodu a ten był tylko poglądowy czyli o co chodzi w skrócie. Mam obiekt player (czyli główna postać gry) ona porusza się normalnie, kiedy to robi inne obiekty zwalniają (imitacja szybkiego bieganie), póki obiekty się cały czas poruszają zmiana prędkości nie jest problemem. Problemem jest kiedy np. coś wybucha i chce żeby odłamki się zatrzymywały, ale jeżeli postać biegnie frykcja będzie inna, niż kiedy czas płynie normalnie. Kod jest wpisany w odłamki if force=1 {speed=3; friction=0.3 force=0} //nadanie prędkości i odpowiedniej frykcji var spd=speed //ma służyć do pomiaru prędkości żeby potem przenieść tą wartość if player.speed>0 {speed=1 friction=0.1} if player.speed=0 {speed=(spd)*3; friction=0.3} Nie ważne jak to pozmieniam, mam problem żeby obiekt (odłamek) miał zmienną prędkość i frykcje w zależności czy porusza się w zwolnionym tempie czy normalnie, na końcu ma wyhamować i zatrzymać się. Frykcja oczywiście w tym przykładzie nie działa wcale. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 23 Kwietnia 2017 Administratorzy Udostępnij Opublikowano 23 Kwietnia 2017 Czysto logicznie, ten kod nie moze byc w stepie: GML if player.speed>0 {speed=3 friction=0.3} if player.speed=0 {speed=1 friction=0.1} Bo zgodnie z tym kodem speed zawsze bedzie wynosic 3 i friction zawsze bedzie wynosic 0.3. Przeciez przy speed=0 ustawiasz speed=1. A speed=1 jest także speed>0, wiec zmieni speed na 3 i friction na 0.3. A ze speed=3 jest speed>0 to gra juz na tym zostanie. Edit: I brzmisz śmiesznie mówiąć "frykcja" więc mów friction, jak już "tarcie" nie odpowiada. Nie, jeśli speed dotyczy innego obiektu, to nie będzie wynosić zawsze 3, tylko wtedy gdy gracz się porusza :) Czuję tutaj superhota. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 23 Kwietnia 2017 Udostępnij Opublikowano 23 Kwietnia 2017 Tak, tez to zauwazylem po napisaniu posta.. Zresztą, gunarkill juz na to odpowiedzial. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
gunarkill Opublikowano 23 Kwietnia 2017 Autor Udostępnij Opublikowano 23 Kwietnia 2017 Tak, tez to zauwazylem po napisaniu posta.. Zresztą, gunarkill juz na to odpowiedzial. Po pierwsze chciałem wyjaśnić że słowo frykcja niestety istnieje więc będę go używał i ma tu jak najlepsze zastosowanie, bo jest to język programowania a nie fizyka. Oczywiście musiałem teraz dodać specjalnie moją zmienną frykcję, po to że nawet jak ktoś się z tym nie zgadza będzie musiał operować moją wartością "frykcja" :) Dobra wiem już czego dokładnie potrzebuje, zrobiłem sobie obiekt sys w którym trzymam wszystkie wartości, frykcja zmienia się tam kiedy player się porusza to działa teraz poprawnie. jedynie tego czego potrzeba to żebym otrzymywał wartość spd/3 niestety jak to tak wpisuje to wartość jest stale dzielona, a ja potrzebuje 1/3 wartości prędkości po pomiarze. znaki ??? to oczywiście mój brak kompetencji bo nie wiem jak to uzyskać. var spd=speed friction=sys.frykcja if force=1 {speed=sys.speedo force=0} if player.speed>0 {speed=???} Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 23 Kwietnia 2017 Udostępnij Opublikowano 23 Kwietnia 2017 Po pierwsze chciałem wyjaśnić że słowo frykcja niestety istniejeW pełni się zgadzam. frykcja 1. «wcieranie leku w skórę» 2. «w niektórych urządzeniach: różnica między prędkościami obwodowymi pary współpracujących walców» 3. «utrudnienie w przebiegu procesów gospodarczych» Ale niestety nie o to Ci chodziło. GameMakerowa zmienna friction oznacza właśnie tarcie, a tak na prawdę to opór jaki jest przeciwstawiany pędowi. Są jeszcze ruchy frykcyjne o innym znaczeniu ale nie będę ich przytaczał. I chyba cały twój problem jest w tym że nie widzisz że jest to tarcie i próbujesz wykorzystywać to w jakiś inny sposób. :) Jest to wbudowana funkcja która zmniejsza wartość innej wbudowanej zmiennej speed o swoją wartość dążąc w kierunku 0. Coś takiego: GML speed=max(0,speed-friction*sign(speed)) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
gunarkill Opublikowano 23 Kwietnia 2017 Autor Udostępnij Opublikowano 23 Kwietnia 2017 W pełni się zgadzam. Ale niestety nie o to Ci chodziło. GameMakerowa zmienna friction oznacza właśnie tarcie, a tak na prawdę to opór jaki jest przeciwstawiany pędowi. Są jeszcze ruchy frykcyjne o innym znaczeniu ale nie będę ich przytaczał. I chyba cały twój problem jest w tym że nie widzisz że jest to tarcie i próbujesz wykorzystywać to w jakiś inny sposób. :) Jest to wbudowana funkcja która zmniejsza wartość innej wbudowanej zmiennej speed o swoją wartość dążąc w kierunku 0. Coś takiego: GML speed=max(0,speed-friction*sign(speed)) Ok jak już widzę pierwszy temat stał się ważniejszy :) Przykro mi stwierdzić i teraz będzie ogólny szok że nawet słownik w internecie może się mylić, frykcja (łac. frictio - tarcie, wcieranie) ale wiem to wielkie zaskoczenie że frykcja znaczy friction i też tarcie. A jeżeli o GMLu mówimy, to chodzi dokładnie o Friction co już w moim kodzie działa poprawnie, chcę teraz tylko uzyskać 1/3 wartości prędkości obiektu po pomiarze. jak wpisuje np speed=spd/3 to wtedy jest ona stale dzielona a jak chce mieć zapamiętane dwie wartości czyli speed=3 jeżeli się będę poruszał będzie to 1/3 prędkości czyli speed=1, dodatkowo występuje Friction dlatego muszę robić pomiar i wtedy chcę dzielić tą wartość i też chcę wracać do tej drugiej mógłbym chyba użyć mnożenia, czyli * 3 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 23 Kwietnia 2017 Udostępnij Opublikowano 23 Kwietnia 2017 jak wpisuje np speed=spd/3 to wtedy jest ona stale dzielona a jak chce mieć zapamiętane dwie wartości Nie jest stale dzielona. Przypisujesz do wartości speed 1/3 wartości spd. Możesz mieć problemy jeżeli gdzieś indziej modyfikujesz spd albo speed (np przez friction) speed=3 jeżeli się będę poruszał będzie to 1/3 prędkości czyli speed=1, dodatkowo występuje Friction dlatego muszę robić pomiar i wtedy chcę dzielić tą wartość i też chcę wracać do tej drugiej mógłbym chyba użyć mnożenia, czyli * 3 To na prawdę brzmi jakbyś nie wiedział jak działa friction. Nie sprawia ona że o tyle jest dzielona prędkość. Tu chodzi o ruch liniowy. Więc wystarczą Ci 2 stany (które już masz) oraz wyeliminowanie friction ze wzoru. Może coś takiego? Niezależnie od ustawionej friction prędkość będzie albo sys.speedo albo 1/3 sys.speedo. GML if force=1 {speed=sys.speedo+friction force=0} if player.speed>0 {speed=(sys.speedo/3)+friction} Ok jak już widzę pierwszy temat stał się ważniejszy :) Przykro mi stwierdzić i teraz będzie ogólny szok że nawet słownik w internecie może się mylić, frykcja (łac. frictio - tarcie, wcieranie) ale wiem to wielkie zaskoczenie że frykcja znaczy friction i też tarcie.I nie mogę się oprzeć pokusie. Jakoś ludzie upierający się przy błędzie niesamowicie mnie fascynują. Słowotwórstwo jest fajne ale tylko gdy słowo jest akceptowane przez społeczeństwo i nie redundantne. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
gunarkill Opublikowano 23 Kwietnia 2017 Autor Udostępnij Opublikowano 23 Kwietnia 2017 Nie jest stale dzielona. Przypisujesz do wartości speed 1/3 wartości spd. Możesz mieć problemy jeżeli gdzieś indziej modyfikujesz spd albo speed (np przez friction) To na prawdę brzmi jakbyś nie wiedział jak działa friction. Nie sprawia ona że o tyle jest dzielona prędkość. Tu chodzi o ruch liniowy. Więc wystarczą Ci 2 stany (które już masz) oraz wyeliminowanie friction ze wzoru. Może coś takiego? Niezależnie od ustawionej friction prędkość będzie albo sys.speedo albo 1/3 sys.speedo. GML if force=1 {speed=sys.speedo+friction force=0} if player.speed>0 {speed=(sys.speedo/3)+friction} I nie mogę się oprzeć pokusie. Jakoś ludzie upierający się przy błędzie niesamowicie mnie fascynują. Słowotwórstwo jest fajne ale tylko gdy słowo jest akceptowane przez społeczeństwo i nie redundantne. Ok więc żeby zamknąć pierwszy temat, jeżeli jesteś w błędzie to ty jesteś taką fascynującą osobą (a to jest ciekawy paradoks) to że kilku ludzi nie używa jakiegoś słowa nie znaczy że nie istnieje, jestem starym prykiem który słyszał użycie tego słowa a nie mam 100lat http://www.synonimiczny.pl/slownik-synonimow/ta/tarcie http://www.jezykowce.pl/synonim/slownik-wy...nacznych/tarcie http://synonim.net/synonim/tarcie najlepsze na koniec http://sjp.pwn.pl/sjp/ruchy-frykcyjne;2517992.html i tak owszem, wiem iż trudno uwierzyć że te egzotyczne słowo może znaczyć tarcie, ale jeżeli nie tylko ja tak piszę znaczy że jeszcze te słowo żyję i jednak nie jest to takie błędne. Ważniejsza sprawa, w kodzie którym podałeś nie będzie działać friction, obiekty nigdy się nie zatrzymają bo stale nadajemy prędkość. Dodatkowo jeżeli zwalniasz czas friction musi być też mniejsze bo inaczej obiekt za szybko się zatrzyma. W zwolnionym tempie czy też normalnym obiekt ma zatrzymać się w tej samej odległości. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 24 Kwietnia 2017 Administratorzy Udostępnij Opublikowano 24 Kwietnia 2017 speed = 0; O KUR*A ZATRZYMAŁY SIE!!! A tak na serio, to chyba wiem gdzie jest błąd - speed jest stały i obiekty nie stają mimo ustawienia friction, bo resetujesz speed na 3 lub 1 co klatkę :) GML if player.speed>0 and speed < 3 {speed=3; friction=0.3} if player.speed=0 { if speed > 1 { speed=1; } friction=0.1 } Edit: a w ogóle to powinieneś speed i friction przemnrażać / dzielić w momencie jak zmieniasz speed playera i tyle. Bo tak to za dużo warunków się pojawia :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 24 Kwietnia 2017 Udostępnij Opublikowano 24 Kwietnia 2017 Istnieje frykcja jako synonim tarcia, tak mówią słowniki.Tylko że trochę to tutaj wygląda jakbyś pisał "Twórca gier 1.4" zamiast "Game maker 1.4" szczegolnie kiedy upierasz sie ze to wcale nie jest "tarcie" nie jest "friction" tylko jakas tajemnicza "superhot" zmienna Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 24 Kwietnia 2017 Administratorzy Udostępnij Opublikowano 24 Kwietnia 2017 Przede wszystkim, opieranie sią na pseud-słownikach które mają opcję "dodaj" i kazdy może tam wstawić dowolne słowo - nie ma sensu. Jeśli coś nie jest potwierdzone przez naukowe źródło, w więc PWN, bądź jakąś uczelnianią stronę, bądź radę języka polskiego - to można to między bajki włożyć. Zwłaszcza, że za tymi stronami to nawet nie wiadomo kto stoi... http://sjp.pwn.pl/sjp/frykcja;2558640.html - to jest jedyna sprawdzona definicja. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 24 Kwietnia 2017 Udostępnij Opublikowano 24 Kwietnia 2017 Ja tak sie staralem byc dobrym userem i nei ciagnac tematu, ale jak wy to robicie to czemu nie? Popieram wypowiedz Gnyska. Co wiecej, to ze "ruchy frykcyjne" znacza co znacza, nie oznacza ze sama "frykcja" oznacza tarcie. Kazdy lingwista Ci to powie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
gunarkill Opublikowano 24 Kwietnia 2017 Autor Udostępnij Opublikowano 24 Kwietnia 2017 speed = 0; O KUR*A ZATRZYMAŁY SIE!!! A tak na serio, to chyba wiem gdzie jest błąd - speed jest stały i obiekty nie stają mimo ustawienia friction, bo resetujesz speed na 3 lub 1 co klatkę :) GML if player.speed>0 and speed < 3 {speed=3; friction=0.3} if player.speed=0 { if speed > 1 { speed=1; } friction=0.1 } Edit: a w ogóle to powinieneś speed i friction przemnrażać / dzielić w momencie jak zmieniasz speed playera i tyle. Bo tak to za dużo warunków się pojawia :) First temat. Strony z synonimami były wybrane tylko po to żeby udowodnić że jakaś część społeczeństwa używa tak tego słowa, może ta głupsza ale jednak. Moim zamiarem cały czas jest użycie friction żeby obiekt wyhamował, z tym kodem który podałeś obiekt za każdym razem kiedy player się poruszy odłamki zaczną się poruszać. poradziłem sobie z tym że zmieniam friction poprawnie, mam problem z tym że kiedy player.speed>0 ta akcja stale jest odpalana i odłamki nigdy się nie zatrzymają. Mam już prawie rozwiązanie jedynie potrzebuje informację jak zrobić taki myk, jeżeli np. speed=1 a friction=0.1 to po jednym kroku speed=0.9 jak zrobię sobie var spd=speed otrzymam dokładnie taką wartość z pomiaru, powiedzcie mi proszę jak mam uchwycić wartość z spd w tym wypadku spd=0.9 podzielić ją na 3 żeby otrzymać spd=0.3 bo jeżeli zrobie spd/3 ona stale będzie dzielona, czyli chce mieć wartość z danego kroku podzieloną na 3 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 25 Kwietnia 2017 Administratorzy Udostępnij Opublikowano 25 Kwietnia 2017 jak już powiedziałem, musiałbys to robić w momencie jak gracz się zatrzymuje, bo inaczej to jest full rzeźbienia. Ewentualnie, jeśli chcesz rzeźbić - zrobić to samemu ale mieć speed i friction na własnych zmiennych: GML // create spd = 3 fri = 0.3; // step var multipler = 1/3 + (player.speed != 0) * 2/3; //w GMS2: var multipler = (player.speed != 0) ? 1 : 1/3; if (spd > 0) { x += lenghtdir_x(spd * multipler, direction); y += lenghtdir_y(spd * multipler, direction); } spd = max(0, spd - fri); 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ę