Skocz do zawartości

TO_mek

Użytkownicy
  • Postów

    346
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    1

Treść opublikowana przez TO_mek

  1. Witam! Od jakiegoś czasu zastanawiam się nad dużym światem 2D zrobionym w GM. Robienie dużych roomow mija się z celem. Chodzi mi o coś na zasadzie dużych tablic przechowujących dane i wyświetlania tylko tego skrawka świata który mieści się na 1 ekranie coś mniej więcej jak w tym tutorialu (porównanie do peryskopu czołgu). Zastanawia mnie jak uzyskać ożywione obiekty poza aktualnie widocznym ekranem. Załóżmy, że wszelkie postacie (zwierzęta, rośliny) chcę mieć "żywe" tzn. że drzewo co ileś tam czasu rośnie, zmienia kolor liści, zwierzęta poruszają się po planszy, rosną, walczą pomiędzy sobą (wilk goni zająca) itp. Obawiam się, że robiąc to na obiektach w dodatku cały czas aktywnych może na dzień dobry zarżnąć grę bo ich docelowa liczba może iść w setki. Deaktywacja obiektów poza roomem także nie ma sensu bo nieaktywny obiekt to tak jakby go wcale nie było (nie zmienia pozycji, nie wykrywa kolizji itp.). Zdaję sobie sprawę, że tego typu gry (bazującej na tak dużym świecie z interaktywnymi obiektami) nie się się zrobić w kilka tygodni czy miesięcy. Na początek stworzę sobie bardzo prostą platformówkę ale w oparciu o podobny algorytm wyświetlania czyli: - ekran ruchomy tylko w lewo/prawo (a w zasadzie tylko w jedną stronę bo bohater ma z automatu "iść" w prawo a gracz ma tylko możliwość podskakiwania - jeden klawisz sterujący w grze) - wszelkie pojawiające się obiekty (platformy, przeciwnicy (drobne zwierzaki które należy przeskoczyć) i przeszkody (dziura z wodą, niewielki murek itp) są przechowywane w tablicy i tworzone w momencie gdy mają pojawić się na ekranie, - platforma główna (droga) to "klocki" o stałej szerokości, bez zbędnych przerw między sobą - czyli definiując ilość tych kostek i znając ich szerokość znany będzie docelowy rozmiar (szerokość) świata - pozycja bohatera jest stała natomiast cały świat się przesuwa z prawej do lewej, - szerokość rooma = szerokości widzialnego ekranu, szerokość świata nieograniczona (a właściwie ograniczona podczas tworzenia listy obiektów platformy głównej a to z kolei potrzebne jest do efektu przesuwania tła i obiektów drugiego planu) - do tego tło i obiekty dalszego plany by wykorzystać efekt paralaksy, Powyższe punkty raczej nie sprawią mi problemu natomiast zastanawia mnie jak rozwiązać to "ożywienie świata" (które w tej gierce platformowej w zasadzie jest mało istotne a które jak najbardziej będzie istotne przy docelowym projekcie) Może macie jakieś sugestie czy sprawdzone algorytmy jak do takiego tematu podejść.
  2. draw_healthbar(x1,y1,x2,y2,amount,backcol,mincol,maxcol,direction,showback,showb order) With this function you can draw a healthbar (or any other bar that indicates some value, like e.g. the damage). The arguments x1, y1, x2 and y2 indicate the total area for the bar. amount indicates the percentage of the bar that must be filled (must lie between 0 and 100). backcol is the color of the background for the bar. mincol and maxcol indicate the color when the amount is 0 and 100 respectively. For an amount in between the color is interpolated. So you can easily make a bar that goes e.g. from green to red. The direction is the direction in which the bar is drawn. 0 indicates that the bar is anchored at the left, 1 at the right, 2 at the top and 3 at the bottom. Finally showback indicates whether a background box must be shown and showborder indicated whether the box and bar should have a black border line. Najistotniejszy jest amount, reszta to współrzędne i wygląd :). Zastosuj przeliczenie tego życia czy tam energii czy do czego tego potrzebujesz, czyli pod amount wstawiasz ((energia_chwilowa/energia_max)*100), gdzie energia_chwilowa to energia jaka jest w danej chwili a energia_max to maksymalna energia (poczatkowa) czyli te Twoje 25 lub 1555.
  3. Witam! Jak zrobić ruch po elipsie pod zadanym kątem? Mam 2 obiekty object0 (centralny) oraz object1 (krążący wokoło centralnego - docelowo będzie wiele instancji tego obiektu) W create object1 mam zdefiniowane: GML dir=irandom(360); // kieunek dis=irandom(128)+64; // dlugosc (odleglosc)</span> w stepie GML x=object0.x+lengthdir_x(dis,dir); y=object0.y+lengthdir_y(dis,dir)*1.5; dir+=1; W takim przypadku elipsa jest rysowana tek ze os wielka jest w pionie a os mała w poziomie. Jak uzyskać efekt taki by oś wielka była odchylona o jakiś konkretny kąt od pionu (np. 30 stopni, 45 stopni)? Pytania dodatkowe: - jak narysować taką elipsę za pomocą funkcji draw. - jak narysować prostą smugę za takim obiektem (np. rysowanie 20 punktów "za" obiektem, gdzie ten najbliżej obiektu jest najciemniejszy a ten ostatni najjaśniejszy (niemal w kolorze białego tła))
  4. Sterowanie jest na głównej stronie po uruchomieniu gry A,X,L,M A to o czym piszesz wyżej to efekt naciśnięcia podczas gry nieopisanego klawisza H - highscore który faktycznie niepotrzebnie jest aktywny podczas rozgrywki. Tani Cukier powstał w czasie gdy cena cukru była na poziomie cen paliwa i dostępna była na naszej stronie z początkiem kwietnia a dopiero teraz umieściłem ją tutaj.
  5. Tytuł: Tani Cukier Gatunek: zręcznościówka Opis: Cena CUKRU poszła ostro w górę! Ale nic się nie martwcie pracujemy nad tym - będzie tanio - nawet bardzo! Aktualnie sprawdzamy zawartość cukru w cukrze. Wygląda na to, że ktoś mocno przesadził z ceną. Jednak już wkrótce będziecie mieli tyle cukru ile sami złapiecie ... i to zupełnie za darmo. Nie biegaj po marketach, u nas zrobisz nieograniczone zapasy! Download: TaniCukier Rozmiar pliku: 1,69 MB Autorzy: Programowanie: Retrospect Workshop Fabuła: Retrospect Workshop Grafika: Retrospect Workshop Muzyka: Retrospect Workshop Screeny:
  6. Ech a potem się dziwić, że programiści w dziurawych butach chodzą ;). To tak jak ze stronami www, człowiekowi się odechciewa dyskutować jak słyszy, że kolega to samo mu zrobi za 290-300 a nie za 1500. Druga sprawa pojęcie "Gra jakaś platformówka prosta, przygodówka." niewiele mówi.
  7. A może wystarczy Ci wyświetlanie strony przez splash_show_web().
  8. ANtY już jako scenarzysta się zatrudnił :) No to początek fabuły już jest. Bazując na tym można niezły sequel jakieś napierdzielanki zrobić.
  9. O rozpadaniu się obiektu było też tu. Może coś Ci podejdzie.
  10. W sumie o coś takiego mi chodziło :) Cheat Engine znowu mnie pozytywnie zaskoczył.
  11. Witam! Chciałbym napisać programik który mógłby spowalniać jakiś inny konkretny program. Czyli coś w rodzaju CPU killer dla jednego wybranego programu (procesu). Ewentualnie jak napisać program który spowalnia sam procesor (czyli odpowiednik CPU Killer). Ma ktoś pomysł jak się do tego zabrać i czy z poziomu GMLa da się coś takiego uzyskać?
  12. Mam tylko jedna wersje IE v.8.0.6001.18702 Wydaje mi się że faktycznie wtyczka jest ograniczona i tyle. EDIT: Gnysek pod Twoją przeglądarką w Delphi z tego przykładu co dałeś linka także moja strona się rozsypuje.
  13. Raczej niemożliwe że ta sama wersja chociaż mam wrażenie że to IE. Pod IE widzę wszystko ok z poziomu aplikacji niestety nie. Chodzi m.in. o moją stronę domową (http://retrospect.com.pl). Z execute_shell działa OK choć wciąż zastanawia mnie z czego wynika problem z moją stroną, tak jakby GMowy "IE" działał w trybie IE 6 czy 7. Nie bardzo mam jak sprawdzić bo mam zainstalowany IE8 ale ewentualnie jeśli ktoś ma czas, ochotę i starsze wersje IE to może zrobić test jak wygląda moja strona pod starszymi IE.
  14. Witam! Mam problem ze splash_show_web a mianowicie niektóre strony otwierane poprzez ta funkcje wyglądają nie tak jak powinny (rozpada się układ strony tak jakby źle był interpretowany CSS) a te same strony pod przeglądarkami IE 8, FF 3.5, Opera, Chrome, Safari, czyli wszystkie w najnowszych wersjach dostępnych na win XP, otwierają strony prawidłowo. Mogę poprawić układ CSS stron ale nie bardzo wiem co im brakuje aby otwierały się prawidłowo z poziomu GMa. Czy ta wbudowana przeglądarka to jakiś odpowiednik IE w konkretnej wersji (5, 6, 7 ?)? A może można otwierać z poziomu aplikacji robionych w GM strony bezpośrednio w przeglądarce? Jeśli jak to poproszę o info bądź dlla.
  15. Witam! Może mi ktoś wytłumaczyć jak zrobić obsługę przypisywania własnych klawiszy w grze. Wiem, że keyboard_set_map mapuje jakiś klawisz do innego i oba działają zamiennie ale mi chodzi o to by gracz mógł zdefiniować swoje pojedyncze klawisze. Czyli mam ASDW a chce aby gracz mógł je zamienić na ZXCS.
  16. No akurat to jest banalny przykładzik, zresztą cała obsługa tablic jest bardzo prosta. Właściwie to niepotrzebnie zakładałem wątek ale przynajmniej wiem że na 100% wbudowanych funkcji nie ma (pewnie ktoś z nudów dllkę dawno zrobił do tego).
  17. GML u = t No tak ale to kopiuje po jednym elemencie tablicy czyli tradycyjnie wiec tak jak przypuszczałem, że się nie da jedną komendą. A zamiast do pliku wolę sobie jednak to wpakować do ds_list/ds_grid i później jednego stringa zapisywać. Roboty tyle samo bo też w pętli to trzeba przenieść z tablicy do ds_x ale za to zapisany plik z takim stringiem ds_list/ds_grid dla laika jest nieczytelny.
  18. Witam! Tworzę save i mam pytanie dotyczące operacji na tablicach. Na ds_list i ds_grid przestawiłem się stosunkowo niedawno (prawie pod koniec tworzenia gry) i duża część tablic została na tradycyjnych arrayach i w związku z tym mam pytanie. Czy na tablicach można dokonywać operacji podobnych jak na ds_list czy ds_grid? Głównie chodzi mi o kopiowanie całej tablicy do drugiej oraz czy jest możliwość zapisu całej tablicy do stringa (ds_list_write) i późniejszego odczytu (ds_list_read). A może wystarczy zapisać tablicę "tabela_danych[X,Y]" do pliku jako zmienną "tabela_danych" i to wystarczy (czyli zachowa mi pełne dane z tablicy)?
  19. Tyle, że jak to stwierdził ostatnio Gnysek: https://gmclan.org/index.php?nius=389&s...2=20&s3=ASC "gnysek (16:30, 30.03.2011) Pascal śmierdzi starymi ludźmi. " ;) Pozdrawiam "Stary ludź"
  20. Właśnie mnie też przed chwilką olśniło. Robiłem to na podstawie mojego innego skryptu gdzie zapisywałem i odczytywałem GRIDa a nie LISTe i wdarł mi się błąd bo zapisywałem owszem listę ale odczytać chciałem grida :( Kocham czeskie błędy. W sumie temat do skasowania.
  21. Obawiam się, że nikt nie ma racji bo kod wcale nie zadziała :) Z prostej przyczyny: lengthdir_x a nie x_lenghdir EDIT: Podsumowując w Stepie obiektu A dajesz: GML obiekt_b.x=x+lengthdir_x(promien,d); obiekt_b.y=y+lengthdir_y(promien,d); d+=predkosc; a w Create obiektu A przykładowo: GML d:=0; promien:=100; predkosc:=5;
  22. Witam! Mam taki błąd przy ładowaniu danych za pomocą poniższych skryptów: ERROR in action number 1 of Key Press Event for L-key Key for object hero_obj: Data structure with index does not exist. Save pod klawiszem "S" GML var _duchy; _duchy:=ds_list_create(); with (duch_obj) { ds_list_add(_duchy, x); ds_list_add(_duchy, y); ds_list_add(_duchy, energia); ds_list_add(_duchy, energia_max); ds_list_add(_duchy, uciekac); ds_list_add(_duchy, panika); ds_list_add(_duchy, pietro); ds_list_add(_duchy, swiatlosc); } var _duchy_lista; _duchy_lista:=ds_list_write(_duchy); var gdzie; gdzie = get_save_filename('zapisy|*.sav','zapis.sav'); if gdzie != '' then { if file_exists(gdzie) then file_copy(gdzie,"zapis_old.sav"); file_open_write(gdzie); file_write_string(_duchy_lista); file_close(); } show_message(string(ds_list_size(_duchy) div 8)); ds_list_destroy(_duchy); Odczyt na klawiszu "L" GML var _duchy_lista; _duchy_lista:=''; var _duchy; _duchy:=ds_list_create(); var gdzie; gdzie = get_open_filename('zapisy|*.sav','zapis.sav'); if gdzie != '' then { if file_exists(gdzie) then { file_open_read(gdzie); _duchy_lista:=file_read_string(); file_readln(); ds_grid_read(_duchy,_duchy_lista); //W TEJ LINII POJAWIA SIE BLAD show_message('4'); file_close(); } } show_message(_duchy_lista); //POKAZUJE ZAWARTOSC STRINGA Z LISTA - PRZYNAJMNIEJ POCZATEK LISTY ZGADZA SIE Z TYM CO JEST W PLIKU with (duch_obj) { instance_destroy(); //niszczy wszystkie obecne duchy } var _duch; _duch:=0; for (i=0; i< (ds_list_size(_duchy) div 8); i+=1) {// div 8 bo jest 8 wartosci dla kazdego ducha _duch:=instance_create(x+100,y,duch_obj); _duch.x:=ds_list_find_value(_duchy, 0+(i*8)) _duch.y:=ds_list_find_value(_duchy, 1+(i*8)) _duch.energia:=ds_list_find_value(_duchy, 2+(i*8)) _duch.energia_max:=ds_list_find_value(_duchy, 3+(i*8)) _duch.uciekac:=ds_list_find_value(_duchy, 4+(i*8)) _duch.panika:=ds_list_find_value(_duchy, 5+(i*8)) _duch.pietro:=ds_list_find_value(_duchy, 6+(i*8)) _duch.swiatlosc:=ds_list_find_value(_duchy, 7+(i*8)) } Podpowie ktoś co sknociłem?
  23. Jeszcze raz: 1.Tworzysz nowy skrypt i nazywasz go draw_rectangle_xl 2. Wklejasz do niego: GML //for(i:=0; i<argument5; i+=1) //rysowanie od wspolrzednych do srodka prostokata // draw_rectangle(argument0+i,argument1+i,argument2-i,argument3-i,argument4); for(i:=0; i<argument5; i+=1) //rysowanie od wspolrzednych na zewnatrz prostokata draw_rectangle(argument0-i,argument1-i,argument2+i,argument3+i,argument4); 3. Wywołujesz ten skrypt w jakimś obiekcie w zdarzeniu DRAW poprzez wpisanie: draw_rectangle_xl(x1,y1,x2,y2,outline, jaka_grubosc) gdzie: x1,y1 to współrzędne lewego górnego rogu prostokąta x2,y2 to współrzędne prawego dolnego rogu prostokąta outline - dla true nie wypełnia środka prostokąta, dla false wypełnia środek prostokąta kolorem jaka_grubość - liczba która określa grubość linii dla prostokąta Czyli na przykład w zdarzeniu draw jakiegoś obiektu wpisz: GML draw_set_color(c_yellow); //ustawia kolor rysowania na żółty draw_rectangle_xl(50,50,150,150,true, 5); //rysuje kwadrat o boku 100 pikseli linią o grubości 5 pikseli</span></span></span></span> EDIT: Zrobiłem przykład: https://gmclan.org/up3286_12_mouse_region_d...ctangle_xl.html
  24. Stwórz nowy skrypt załóżmy o nazwie "draw_rectangle_xl", wklej tam ten kod. To niemal to samo co draw_rectangle z tym, że dochodzi dodatkowy, ostatni argument o grubości linii. Czyli draw_rectangle_xl(x1,y1, x2,y2, true, jaka_grubosc); Wywołuj to w zdarzeniu draw. Ja używam tego mniej więcej tak, że sprawdzam naciśniecie klawisza "2" (czy to w kodzie w step czy też na klockach) gdzie nadaję wartość zmiennej pomocniczej "rysowac:=2; A w samym zdarzeniu Draw: if rysowac == 2 then draw_rectangle_xl(x1,y1, x2,y2, true, jaka_grubosc);
  25. Wolę zmienne globalne bo po pierwsze często są to zmienne zależne od innych np global.costam:=global.costam2*global.costam3+(global.costam4 div 2) A po drugie łatwiej zrobić poziomy trudności robiąc np. 3 osobne skrypty deklarujące te parametry odrębne dla każdego poziomu trudności. Po trzecie stałe wymagają wersji Pro a zwykle większość zaczynała na wersji Lite a przyzwyczajenia trudno się zmienia. Po czwarte w GM4 w którym zaczynałem chyba nawet nie było stałych :)
×
×
  • Dodaj nową pozycję...