
Rudy
Użytkownicy-
Postów
154 -
Dołączył
-
Ostatnia wizyta
Typ zawartości
Profile
Forum
Wydarzenia
Treść opublikowana przez Rudy
-
On ma rację. To forum jest związane główne z Game Makerem. Tematy rozchodzą się tutaj na programowanie również w innych językach, sprawy dotyczące sprzętu i oprogramowania komputera, czasami matematyka. Lecz jeżeli chodzi o korzystanie z siłowni, tzw. pakowanie i problemy z nimi związane, nie znajdziesz tutaj pomocy. Nie jesteśmy specjalistami w tej dziedzinie. Znalezienie programisty/informatyka potrafiącego odpowiedzieć na twoje pytanie graniczy z cudem. W końcu programowanie nie jest jako tako związane ze sportem. Z resztą alwin mówi dobrze, jedyna osoba, która by mogła jakoś spróbować wypowiedzieć się na ten temat jest Bedziom :) . Pewnie wymyśliłby coś zgodnego/niezgodnego z logiką, śmiesznego na swój sposób, ale może by trafił w twoje oczekiwania. Być może nawet sam znasz odpowiedź, czekasz tylko na poparcie swej hipotezy. Ale tak jak ja i moi poprzednicy powiedzieli: to nie miejsce na pytania z tej kategorii.
-
div to dzielenie w liczbach całkowitych (przyjaznych dla procesora), a / to dzielenie na liczbach zmiennoprzecinkowych. w div procesor spokojne kończy, gdy dojdzie do przeciska (resztę wyzeruje), w / musi obliczać, aż zapełni całą pamięć liczby (skoro zmienne w GML to C++'owe double to dokładnie 52 pola).
-
Masz na myśli tyle samo? Czyli czy zaalokujemy tablice 0-elementową, czy jedną zmienną to tyle samo zabierze nam pamięci, chociaż w drugim przypadku nie zapiszemy tam żadnej informacji. Akurat o pamięć mi się tutaj nie rozchodzi, raczej o bezpieczeństwo, ale skoro samo alokowanie nie wywoła błędu, a używanie zabezpieczone jest przez zmienną i (indeks nigdy nie przekroczy i. Skoro i = 0, to nie ma na czym operować ;) ) więc chyba jest dobrze ;) . Dzięki za pomoc ;) .
-
@mannor Fakt, kod pisany na szybko, żeby pokazać istotę błędu. Drobna literówka ;) . @Will delta1 = 128, delta2 = 16 w obu przypadkach. Z kolei przepuszczając przez debugger wynoszą one 176, 32. Więc? Efekt jest tylko taki, że inaczej rozmieszczana jest pamięć dynamiczna. W pierwszym przypadku są rozmieszczone dalej niż w drugim, mimo to, odległość w drugim przypadku starczy na 4 elementy tablicy statycznej int.
-
Witam. Krótko i zwięźle, jest taki kod: // gdzieś w main unsigned int i; // pobranie do i liczby naturalnej wpisanej przez użytkownika char str = new char[i]; // coś tam delete[] str; return 0; wiemy, że i >= 0 (co wynika z typu). Jak i > 0 to ok, alokujemy pamięć. Ale co jak i = 0? Czy alokowanie 0 bajtów wywoła błąd?
-
@Bedziom: Napisałeś dokładnie to samo, tylko innymi słowami... A skoro znasz się na php, to znaczy, że umiesz język. Przypomnij sobie jak się go nauczyłeś. Następnie uznaj, że GML to taki php, tylko inny i zrób dokładnie to samo :P .
-
Ja bym to zrobił tak: obj_zajete: oczywiście event kolizji, dźwięk -> odsyłam do dokumentacji, na pewno dasz sobie radę, co do restartu chyba room_restart(). Proponuję jeszcze lekką zwiechę, żeby po prostu ekran nie mignął i użytkownik nie wiedziałby nawet czemu przegrał. obj_kraw_XXX zakładamy, że samochód to nie piłka i wtedy sytuacja jest prostsza, bo odwracamy zwrot wektora prędkości, a nie odbijamy :) . Więc...: GML speed *= -0.4; // 0.4 to współczynnik sprężystości. 0 to brak odbicia, 1 to całkowity odwrót x = xprevious; // poprawka - trzeba przerwać kolizję y = yprevious;
-
Ostatecznie możesz zrobić cos takiego, że nie sprawdza procentowe zakrycie, tylko odległość od środków i ustawienie względem parkingu. EDIT: Zależy ci na dobrym efekcie? Check this: GML speed -= min(0.02+abs(speed)*0.04, abs(speed))*sign(speed); if (keyboard_check(vk_up)) speed += 1.2-abs(speed)/20; if (keyboard_check(vk_down)) speed -= 0.5-abs(speed)/20; if (keyboard_check(vk_left)) direction += power(abs(speed*2), 0.6)/2; if (keyboard_check(vk_right)) direction -= power(abs(speed*2), 0.6)/2; image_angle = direction; Co do parkowania to to, co napisałem wyżej będzie mniej więcej coś takiego: zał: originy samochodu na środku GML if (point_distance(x, y, parking_x, parking_y)*5 +min(abs(direction-parking_dir), abs(direction-parking_dir-360), abs(direction-parking_dir+360)) < 100) // granica błędu gracza > 0. ustal sobie *5 tak, jak bardzo chcesz, aby pozycja była ważniejsza od obrotu { show_message("Zaparkowałeś"); game_end(); } Ekhm... parking_XXX to pozycja parkingu (x, y i kierunek, jeśli obiekt, jeśli nie masz takiego obiektu wpisz wartości)
-
Kierunek grawitacji może być dowolny, skoro długość wektora to 0, to kierunek jest obojętny :) 270 to najczęściej spotykany (dół). Powodem może być (i pewnie będzie) twój kod ;) . Pooglądaj go, poszukaj, gdzie faktycznie zachodzi akcja odrzutu po kolizji. Pamiętaj: 0: prawo, 90: góra, 180: lewo, 270: dół. btw: ten samochód może skręcać (obracać się) ?
-
Hehe, faktycznie namieszałem :) . Miałem na myśli to, że jeżeli postać znajdzie sie kolizji ze ścianą, to nie wiesz, czy wbiła się na 3 px, czy na 5, czy na 0.5. Dlatego nie możesz twierdzić, że to będzie akurat 3. Będzie tak tylko w przypadku gdy: - postać chodzi tylko po osiach (tzn tylko w kierunkach 0, 90, 180 i 270) - ma wtedy ustaloną szybkość na 3. Rozwiązanie niedawno gdzieś podawałem, mianowicie tu: Link Właściwie przykład był zrobiony na postawie podesłanej gry parę postów wyżej. Program nie przesuwa obiektu względem własnej pozycji (+=), ale oblicza nową pozycję, w której nie znajdzie się kolizja (=). Dzięki temu można wbić się w ścianę ile się chce, i tak zostanie obliczona nowa pozycja ;) .
-
I tu się mylisz :D . Wartość cofnięcia od ściany jest stała, a składowa prędkości prostopadła do powierzchni ściany jest zmienna. Efekt? Będzie skakał jak po schodkach :) . Strzelam, że Lordis trafił w gusty pytającego.
-
I tu się mylisz :D . Wartość cofnięcia od ściany jest stała, a składowa prędkości prostopadła do powierzchni ściany jest zmienna. Efekt? Będzie skakał jak po schodkach :) . Strzelam, że Lordis trafił w gusty pytającego.
-
Nie ktoś, a coś (strzelam na GM). Reload, albo wczytanie z back-upa (przy otwieraniu zmieniasz "Typ pliku").
-
Powtarzanie czynności jak REPEAT, ale co step?
Rudy odpowiedział(a) na ka21k temat w Pytania początkujących
@ka21k Przecież odpowiedź na to co mówisz masz w drugim poście tematu. Tylko zamiast a dajesz swój kod. Może to być nawet 100 linii, jak w klamrze to spokojnie zadziała, wymagany jest tylko ustawiony licznik. -
Moim zdaniem warto rozruszać... Człowiek to taka dziwna maszyna, że potrafi sama się naprawiać :) .
-
Powtarzanie czynności jak REPEAT, ale co step?
Rudy odpowiedział(a) na ka21k temat w Pytania początkujących
A gdzie tam, timelines działa tak samo jak image_index/speed. Co step wykonywany jest kod z jednego punktu na osi timelinów (w domyślnych warunkach, tj timeline_speed = 1). Twoim zadaniem jest tylko odpowiednia inicjalizacja osi. Nie wiem natomiast, czy timeliny są robione po wykonaniu step, czy przed. -
Dziwne, u mnie wystarczyło zawsze zwiększyć zasięg... Jeśli piszesz polskie znaki, to jaki jest rezultat? Nie ma w ogóle tych znaków, są, ale przerwy, czy jakieś krzaczki?
-
@up: Załatwi sprawę za niego przy okazji biorąc swoją działkę :P @MagnusArias: W złej kolejności, programowanie to będzie ostatnia rzecz, jaka będzie można spotkać na tym forum ;)
-
Od ostatniego czasu to forum stało się dosyć uniwersalne, można zrobić zakupy, porozmawiać na temat różnych dolegliwości, niedługo zaczną przez to forum umawiać się na randki. (o ile pojawi sie więcej kobiet na forum... damskie paski na pewno je przyciągną ;) )
-
Wszystko zależy jaka jest prędkość względna obiektów i jakie zaokrąglenie przyjmiemy (tutaj nie ma żadnego ;) ) A może tak? GML (Create) widocznosc = false; // != visible, można zobaczyć przez samo działanie image_alpha = 0; GML (Step) //widocznosc = false; // jeśli chcesz, żeby znikała, gdy się od niej odejdzie, uncomment // osobiście od distance_to_object wolę point_distance, wydaje się być szybsze if (point_distance(o_girl.x, o_girl.y, o_player.x, o_player.y) < 300 widocznosc = true; if (point_distance(o_girl.x, o_girl.y, o_player.x, o_player.y) < 200 widocznosc = false; if (widocznosc) image_alpha += min(0.05, 1-image_alpha); else image_alpha -= min(0.05, image_alpha); W ten sposób dziewczyna będzie stopniowo się pojawiała i znikała (jak chcesz szybciej/wolniej, zmień 0.05)
-
W GM można w ogóle użyć while(true)? Przecież kod musi działać jednocześnie np na draw i step (GM operuje na modelu zdarzeniowym), jeśli damy taką pętle np w step to wszystkie inne zdarzenia przestaną być wykonywane (jak odrysowanie w draw).
-
Polska zawsze była pesymistycznie nastawiona na wszystko :)
-
1. Utwórz sprite z animacją okrętu: pierwszy obrazek najbardziej pochylony na prawo, ostatni na lewo, nieparzysta liczba, żeby był jeden normalny, np 11 obrazków (czyli 5 stopni pochylenia, tutaj tą liczbę oznaczam, jako prec) 2. Zapisz informację, o ile zmienia się direction na klatkę, np do zmiennej rotate. (zakres w przykładzie: <-dir, dir> ) 3. GML image_index = prec + round(rotate*prec/dir); // zastosuj tą linię do kodu. // Oblicza obrazek wymagany do określonego pochylenia. // Pamiętaj o zmianie nazw, jeśli masz inne.</span>
-
płynne przejście do ruchu po okręgu
Rudy odpowiedział(a) na Nubosabuk temat w Pytania początkujących
Aaa, taki autopilot? Też może być przy czym musisz określić dokładnie jakie warunki wpływają na przejście do ruchu po okręgu (wciskanie klawiszy, średnia odległość, szybkość, kąt obrotu). Sprawa też jest łatwa, ciekaw jestem tylko, czy jeżeli zbliży się do gwiazdy to całkiem odbierzesz mu kontrolę nad jednostką. I jeszcze jedno, czy kierunek silników = kierunek lotu, czy istnieje u ciebie bezwładność. Jeśli nie to sprawa jest banalna i może już nawet powiedzieć jak :) : Punkt do którego ma lecieć pojazd wyznaczasz jako przesunięcie punktu o wektor (dokładniej środka planety o pewną długość w określonym kierunku (niebieski)). Długość obliczasz z funkcji trygonometrycznych znając długość czerwonego, oraz różnice między kątem czerwonym i zielonym. Z kolei kąt jest równy kątowi zielonemu + 90° * sign(kąt zielony - kąt czerwony). Jeśli będzie z prawej strony to zielony kąt będzie mniejszy, czyli będzie -90, jeśli z drugiej to odwrotnie. Jedyny problem to to, kiedy masz zamiar przejąć kontrolę nad sterowaniem pojazdu. Na tej zasadzie znajdzie ci punkt do którego ma lecieć, aby rozpocząć lot po okręgu. Potem kontrolę nad ruchem powinien przejąć inny algorytm bo ten może powodować problemy (jeśli pojazd ustawi się prostopadle do osi (czyli kąty zielony - czerwony = +/-90) to ten sposób wyznaczy ci punkt dokładnie w którym jest pojazd. Gorzej, jeśli kąt będzie >90°, wtedy program zawróci pojazd by znaleźć sie na niższej orbicie). Z resztą - sam sprawdź :) . Uważaj tylko na kąty w stylu 359 - 0, są barrrdzo zdradliwe :D . -
Kod śledzenia? To dajesz do drugiej części ;) A jeśli nie, to zaprzecz warunkowi (zaznacz NOT) i usuń wszystko po else. Wtedy możesz wkleić do pierwszej części :)