Muchaszewski Opublikowano 26 Marca 2010 Udostępnij Opublikowano 26 Marca 2010 Witam. Mam drobny problem. Chciałem narysować "aktywną" linię, miała by ona wyglądać mniej więcej w taki sposób iż podczas lotu prosto wyglądała by jak zwykła prosta linia, lecz podczas lotu w górę, lub w dół leciała pod pewnym kątem w tym kierunku, nie chodzi mi o całą linię tylko o najbliższy kawałek, a reszta leciała by za nią. Myślałem nad takim kodem ale takie bajery tylko w C++ GML /*Dla ułatwienia całość dałem w draw*/ nY+=1 nX+=1 xx[nX] = x yy[nY] = y draw_set_color(c_white) for (i=0;i<=150;i+=1) {draw_point(xx,yy)} Jak można się domyślić nie zna zmiennej w tablicy ( i ) GML Unknown variable xx or array index out of bounds Odrazu ostrzegam że nie będę pisał takiego kodu: GML draw_point(xx[nX-1],yy[nY-1]) draw_point(xx[nX-2],yy[nY-2]) draw_point(xx[nX-3],yy[nY-3]) draw_point(xx[nX-4],yy[nY-4]) draw_point(xx[nX-5],yy[nY-5]) draw_point(xx[nX-6],yy[nY-6]) draw_point(xx[nX-7],yy[nY-7]) draw_point(xx[nX-8],yy[nY-8]) draw_point(xx[nX-9],yy[nY-9]) draw_point(xx[nX-10],yy[nY-10]) draw_point(xx[nX-11],yy[nY-11]) draw_point(xx[nX-12],yy[nY-12]) draw_point(xx[nX-13],yy[nY-13]) draw_point(xx[nX-14],yy[nY-14]) draw_point(xx[nX-15],yy[nY-15] I do tego deklaracja wszystkiego. MASAKRA!!!!!! Może znacie sposób na zrobienie tego o co mi chodzi, bez pisania 5040 LINIJEK KODU. Od razu uprzedzam niektórych podajcie sposób np w postaci kodu, a nie pisania Ja znam! Proszę o szybką pomoc. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
candy Opublikowano 27 Marca 2010 Udostępnij Opublikowano 27 Marca 2010 GML nY+=1 nX+=1 xx[nX] = x yy[nY] = y A jeżeli nX albo nY jest mniejsze od 150? Wtedy w pętli for wywali Ci błąd. Musisz dodać warunek: GML for (i=0;i<=150;i+=1) { if(i>nX&&i>nY) draw_point(xx,yy) else break } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muchaszewski Opublikowano 27 Marca 2010 Autor Udostępnij Opublikowano 27 Marca 2010 Dzisiaj dopiero znalazłem mój błąd. Chodzi mi o linię która miała by 640 px. Pierwszy pixel latał by w pozycji x i y, a kolejne leciały by za nim powtarzając to co on zrobił ale 640 razy i każdy z tych punktów leciał by 1 klatkę wcześniej. Ten kod na pewno mi działał jak chciałem, ale jak go powtórzyć żeby nie pisać tego 640 razy, a takich lini zrobię 4. GML draw_point(xx[nX-1],yy[nY-1]) draw_point(xx[nX-2],yy[nY-2]) draw_point(xx[nX-3],yy[nY-3]) draw_point(xx[nX-4],yy[nY-4]) draw_point(xx[nX-5],yy[nY-5]) draw_point(xx[nX-6],yy[nY-6]) draw_point(xx[nX-7],yy[nY-7]) draw_point(xx[nX-8],yy[nY-8]) draw_point(xx[nX-9],yy[nY-9]) draw_point(xx[nX-10],yy[nY-10]) draw_point(xx[nX-11],yy[nY-11]) draw_point(xx[nX-12],yy[nY-12]) draw_point(xx[nX-13],yy[nY-13]) draw_point(xx[nX-14],yy[nY-14]) draw_point(xx[nX-15],yy[nY-15]... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nobody Opublikowano 27 Marca 2010 Udostępnij Opublikowano 27 Marca 2010 Nie ma sensu robić to w ten sposób, tylko Ci spowolni grę. GML for( i = 1; i < 640; i += 1 ) { draw_point( xx[nX-i], yy[nY-i] ); } Proszę. Zamieniłem Twoje 640 linii na 4. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muchaszewski Opublikowano 27 Marca 2010 Autor Udostępnij Opublikowano 27 Marca 2010 Ehh dzisiaj nie myślę. Taki kod napisałem wcześniej ale wyskakiwał mi błąd "Negative array index", zapomniałem że w tablicy trzeba zainicjować nie samo nX ale jeszcze -i xx[nX-i]. Nie ma sensu robić to w ten sposób, tylko Ci spowolni grę. Wiem ale inny sposób mi nie przychodzi do głowy, napisałem że taki sposób działa tak jak chcę. Jeszcze nie zamykam. Jeśli zna ktoś sposób na zrobienie bardziej efektywnego kodu który by nie wymagał 1.6 GHz procka to proszę pomoc. O ile dobrze pamiętam gdzieś widziałem przykład właśnie na to ale nie mogłem teraz znaleźć. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hunter Opublikowano 27 Marca 2010 Udostępnij Opublikowano 27 Marca 2010 Hmm powiem ci szczerze iż sam zastanawiam się czy nie lepiej było by tego zrobić na listach ub jakiejś innej strukturze danych, popróbuj zamiast tablic może bedzie to szybsze. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Makary155 Opublikowano 27 Marca 2010 Udostępnij Opublikowano 27 Marca 2010 Hmm powiem ci szczerze iż sam zastanawiam się czy nie lepiej było by tego zrobić na listach ub jakiejś innej strukturze danych, popróbuj zamiast tablic może bedzie to szybsze. to akurat można sprawdzić. Napisz najpierw na tablicach, potem powtórz kod 1000 razy (repeat(1000)) i mierz czas wykonania, np przez porównanie current_time przed i po powtórzeniu. Analogicznie zrób na listach i zmierz czas, będzie wiadomo co szybsze. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muchaszewski Opublikowano 27 Marca 2010 Autor Udostępnij Opublikowano 27 Marca 2010 Sprawdziłem. Listy są nieznacznie szybsze od tablic. Ale to i tak niewiele przyśpiesza. Mam idealny komputer do testów (Gry w Flashu się zawieszają xD) Na listach średnie 27 fps na tablicach 22 fps. Myślałem nad czymś bardziej wydajnym. Najlepiej by było gdyby nie rysować punktów tylko kilka Lini. Było by to bardziej oszczędnie ale takie wyczyny są już dla mnie za trudne. Gdyście podali mi dobry pomysł na podstawie którego napisał bym kod było by świetnie. Chodzi mi o pseudokod, albo sam kod xD Linia ta ma tylko 4 proste wymagania. 1. Musi mieć wielkość 1px 2. Musi mieć długość 640px 3. Musi mieć możliwość szybkiej zmiany koloru, jak i możliwość klonowania na 4 sztuki. 4. Cała linia musi latać za 1 punktem. Takie proste a tyle problemów. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Makary155 Opublikowano 28 Marca 2010 Udostępnij Opublikowano 28 Marca 2010 A może prymitywy? Jeżeli wybierzesz pr_linelist to tworzy się figura na liniach, chociaż nie wiem dokładnie o co ci chodzi, możesz zobrazować to screenem jakimś? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muchaszewski Opublikowano 28 Marca 2010 Autor Udostępnij Opublikowano 28 Marca 2010 (edytowane) Wygląda to co chcę mniej więcej tak. I co teraz macie jaśniejszy obraz??? EDIT: Daje linka z przykładem, dla tych co jeszcze nie rozumieją o co mi w tym chodzi. https://gmclan.org/up4308_12_Przyk_ad.html Przykład w GM8, ale pod starsze też powinno działać. UWAGA: Przykład ten ma pewnego buga. Całość ujawni się dopiero po przeleceniu przez cały room!!!! Edytowane 31 Marca 2010 przez Muchaszewski Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 12 Kwietnia 2010 Udostępnij Opublikowano 12 Kwietnia 2010 a nie można by zamiast 640 pixeli narysowac tylko kilka lini, których punktami granicznymi będą załamania 'wykresu' zapisujesz załamania wykresu do tablic, ostatni punk będzie wyliczany dynamicznie (ten co się przesuwa). E: Tak zapisaną tablice łatwo jest zdoublować bądź nawet ztriplować, tak jak jest w Twoim przykładzie, choć nie wiem czy to jest oczekiwany efekt =p jutro dam Ci przykład. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 13 Kwietnia 2010 Udostępnij Opublikowano 13 Kwietnia 2010 https://gmclan.org/up152_12_lines.html Hm? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 13 Kwietnia 2010 Udostępnij Opublikowano 13 Kwietnia 2010 Tymon tylko nie mów, ze dałeś mu gotowca, bo ja już wczoraj miałem zrobionego :( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 13 Kwietnia 2010 Udostępnij Opublikowano 13 Kwietnia 2010 A co. Nudziło mi się rano przed wyjściem do szpitala. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 13 Kwietnia 2010 Udostępnij Opublikowano 13 Kwietnia 2010 jak juz zrobiłem to też wrzucę https://gmclan.org/up1558_12_linie_gm8.html choć jak teraz patrzę na Twój przykład to wydaje mi się, że nie do końca skumałem Muchaszewskiego =p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muchaszewski Opublikowano 13 Kwietnia 2010 Autor Udostępnij Opublikowano 13 Kwietnia 2010 https://gmclan.org/up152_12_lines.html Hm? Twój przykład wygląda ciekawie ale nie oto mi chodziło xD Musiał bym się bardziej wgłębić w twój przykład żeby wiedzieć co tam narobiłeś i usunąć niepożądane efekty. choć jak teraz patrzę na Twój przykład to wydaje mi się, że nie do końca skumałem Muchaszewskiego =p Natomiast twój jest idealny w działaniu. Jeszcze przejże twój kod w dokończeniu do i dopasowaniu, lecz jest idealny do moich potrzeb. Wielkie dzięki wszystkim zaangażowanym w pomoc mi xD Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 13 Kwietnia 2010 Udostępnij Opublikowano 13 Kwietnia 2010 Wgłębiać? Zmodyfikować kilka linii, kilka zakomentować i jest to samo. :D https://gmclan.org/up152_12_lines2.html Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muchaszewski Opublikowano 13 Kwietnia 2010 Autor Udostępnij Opublikowano 13 Kwietnia 2010 Teraz też jest dobry. Zasada działania dokładnie ta sama. Czemu ja na to nie wpadłem xD Mam jeszcze jedno pytanie. Jeżeli tak ta linia leci i zrobiłem ok. 800pkt to zaczyna się przywieszać(Mam słaby komp). Dlatego co zrobić żeby usunąć wartości z tabeli. Jeżeli zmieniam ją na 0 to do chodzę do 1200 pkt i lagi. Myślałem żeby zaczął używać ponownie tych samych pkt, lecz wtedy może wystąpić błąd taki jak nagłe znikanie lin z planszy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 13 Kwietnia 2010 Udostępnij Opublikowano 13 Kwietnia 2010 Ok, ale które linie chciałbyś usuwać? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muchaszewski Opublikowano 13 Kwietnia 2010 Autor Udostępnij Opublikowano 13 Kwietnia 2010 Oczywiście te które są najdalej, nie widać ich w roomie E: Nie obraź się Tymon korzystam z przykładu Marka.S GML if line_count =50 {line_count = 1 line_x[ line_count ] = line_x[ 50 ]; line_y[ line_count ] = line_y[ 50 ]; Przy takim czymś linia wyprostowuje się. Jej wszystkie poprzednie wartości wracają do początkowej. Nie powinny poprzednie zachować kształtu? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 13 Kwietnia 2010 Udostępnij Opublikowano 13 Kwietnia 2010 Znaczy rozumiem jeśli linia wychodzi po prawej stronie ekranu to jej generowanie ma zostać zatrzymane, tak? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muchaszewski Opublikowano 13 Kwietnia 2010 Autor Udostępnij Opublikowano 13 Kwietnia 2010 No... Tak. Trochę przerobiłem to i teraz linia zamiast lecieć, to jej główny punt stoi w miejscu, ew. poruszanie przez gracza, a reszta lini, dalsze punkty "uciekają" poza room. Chodzi mi o to aby te linie które są poza tym roomem "nie istniały". Nie przyjmowały żadnej wartości, gdyż ich i tak nie widać a tylko zajmują miejsce w pamięci komputera. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 13 Kwietnia 2010 Udostępnij Opublikowano 13 Kwietnia 2010 Kontynuowanie generowania: https://gmclan.org/up152_12_130410_gm8_lines_continue.html Przerwanie generowania: https://gmclan.org/up152_12_130410_gm8_lines_break.html Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muchaszewski Opublikowano 13 Kwietnia 2010 Autor Udostępnij Opublikowano 13 Kwietnia 2010 Link do tego co chcę. Już przerobiony. https://gmclan.org/up4308_12_linie.html I jeszcze coś. Porównałem oba przykłady Tymona i Marka. Twój Tymon jest strasznie pamięcio-żerny. Dlatego też go nie użyję. Szczegóły niżej. I co do tego linku. Jak usunąć będące w tabeli wartości. Mamy w tabeli z 1600 wartości, z czego tylko 50-300 jest używane. Co można zrobić żeby nie używał tych wcześniejszych. Może nie jest to trochę po polsku dlatego pokaże na przykładzie. GML line[0] = 10 line[1] = 13 line[2] = 4 line[3] = 5 W roomie wiać tylko wartości (line[2] = 4 line[3] = 5), reszta wartości jest używana, lecz do czegoś czego gracz nie widzi. Co zrobić z tymi 2 pierwszymi wartościami żeby ich nie używał, nie przechowywał w pamięci itd!!! Tymon: U ciebie po naciśnięciu przycisku obiekt tworzy nowy punkt i kolejny i kolejny. Jeżeli polatamy w górę i w dół i tak z 30s będziemy mieli 900 punktów i z 10 linii. Dużo zmiennych, a tego chcę uniknąć. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 13 Kwietnia 2010 Udostępnij Opublikowano 13 Kwietnia 2010 O, rzeczywiście. :) Nie zmodyfikowałem warunków, 3 linia: GML (Step) if( lines[linesCount - 1,1] != -1 )i 13GML if( lines[linesCount - 1,1] != 1 )Niedopatrzenie. https://gmclan.org/up152_12_130410_gm8_lines_break.html https://gmclan.org/up152_12_130410_gm8_lines_continue.html Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muchaszewski Opublikowano 14 Kwietnia 2010 Autor Udostępnij Opublikowano 14 Kwietnia 2010 Tymon twój przykład to nie było to o co mi w 100% chodziło ale wpadłem na pomysł i sam sobie poradziłem. GML if line_count = 250 {for (l=0;l<50;l+=1) {line_count = 50 line_x[line_count - l] = line_x[250 - l] line_y[line_count - l] = line_y[250 - l]}} U ciebie to by trochę inaczej wyglądało, ale no cóż xD Dzięki wam wszystkim :thumbsup: Zamykam Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi