Skocz do zawartości

Muchaszewski

Użytkownicy
  • Postów

    235
  • Dołączył

  • Ostatnia wizyta

Odpowiedzi opublikowane przez Muchaszewski

  1. ODŚWIEŻAM TEMAT!

    Zadziałało :S???

    Wymyśliłem dobry sposób, ale nie wiem czemu nie działa :(

    GML
    for (i=3;i<8;i+=1)

    {

    for (p=3;p<8;p+=1)

    {

     

    if global.tab[i,p] = 11

    {

    nr+=1

    if global.tab[i+1,p] = 11

    {

    nr += 1

    if global.tab[i+2,p] = 11

    {

    nr += 1

    if global.tab[i+3,p] = 11 {nr += 1}

    if global.tab[i+2,p+1] = 11 {nr += 1}

    if global.tab[i+2,p-1] = 11 {nr += 1}

    }

    if global.tab[i+1,p+1] = 11 {nr += 1}

    if global.tab[i+1,p-1] = 11 {nr += 1}

    } //Reszta wygląda tak samo tylko z innymi wartościami

    if global.tab[i,p+1] = 11

    {

    nr += 1

    if global.tab[i-1,p+1] = 11 {nr += 1}

    if global.tab[i,p+2] = 11

    {

    nr += 1

    if global.tab[i,p+3] = 11 {nr += 1}

    if global.tab[i-1,p+2] = 11 {nr += 1}

    if global.tab[i+1,p+2] = 11 {nr += 1}

    }

    if global.tab[i+1,p+1] = 11 {nr += 1}

    }

    if global.tab[i-1,p] = 11

    {

    nr += 1

    if global.tab[i-2,p] = 11

    {

    nr += 1

    if global.tab[i-3,p] = 11 {nr += 1}

    if global.tab[i-2,p+1] = 11 {nr += 1}

    if global.tab[i-2,p-1] = 11 {nr += 1}

    }

    if global.tab[i-1,p+1] = 11 {nr += 1}

    if global.tab[i-1,p-1] = 11 {nr += 1}

    }

    if global.tab[i,p-1] = 11

    {

    nr += 1

    if global.tab[i-1,p-1] = 11 {nr += 1}

    if global.tab[i,p-2] = 11

    {

    nr += 1

    if global.tab[i,p-3] = 11 {nr += 1}

    if global.tab[i-1,p-2] = 11 {nr += 1}

    if global.tab[i+1,p-2] = 11 {nr += 1}

    }

    if global.tab[i+1,p-1] = 11 {nr += 1}

    }

    if nr <= 3

    {

    global.tab[i,p] = 1

    }

    }

    show_message(string(nr)+" "+string(i)+","+string(p))

    nr=0;

    }

     

     

    }

     

    Nie wiem czemu nie sprawdza mi wszystkich kombinacji jakie ustaliłem, a czasami nawet za dużo :(

    Głównie ma problemy z tymi kombinacjami w lewo.

    Proszę o pomoc.

    Zadziałało?? Nie wiem dlaczego, podczas pokazywania wiadomości nie uwzględnia wszystkiego... A po wykonaniu wszystkiego wartości układają się dobrze...

     

    EDIT:

    A jednak. Większość kombinacji działa dobrze, ale 70% poprawności to nie jest to o co mi chodzi.. ;(

    EDIT2:

    Wszystko jasne, za mało argumentów. Wszystko będzie grać jak dopisze więcej :) Napiszę jak to wygląda pod koniec xD

  2. Może jednak to źle opisałem xD

    W tym przykładzie są tylko np: kołka - 0 i krzyżyki 1. Pogrubione krzyżyki są to te same krzyżyki co nie pogrubione. Ja po prostu poszukuję tych pogrubionych. Poszukuję łańcucha tej samej zmiennej, gdzie każda kolejna wartość musi przylegać w tej tablicy tylko poziomo lub pionowo. Jako że poszukuję tylko tych łańcuchów gdzie ich liczba jest większa niż 4 zaznaczyłem je, dla przejrzystości całego przykładu.

  3. Witam. Posiadam tabelę 5x5. Przypisane są do niej liczby z przedziału 1-10. Poszukuję najprostszego sposobu na sprawdzenie ile liczb takich samych obok siebie. Może pokaże na przykładzie kółek i krzyżyków.

    _____

    |XOXO|

    |XXOX|

    |XOXX|

    |XXOO|

    Wyraźnie widać tutaj że pogrubiłem 6 krzyżyków. Chciałbym sprawdzić w najprostszy sposób ile ich jest i w na jakich pozycjach. Może podkreślę tutaj że potrzebuję wyświetlić wynik tylko dla tych których łączna liczba jest większa od 4, ale to z pewnością nie będzie problemem po rozwiązaniu tego powyżej.

     

    Mam nadzieję że wszystko jasno objaśniłem.

    Proszę o pomoc.

  4. Ta funkcja zwraca tylko 2 wartości true i false. Więc niestety nie

    Mylisz się. Wszystkie funkcje collision_ zwracają ID obiektu, jeśli jest jakiś obiekt w polu oznaczonym argumentami funkcji, w przeciwnym wypadku zwracają noone (-4, czyli w sumie false). collision_point zadziała.

    A co do wszystkich funkcji collision coś mi nie działało więc chciałem zobaczyć co zwraca ta funkcja :P Wszystkie te funkcje zwracają id obiektu który stoi im na drodze jako pierwszy :P

     

    Obliczanie kątu jest bardzo proste. Musisz tylko wiedzieć, do czego służy point_direction(x1,y1,x2,y2) i wykorzystać to. Ta funkcja pozwoli Ci również obliczyć kąt odbicia promienia od powierzchni kulistych.

    Nie wiem jak point direction miał by mi pomóc. Zastanawiam się już od dłuższej chwili nad tym i nic nie przychodzi mi do głowy. Point_direction zwraca kierunek pomiędzy 2 punktami ale jakie te punkty bym miał użyć??

     

     

    Wyszukiwanie binarne + collision_line jest bardzo dobrym pomysłem, gdyż zwiększenie zasięgu dwukrotnie spowoduje wydłużenie czasu obliczeń tylko o jedno wywołanie. Nie stracisz fps. Gdzieś nawet zamieściłem kompletny skrypt, możesz poszukać w dziale "Skrypty, przykłady, dodatki" albo przeszukać moje tematy.
    Nie mogę znaleźć tego przykładu, ale wydaje mi się że mam już coś wystarczająco zoptymalizowanego. Zjada tylko 50fps przy 400 początkowych więc rezultat jest zadowalający przy mapce 10000x10000 :P Ale skrypt i tak się przyda.

     

    EDIT:

    Drobne sprostowanie co do wydajności. Coś zrobiłem i wydajność mi spadła masakryczne. 5fps jeśli obiekt jest blisko a 40 jeśli jest daleko. :( Muszę napisać wszystko od początku, bo backupa nie mam.

  5. Hmm źle się zrozumieliśmy, albo źle napisałem ;p Jeśli strzelimy do płaskiej ściany laserem pod kątem 90 stopni to co się stanie?? Wróci tą samą drogą więc będzie mieć również 90 stopni (Kąt ten jest oczywiście względem ściany). Chyba że... a zresztą. Ja się nie znam.

     

     

    A co do wszystkich funkcji collision coś mi nie działało więc chciałem zobaczyć co zwraca ta funkcja :P Wszystkie te funkcje zwracają id obiektu który stoi im na drodze jako pierwszy :P To rozwiązuje wszystkie moje problemy, ale i tak skorzystam z wyliczania dokładnej pozycji "namierzania" :P

  6. To akurat wiedziałem że kąt odbicia zależy od kąta padania i tu raczej nie mam problemu... (dobra z fizyki jestem cienki ;p) Właśnie myśląc nad tym zdałem sobie sprawę że be funkcji trygonometrycznych się to nie obejdzie a kt1117 źle zrozumiałem :P Ale ciężko mi wymyślić jakieś rozwiązanie. Myślę nad tym aby kąt zewnętrzny pomiędzy przeszkodą, a laserem podzielić na 2, a wynik będzie kątem odbicia względem przeszkody, ale coś mi się wydaje że źle myślę. )Jeszcze zanim to napisałem znalazłem błąd :P jeśli kąt pomiędzy przeszkodą a laserem wynosie 90 stopni z każdej strony?) Jak czasami widzę te wszystkie wzory na Wikipedii to mnie krew zalewa, więc prosiłbym o jakąś uproszczoną wersję, bądź realny pomysł.

     

    EDIT:

    collision_point powinno załatwić sprawę

    Ta funkcja zwraca tylko 2 wartości true i false. Więc niestety nie

     

    Jest to optymalizacja ale mała. Sposób? Ustaw maksymalny test na cały room. Wtedy dalszego zasięgu nie będzie, a sprawdzanie binarne jest chyba najbardziej zoptymalizowanym sposobem. A jeśli już chcesz swój pomysł, to nie dziel na 100 mniejszych tylko binarnie (wtedy zamiast 100 masz 7 sprawdzeń ;P ).

    Właśnie o to mi chodziło, ale zapomniałem dodać :P

  7. Platyna napisał artykuł o wyszukiwaniu binarnym, szybki i efektowny sposób ;)

    https://gmclan.org/index.php?artykul=74

     

    Dzięki ;P Będąc na "przechadzce" wpadłem na bardzo podobny pomysł xD Mój "pomysł" będzie szukał najpierw przeszkody co 100 kratek jeśli nie znajdzie przeszuka w kolejnych 100 kratkach, a następnie będzie dzielił to 100 na mniejsze części. Wydaje mi się to bardziej zoptymalizowane biorąc pod uwagę krótkie odległości, gdyż w wyszukiwaniu binarnym Platyna sugeruje podanie od razu maksymalnej odległości strzału.

     

     

    Trochę trudniej będzie jeśli chodzi o kąt. (...) Wtedy dostajesz na boki trójkąta i za pomocą sinusów kosinusów itd. obliczasz trzeci. (...)

     

    Jest to dobry pomysł, ale trudny do realizacji. Z matmy jestem prawdopodobnie "dobry" :P Ale nie wyobrażam sobie jak by można poprowadzić te 2 linie od gracza i przeszkody. A tak w sumie poco sobie utrudniać.

     

    Albo po prostu opisać każdą przeszkodę punktami krańcowymi i przy kolizji odwoływać się do nich.

     

    To też nie ma sensu. Prościej jest stworzyć jak najbardziej standardowe przeszkody, do których się wpisze kierunek, a następnie do tego kierunku się odwołać :P Problemem przy moim pomyśle i kt1117 są wszelkiego rodzaju kule, i obszary koliste, ponieważ ciężko będzie określić dokładnie w jakim kierunku mój laser miał by się "odbić". Ale i tak dzięki.

     

     

    Mam jeszcze jedno pytanie co do tego. Znalazłem dokładne położenie przeszkody, ale mam problem. Teraz po prostu nie wiem jak można było by się do niej odwołać. Korzystam z instance_nearest(...) ale nie jest to najlepszy pomysł, zwłaszcza przy ciasno upakowanych obiektach. Czy jest jakaś funkcja (jest na pewno, ale zapomniałem jaka ;p) która pozwoli mi się odwołać do obiektu w danym miejscu. Wystarczy id obiektu xD

  8. Witam. Robię grę TPS (na razie w 2D). Mam problem. Chciałem zrobić w mojej grze strzelanie laserem. Nie było by problemu gdyby nie to że nie znam wystarczająco zoptymalizowanego kodu(zwłaszcza na dużych planszach). Chciałem napisać funkcję która sprawdzała by odległość od gracza do przeszkody po linii prostej, i zwracała by odległość, albo miejsce x,y do tej że przeszkody, a także kąt pod jakim jest gracz względem tej że przeszkody.

     

    Mój kod opiera się na szukaniu przeszkody przez funkcję collision_check_point kolejnego piksela do gracza w kierunku, w którym jest obrócony. Następnie sprawdza tą że pozycje pod kątem znajdującej się instancji i zwraca jej obrót. Wszystko ładnie, ale jeśli odległość od przeszkody jest większa niż 100 kratek to zaczyna się problem, a mam w planach aby laser ten odbijał się od pewnego rodzaju bloków i ponownie leciał dalej.

    Proszę o napisanie mi wystarczająco zoptymalizowanego kodu, abym nie musiał czekać paru sekund na strzał. Jakoś przeżyję zmniejszenie FPS!

  9. Witam. Mam pytanie, jak wykryć kolizję dwóch obiektów które nie posiadają żadnego sprita, są rysowane wyłącznie przez draw, a wymiary tego drawa się zmieniają. Również jego pozycja. Górny lewy róg mam opisany zmiennymi x1,y1 i dolny prawy x2,y2. Jeszcze jedno pytanie, jak wykryć jeszcze gdzie się nie zderzają.

    Proszę o pomoc.

     

    Edit: Sam znalazłem odpowiedź pomimo tego iż nie wiem co zrobiłem :P Wystarczy że działa mi poprawnie. Jeśli ktoś wpadnie na pomysł jak ja to zrobiłem może się podzielić tą wiedzą, może się kiedyś komuś przyda.

  10. Witam. Przedstawiam coś oryginalnego, coś czego jeszcze nie było. Przykład okien z prosto z Windowsa XP. Jest to BETA przykładu więc nie spodziewajcie się za wiele.

     

    Tytuł: GM Windows Make BETA

     

    Opis: Jest to program/gra która może ulepszyć wygląd menu, różnego rodzaju gier itd. Na razie program ten posiada możliwość otwarcia kilku folderów na raz (z drobnymi błędami), coś w stylu notatnika w tym folderze i samo nie zbyt rozbudowane okno. Przykład godny obejrzenia :P

     

    Download: adres z plikiem gry

    Rozmiar pliku: 29kb

     

    W przypadku dostrzeżenia błędów i odnalezienia sposobu naprawy proszę o wiadomości na PW, bądź pod postem. Wiadomość powinna zawierać co jest nie tak, gdzie wpisać dany kod i oczywiście jaki.

     

    Miłego testowania, życzy Muchaszewski :D

     

    Edit: Ależ to dziwne. Taką nazwę mojego programu powyżej "wymyśliłem" jeszcze we wrześniu kiedy to zacząłem. Przed chwilą popatrzałem sobie trochę na forum a tu BUUMMMM... Niestety nie byłem pierwszy z nazwą i pomysłem, ale z tego co się orientuje moja wersja nie wymaga pro i GM6 (niestety to przeżytek). Napisałem to żeby nie było że plagiat!

  11. Właśnie znalazłem o co chodzi. Chciałem ustawić aby podczas budowy Elektrowni pokazywał się pod nią gotowy rysunek z odpowiednią przeźroczystością. Więc zrobiłem nowy obiekt, a tam zamiast pozycji tego obiektu wpisałem mouse_x. Nie dosyć że to to jeszcze tam ustawiłem "bełkot" w kolorze.

    GML
    draw_sprite_ext(oElektrownia,0,mouse_x,568+120,1,1,0,0,0.6)

    A po parametrze color ustawiony na czarny można się wszystkiego spodziewać :blink:

     

    Dzięki wam wszystkim. Sam bym do tego nie doszedł :P

  12. Mam prosty kod którego już używałem :P ale mam z nim problem.

    Mianowicie mam taki kod:

    GML
    draw_sprite_ext(sElektrownia,0,x,572-120,1,1,0,c_white,0.6)

    W pozycji y równej 568 pojawia mi się czarny prostokąt którego przeźroczystość co wywołanie tego kodu

    GML
    instance_create(x,572-120,oElektrowniaBudowa1)

    zwiększa się o mniej więcej 0.4.

    Cały kod:

    GML
    //W draw kontrolera budowy

    LPM = mouse_check_button_pressed(mb_left)

    if global.budynek = 1

    {draw_sprite_ext(sElektrownia,0,x,572-120,1,1,0,c_white,0.6)

    if LPM = 1

    {instance_create(x,572-120,oElektrowniaBudowa1)}}

    //Wywołanie funkcji pow. podczas naciśnięcia lewego przycisku myszy w ikonie na budynku po prawej

    global.budynek = 1

    beznazwye.png

  13. Nie mam zapału do robienia czegoś. Nawet mini gry nie dokończyłem. Zawsze dochodzę do 50% i koniec. Mam co najmniej 100 projektów i wszystkie na 50% bo albo mi się nie chce albo nie umiem i mi się odechciało sad.gif Życie

    Moją najmniejszą mini grę robiłem przez miesiąc. Zawsze miałem tutorial, porządne menu i gra miała sens. I ja niedokończoną grę nazywam wtedy gdy nie wykonałem wszystkich pomysłów. Chcesz to ci jedną wyśle jeśli jeszcze ją mam.

    Edit. Jednak nie mam żadnej. Zapomniałem że formata robiłem

×
×
  • Dodaj nową pozycję...