Skocz do zawartości

Dawidds

Użytkownicy
  • Postów

    1 970
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez Dawidds

  1. Jestem a tym, co Marmot powiedział. Niech będzie osobna strona dla każdej funkcji, każdy by ją uzupełnił o przykłady użycia itp. A może nawet folder "Problemy", gdzie byłyby częste problemu użytkowników typu "Poruszanie ekranu za graczem". Każdy by napisał, jak to zrobić, wyjaśnił, a mże nawet ktoś dałby przykład.
  2. Dawidds

    Witaj szkoło :D

    Ja się cieszę :) Choć dobrze wiem, że po miesiącu znowu będę chciał wakacji... Najlepiej by było, jakby co miesiąc był wolny tydzień :P
  3. Najprościej właśnie białego sprita, odpowiednio przeźroczystego :)
  4. Dawidds

    Narysuj poprzednika ;)

    Ranmus tez miał karykaturę przez avatar :P Ale on ten avatar miał dość długo, to można było zaakceptować. Raczej nie zna się osób tak dobrze, aby karykatury o nich robić. W tym temacie była tylko jedna praca prezentująca jakiś poziom...
  5. To rozwiązanie ma wady... 1. Graczowi uruchamia się przeglądarka... 2. Każdy może wysłać do niego na email co tyko chce. I mega-łatwo zrobić "bombera" emaila - tylko robię odpowiedni adres, ustawiam w przeglądarce, aby się odświerzała co 2s, i zostawiam komputer wolny na cały dzień :) Lepiej by było znaleźć DLL'a do zrobienia przeglądarki w GM'ie (Shocker pisał, że widział taką kiedyś...), stworzyć tą przeglądarkę gdzieś za roomem, i w niej wczytać ten adres. ;)
  6. Widziałem :D Ale tamten trochę inny był, tamten to bardziej do klimatycznej platformówki się nadawał :P A ja poprawiam te dziwne wcięcia na prawo... Edit: Poprawiło się :D Ale już nie będę korzystał z tego WYSIWYG'a rypanego :P
  7. Poczekajcie, zrobię ten przykład :P Bo te tagi [ CODE ] coś rozrypały tabulatory :/ Edit: A jak do GM'a wkleiłem to czcionka w GM'owym edytorze się zmieniła,a le tylko kawałkami O_o Już wgrywam na serwer... Edit2: Jest w pierwszym poście ;) Radzę zwiększyć room_speed, bo troszkę sobie poczekacie :P
  8. Cykl dnia i nocy Poziom: Średni ;P Cel: Uzyskanie płynnego systemu dnia i nocy, oraz zegara elektronicznego : P Przykład: POBIERZ 1. Rozplanowanie zadań. Cóż, najpierw trzeba wymyślić, jak to wszystko miałoby działać. W hud'dzie powinniśmy widzieć zegar (np. "7:27", "23:11"...). Jedna minuta w grze niech będzie równa jednej sekundzie naprawdę. Kiedy minuty osiągną 60 godzina powinna się podnieść o jeden, a minuty spaść do zera. Teraz właściwa treść tutoriala, czyli cykl dnia i nocy. Będziemy malować prostokąt o rozmiarach view'a, nad wszystkimi (ew. pod hudem, kursorem itp.) objektami, o odpowiednim image_alpha. A owa przeźroczystość będzie obliczana na podstawie aktualnej godziny. Więc, zaczynajmy :) 2. Zmienne zegara Zaczniemy oczywiście od zegara. Minuty i godziny będą przecgowywane w zmiennych global.time_minutes oraz global.time_hours. Przedstawię przy okazji moją metodę inicjacji wszystkich potrzebnych zmiennych. Funkcja init() GML if(!variable_global_exists("global.inited")) //Jesli nie istnieje zmienne global.inited (czyli jesli inicjacja wykonuje się pierwszy raz) { global.time_hours = 15; //Godzina global.time_minutes = 30; //Minuta global.inited = true; //Deklaruję zmienną global.inited. To nie ważne, jaką wartosć jej przypisze. Ważne, że już istnieje... } Ten prosty bajer daje nam pewność, ze inicjacja wykona się tylko raz. W przypadku, kiedy np. przechodzimy z rooma do rooma, a jakiś objekt miałby kod inicjacji, to zmienne zadeklarowały by się od początku, czyli po części restart gry. Można się przed tym łatwo zabezpieczyć, inicjując grę w pierwszym roomie. Ale zawsze warto się zabezpieczyć, niż potem szukać, co jest problemem... No i wygodniej dodać zmienne do funkcji, niż szukać objektu, w którym to ukryliśmy :) Także "już" zainicjowaliśmy zmienne potrzebne do zegara. 3. Malowanie ciemności... Najpierw stwórzmy kod na malowanie "ciemności"... Stwórz objekt powiedzmy obj_zegar. Ustaw mu depth niższy niż wszystkie objekty w grze (drzewa, krzaki, bohater, ściany itp.), ale najlepiej mniejszy od depthu hud'a. Np. u mnie to jest -10000. obj_zegar - Create: GML clouds_alpha = 0; //Przeźroczystość chmur. 0 = niewidoczne chmury; 1 = nic nie widać timer = 0; //Można to było zrobić na alarmach, ale czasami lepsze są takie rozwiazania. Jak dla mnie kod jest przez to czytelniejszy, a zaraz się przekonacie, o co chodzi... obj_zegar - Draw: GML x = view_xview[view_current]; //Ustawiamy x zegara na górny lewy róg ekranu. y = view_yview[view_current]; //Podobnie y... draw_set_color(c_black); //Ustawiamy kolor na czarny. Ewentualnie bardziej klikatyczny o niektórych gier może być kolor szary, lub jakiś sprite z lekkim szumem draw_set_alpha(clouds_alpha * 0.9); //0.9 = maksymalny alpha chmur. draw_rectangle(x, y, x+640, y+480, 0); //Malujemy prostokąt. 640 i 480 to rozmiary naszego viewa. draw_set_alpha(1); //Teraz namalujemy godzinę. draw_set_color(c_white); //Ustawiam kolor na biały... draw_text(x+5, y+5, string(gen_time())); //I maluje tekst... ale zaraz zaraz. Co to za funckja gen_time()...? Dowiecie się w swoim czasie;) 4. Ruch zegara Co nam po malowaniu, jak jeszcze nawet zegar nie działa :P ? Przejdźmy od razu do konkretów, wyjaśniać będę w komentarzach. Powiem tylko, że to nie jest tak skomplikowane, jak się wydaje :) (Szkoda, że nie działa tag GML :/) obj_zegar - Step: GML if(timer >= 30) //Jeśli zmienna timer (która co klatkę zwiększa się o 1) Osiąga wartość 30 (30 = ilość klatek, po których czas w grze zwiększa się o 1 minutę. Zamiast 30 dajcie ilość klatek z waszej gry. Ewentualnie mniej, jeśli zegar ma lecieć szybciej, lub więcej, jeśli zegar ma lecieć wolniej.) { timer = 0; //Zerujemy nasz timer. Teraz będzie potrzebował kolejnych 30 klatek, aby w grze była minuta... if(global.time_minutes < 59) //Jeśli minuty jeszcze NIE są na tyle duże, aby czas w grze zwiększył się o godzinę... { global.time_minutes += 1; //Dodajemy minutę do czasu w grze. } else //Ale jeśli minut JEST już na tyle dużo, aby Czas w grze zwięlszył się o godzinę... { if(global.time_hours < 23) //Jeśli godzin NIE jest tak dużo, aby minęła cała doba... { global.time_hours += 1; //Dodajemy godzinę do czasu w grze... global.time_minutes = 0; //UStawiamy minuty na 0... } else //Ale jeśli godzin JEST tak dużo, aby minął cały dzień... { global.time_hours = 0; //Ustawiamy godzinę na 0:00 global.time_minutes = 0; //Tutaj ewentualnie jakiś kod podliczający dni, np. global.time_days += 1;) } } } else //Ale jeśli jeszcze nasza zmienna timer NIE jest aż tak duża, aby minuta w grze podskoczyła... { timer += 1; //To dodajemy do niej 1. } Po krótszej analizie powinieneś zrozumieć działanie tego kodu. Jak już mówiłem, można to było zrobić na alarmach. No ale ten kod staje się jakd la mei czytelniejszy, bo mam wszystko w jednym evencie, w jednej "kupie" tekstu. A nie kawałki kodów porozwalane po eventach. Swoja drogą zwykły, z pozoru błachy zegarek, a trochę roboty z nim jest... 5. A gdyby...? Zapewne nikt na to nie wpadł, ale ten kod ma wadę. Jeśli w grze będzie powiedzmy siedem po ósmej, to skrypt pokaże to tak: "8:7", a to nam nie pasuje. Powinien pokazać "8:07" Do tego celu stworzymy sobie funkcję gen_time(), któa będzie zwracała nam czas, ale w dobrej formie. gen_time() GML // gen_time(); // Funkcja zwracajaca czas w dobrej formie, np. 7:05 //(Ja zawsze tak sobie oznaczam funckje, aby wiedzieć, jak która działa;) ) hours = global.time_hours; //Ustawiam zmienną z godzinami, która posłuży do "obliczeń". minutes = global.time_minutes; //Podobnei z minutami. if(string_length(string(minutes)) < 2) //Jeśli minuty składają się z mneij niż 2 znaków (czyli np. 7:0, 7:1, ... 7:8, 7:9) { minutes = string_insert("0", string(minutes), 0); //Dorzucam zero na pierwszą pozycję minut. Teraz będzie 7:00, 7:01 itd. } return string(hours) + ":" + string(minutes); //Funckja musi coś zwracać. także zwracam tekst w cąłkiem poprawnej formie, czyli podzielonej znakiem ":". I tyle. A teraz najważniejsza część artykułu :D 6. Obliczenia chmur Powiem szczerze, że nie wiem, jak Wam to wyjaśnić. Sam tego typu kody piszę jakoś instynktownie, niemal nigdy się nie mylę :P Także nad tym kodem będziecie musieli sami pomyśleć. Pierwszym etapem jest stworzenie funkcji, która da nam możliwość łatwiejszego porównywania czasu, a mianowicie funkcję, która zwracałaby nam liczbę minut podanej godziny. Czyli np.: gen_test_time(0, 12) = 12; //"0, 12" należy rozumieć jako "0:12" ;) gen_test_time(0, 55) = 55; gen_test_time(1, 15) = 75; gen_test_time(2, 00) = 120; gen_test_time(3, 30) = 210; Mam nadzieję, że rozumiecie, o co chodzi. Teraz czas na ową funkcję... gen_test_time() GML // gen_test_time(hours, minutes) // Zwraca liczbę minut w podanej godzinie. return (argument0 * 60) + argument1; //Jak widzicie dość rposta funkcja;) I to już ostatna część artykułu. Teraz już musicie sami pomyśleć ;) obj_zegar - Step: GML test_time = gen_test_time(global.time_hours, global.time_minutes); if(test_time < gen_test_time(4, 0)) //od 0:00 do 4:00... { clouds_alpha = 1; //...chmury są duże... } else if(test_time < gen_test_time(8, 0)) //od 4:00 do 8:00... { clouds_alpha = ((gen_test_time(8, 0) - test_time)/(gen_test_time(8, 0) - gen_test_time(4, 0))); //...stopniowo robi się coraz jaśniej.... } else if(test_time < gen_test_time(22, 0)) //od 8:00 do 22:00... { clouds_alpha = 0; //Jest całkiem jasno... } else if(test_time < gen_test_time(24, 0)) //od 22:00 do 24:00... { clouds_alpha = 1-((gen_test_time(24, 0) - test_time)/(gen_test_time(24, 0) - gen_test_time(22, 0))); //...stopniowo się zciemnia... } I to wszystko : D 7. Próba wyjaśnienia Nie no, wypadało by chociaż spróbować wyjaśnić ostatnią część kodu :P No więc próbuję... Mamy takie coś: ((gen_test_time(8, 0) - test_time)/(gen_test_time(8, 0) - gen_test_time(4, 0))); //Oryginalna część (gen_test_time(8, 0) - test_time) / (gen_test_time(8, 0) - gen_test_time(4, 0)); //Usuwam nawiasy, robię spacje, łatwiej będzie zrozumieć ; ) //Jak widzicie to obliczenie skłąda się z dwóch części. COŚ zostaje podzielone przez COŚ2, i wychodzi... odpowiedni alpha chmur :P Objaśniam, co który COŚ oznacza... (ile minut brakuje do 8:00 (za ile minut wybije 8:00)) / (liczba minut, które miną od 4:00 do 8:00); //Czyli na przykład: (239) / (240); //Godzina 4:01 - jak każdy widzi wynik będzie wysoki - wiec alpha też,a co za tym idzie chmury duże... (120) / (240); //Godzina 6:00 - Wynik to 0.5. (60) / (240); //Godzina 7:00 (już prawie jasno) - wynik to 0.25 - więc już prawie wszystko widać ; ) (1) / (240); //Godzina 7:59 (prawie całkiem jasno...) - wynik to... no bardzo mało : D 8. Zakończenie Gratulacje, masz własny system dnia i nocy, który (mam nadzieję ;>) nawet rozumiesz : P Myślę, że udało mi się wystarczająco dobrze wyjaśnić ostatnią część ; ) Hmmm.... godzinka mi na tym artykuliku zleciała : P Ale co, nudziło mi się ;P A nie wpadłem na lepszy temat na artykuł... PS: Szkoda, że nie ma tagu GML : | A pisano, że zaraz (bodajże "najpóźniej do południa" dnia wczorajszego) będzie gotowy : P PS2: Cholera, zwiększcie możliwą do użycia liczbę emotikon :/ Edit: Co z tymi [ gml ] się stało...? O_o
  9. To Twoje zdjęcie :D ?

    Strasznie kanciate uszy masz ;P

  10. Dzięki Snake ;) Hmmm... może ktoś przyklei temat z tym linkiem? Jakbym znał tą stronę to bym najprawdopodobniej znalazł :) To może i komuś innemu się przyda ;) PS: To pierwsze to niezły bajer jest :P Przynajmniej na screenach. Muszę to przetestować :D Edit: Ooo, warna nie mam :) Jeszcze raz dzięki ;)
  11. Ja cię pierniczę :P Przeczytaj moje wszystkie posty to dojdziesz do wniosku, że to było porównanie room w pliku tekstowym vs room w obrazku :P Zresztą jakby ie było, to właśnie miałem na myśli. Więc po co dalsza rozmowa na ten temat..? A DLL mógłby zwrócić wartości kolorów pixeli wszystkich, w jednym stringu. GM by to rozdzielił i objekty potworzył. Jestem niemal pewny, że to by było szybsze :D
  12. Jak pobrać aktualny procent użycia procesora ogólnie, oraz dla aktywnej aplikacji? Najlepiej z dokładnością do 2. miejsca po przecinku Jakby ktoś nie zczaił, takie coś: Tym razem bez DLL'a się chyba nie obejdzie :D Może ktoś by mi takowego DLL'ka naisał? Byłbym wdzięczny,a to (chyba...) niewiele roboty :)
  13. Ja pierdziele. Każdy wspomniany idiota wie, że plik lepszy niż room. Ale przeczytaj jeszcze raz mojego posta. Dokładnie. A jak nie odczujesz różnicy to przeczytaj jeszcze raz. Aż dojdziesz do wniosku, że porównywałem twoją metodę do ładowania z pliku tekstowego. Wtedy exec będzie ważył tyle samo, ale level będzie ładować się szybciej, a plik z levelem będzie ważył mniej. Już rozumiesz, co co mi chodziło? To dobrze... Weź sobie grę typu powiedzmy Almora i zobacz, jaka tam jest mapa ;) Akurat Almora to zły przykład :P I podsumujmy to: wskaż mi niepodważalną zaletę tego rozwiązania ładowania map. Jedyną mini-zaletą jest fakt stworzenia prosteg edytora leveli, jak już wspominałem kilka razy.
  14. Dawidds

    games-graphis.pl

    Pomagał ;> ? Skórka i skrypt mój. Ty żeś to aż wgrał na swój serwer, napisał regulamin i dodał link "Konkurs" :P Ja nie byłem za publikacją tego serwisu teraz no ale to Nakyls tu decyduje. W ogóle zdecydowałem się na napisanie takiego skrypciku w sumie dla siebie :D Wykorzystałem mojego mini-CMS'ka, i dodałem do niego galerie. Kiedyś go jeszcze opublikuję :D I tak szczerze mówiąc to po części mam takie wrażenie jak Excolo, że ten serwis ma małe szanse powodzenia. Wyskoczyłem nawet z taką lamerską inicjatywą, aby każdy user miał swoje punkty, mógł je przelewać i kupować grafiki :D Ale zawsze jakiś bajer :P Ale on się poprawił. Nie wiedział, że strona jest na moim skrypcie :D Kilka błędów znalazłem. Dopiero teraz na spokojnie przyjrzałem się temu skryptowi. Brak przypomnienia hasła (wywal ten link narazie (panels/2.php jakby co)), jest mini-luka pozwalająca na dodanie pustego obrazka, nie ma polskich znaków w opisie/licencji obrazka. Obrazki powinny być wyświetlane na stronach. Ewentualnie same miniaturki, a po kliknięciu na miniaturkę pojawia się reszta informacji. Bo teraz przy większej liczbie obrazów strona będzie się trochę długo ładowała, i w ogóle bezie długa. Nowe obrazki powinny być dodawane na dole, i powinna być blokada przed samooceną. A strona się rozjeżdża pod IE (ahh te layouty by Dawidds :D). PS: Pisałem przed chwilą post i.... nie było go. Nawet nie wiem, dlaczego :P Może zapomniałem kliknąć "Dodaj odpowiedź"...? Wątpię. Ale drugi raz mi się dzisiaj coś takiego zdarzyło...
  15. Poziom tego tematu spada z każdą stroną... A przeklinać tu można :P ? I wyzywać userów :P ?
  16. Dawidds

    Widok MMORPG

    Jedyne, co jest fajne w Tibii to interfejs, oraz grafika niektórych itemków. 1, naturalnie.
  17. Podgląda nasze PM'y... :P PS: Jak jesteśmy tacy drodzy to się może doczekamy ikonki uploadera i wywalenia gwiazdek (ew. 10-stopniową skalę) :D ? Edit: Jeszcze jedno: Ja mam szybką odpowiedź Czyli to profil.
  18. Byłoby, było. DLL by ci powiedział jaki jest dany pixel bezpośrednio z obrazka. A nie, że najpierw dodajesz sprite, surface, i dopiero z surface'a pobierasz kolor. I to jest, cholera, nieprawda. Plik tekstowy ważyłby dużo mniej, a i ładowałby się nieporównywalnie szybko. Dawałby tez większe możliwości, np. ustawianie "własnego" Creation Code obiektów. No i łatwiej by było zabezpieczyć taki plik tekstowy... Jedyną zaletą tego rozwiązania jest to, że, jak już powiedziałem, user może sobie w łatwy sposób tworzyć własne levele. Jedynie informujesz go, jaki pixel oznacza jaki obiekt. I nie musisz nawet pisać edytora leveli. Każdemu Paint wystarczy...
  19. Dawidds

    wymagania sprzętowe

    Dokładnie się nie da. Po to też są betatesty gry, aby sprawdzić, na jakim kompie dobrze działa, a na jakim nie. W ogóle po kij do amatorskiej produkcji wymagania... chyba dla bajeru...
  20. LOL...? Dopiero co napisałem tutaj posta '-.- Dziwne... Ja chciałem napisać, że to ładownie w sumie nie ma zalet :P Jest mniej wydajne niż ładowanie z pliku tekstowego, a i pliki więcej ważą. Zaletą jest niekonieczność tworzenia edytora: w sumie każdemu wystarczy Paint i tylko wskazać mu, jaki kolor co oznacza. Ale sposób ciekawy :)
  21. Dawidds

    Historyjka

    Programista wywiercił dziurę w jajku swojego PS: Wiem, że ten temat był. Ale to co :P
  22. Z początku chciałem 2 wstawić, ale zmiana broni i tworzenie ziomków to plusik :P 3/5. Fizyka ciał ziomków jest niby fajna, ale niewydajna. Stworzyłem masę ziomków, walnąłęm w nich bazooką, i fps spadł do 14 :| A ich fizyka tandetna jest. Walnę bazooką prosto w gościa. I... odrzuca go w moją stronę. Kij baseballowy trochę za mocny. Stworzyłem setkę gości i zacząłem kręcić myszą kółeczka wokół bohatera. I żaden gościu nawet mnie nie dotknął :P
  23. Mam pytanie. Ten drugi screen to co to jest? Stara grafika? Czy inny level? TuxMan: Sam jesteś słaby. Co do grafiki, to trochę mocniejsze cieniowanie by się przydało. Na trawie, na sianku i ewentualnie na krawędziach tej ziemii :P
  24. Dawidds

    Historyjka

    Programista wywiercił
  25. Takie se. AI ziomków powala, raz nawet jeden utknął pod drzewem i zaczął się kręcić w kółko. Apropo drzew, to one nie mają pni. Robale głupio się odradzają, choć z drugiej strony, to nawet fanie bo można więcej powalczyć :P Ale jakby się chociaż odradzały tam, gdzie ich nie widać, tzn. są za viewem. Ogólnie nie jest źle, ale dodatkowy minus za użycie przykładu w przykładzie. Bo to jest trochę bez sensu :P 3/5.
×
×
  • Dodaj nową pozycję...