Skocz do zawartości

Exigo

Użytkownicy
  • Postów

    1 165
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez Exigo

  1. System zunifikowanych komponentów (silnik; hull; uzbrojenie) z których można składać statki kosmiczne oraz (równolegle) "cover system" do tds-ów. W obydwu przypadkach by się przydało to o co pytam. Obiektowość w GM bardzo utrudnia sprawę. @EDIT: Słuchajcie, mam jeszcze jedno pytanie, bardzo podobne. Otóż czy da się utworzoną instancję zduplikować? Załóżmy że tworzymy "pustą" definicję obiektu, bez żadnych eventów. Potem tworzymy jego instancję, której dajemy jakąś zmienną. Potem taką instancję jakimś magicznym sposobem kopiujemy tak, że utworzona instancja zawiera w sobie zmienną poprzedniej. Generalnie szukam sposobu który nie będzie wymagał execute_stringów wywoływanych za pomocą funkcji w.w. "object_event_add". @EDIT: Dobra, jednak wystarczyło poszukać w dokumentacji, jak zwykle. :)
  2. Czy da się dynamicznie utworzyć definicję obiektu (funkcją obj = object_add();) nadając mu wartość w taki sposób, aby utworzone instancje na jego podstawie otrzymywały tą wartość z automatu? Coś a la dziedziczenie. Kod, który nie ma prawa zadziałać, ale w pewnym sensie zobrazuje to, co mam na myśli: GML obj = object_add(); obj.wartosc = 1; test = instance_create(obj); show_message(test.wartosc);
  3. Exigo

    Galeria Grafik

    Nie pamiętam czasu kiedy cokolwiek graficzyłem. Ostatnio albo gram, albo uczę się do matury. Naszło mnie wczoraj wieczorem na coś takiego.
  4. Mapy stały się faktycznie przydatne. Wszystko działa. Dzięki za pomoc z waszej strony. :) Poniżej załączam treść klasy trzymającej to wszystko dla potomnych. (jak ktoś czuje się na siłach w języku, może spróbować się doszukać jakichś brzydkich linii/prostszych rozwiązań, wszyscy się czegoś nauczą) gfx_manager.hpp GML #ifndef GFX_MANAGER_H #define GFX_MANAGER_H #include "pugixml.hpp" // Klasa class CGfxManager { private: class CGfx { public: sf::Vector2i Pos; int SpriteId; float Dir; float Scale; }; class CGfxDef { public: int Id; std::string Filename; sf::Texture Tex; sf::Vector2f Off; }; typedef std::map <int, CGfxDef> MGfxDefT; typedef std::vector <CGfx> VGfxT; MGfxDefT::iterator Cursor; MGfxDefT MGfxDef; CGfxDef GfxDefNode; VGfxT VGfx; CGfx GfxNode; pugi::xml_document doc; pugi::xml_node node; public: void LoadGfxDefinitions(std::string file); void LoadGfx(std::string file); void DrawGfx(sf::RenderTexture& TargetTex); }; // Wczytywanie definicji grafik z pliku XML void CGfxManager::LoadGfxDefinitions(std::string file) { doc.load_file(file.c_str()); printf("Wczytywanie GfxDef, %s \n", file.c_str()); for (node = doc.child("GfxDef"); node; node = node.next_sibling("GfxDef")) { GfxDefNode.Id = StrToInt(node.attribute("id").value()); GfxDefNode.Filename = node.attribute("filename").value(); GfxDefNode.Off.x = StrToInt(node.attribute("offx").value()); GfxDefNode.Off.y = StrToInt(node.attribute("offx").value()); GfxDefNode.Tex.loadFromFile(GfxDefNode.Filename); GfxDefNode.Tex.setSmooth(true); printf(" %i %s \n", GfxDefNode.Id, GfxDefNode.Filename.c_str()); MGfxDef.insert(std::make_pair(GfxDefNode.Id, GfxDefNode)); } } // Wczytywanie grafik z pliku XML void CGfxManager::LoadGfx(std::string file) { doc.load_file(file.c_str()); printf("Wczytywanie Gfx, %s \n", file.c_str()); for (node = doc.child("Gfx"); node; node = node.next_sibling("Gfx")) { GfxNode.SpriteId = StrToInt(node.attribute("sprid").value()); GfxNode.Pos.x = StrToInt(node.attribute("x").value()); GfxNode.Pos.y = StrToInt(node.attribute("y").value()); GfxNode.Dir = StrToInt(node.attribute("dir").value()); GfxNode.Scale = StrToInt(node.attribute("scale").value()); printf(" %i (%i, %i) \n", GfxNode.SpriteId, GfxNode.Pos.x, GfxNode.Pos.y); VGfx.push_back(GfxNode); } } // Funkcja rysujaca grafiki do danego RenderTexture void CGfxManager::DrawGfx(sf::RenderTexture& TargetTex) { MGfxDefT::iterator Cursor; for (VGfxT::const_iterator i = VGfx.begin(); i != VGfx.end(); ++i) { int id = i->SpriteId; Cursor = MGfxDef.find(id); CGfxDef Handle = (*Cursor).second; sf::Sprite SprNode; SprNode.setTexture(Handle.Tex); SprNode.setPosition(i->Pos.x, i->Pos.y); SprNode.setOrigin(Handle.Off.x, Handle.Off.y); SprNode.setRotation(i->Dir); SprNode.setScale(i->Scale, i->Scale); TargetTex.draw(SprNode); } } #endif
  5. Wszystko zaczyna się od wczytania tego wszystkiego z pliku XML. Treść wygląda mniej-więcej tak: Pomysł jest taki, że mam dwie klasy: pierwszą, definicję tekstury (GfxDef), drugą (MapGfx), jej instancji na mapie. Przy tworzeniu w każdej definicji dodaję sf:Texture z odpowiednio wczytanego pliku, plus offset i inne pierdoły oby dodane w przyszłości. Jak teraz to wszystko podłączyć, aby instancje rysowały tekstury pobrane z definicji? To co dotychczas wymyśliłem, to trzymanie obydwu klas na oddzielnych, wielkich wektorach. Kod wczytywania: Generalnie nie wiem czy trzymanie tego w wektorach jest dobrym pomysłem. Nie wiem też jak to wszystko połączyć (jak powyżej opisałem). Ogólnie, to mało wiem, więc proszę o wyrozumiałość. :) Będę wdzięczny za jakąkolwiek pomoc w ogarnięciu tematu.
  6. Exigo

    Galeria Grafik

    Minimum 3. Mało jest silników obsługujących quady lub liczniejsze polygony (takie modele mniej ważą). W takim przypadku (np. w trakcie wczytywania) i tak jest dzielony na trójkąty. Takie wielo-polygony, głównie quady, używa się np. modelując obiekty typu hard surface ze względu na ładne dostosowanie się do siatki modyfikatora wygładzania.
  7. Exigo

    Galeria Grafik

    Bo to prawda. :) Tzn. na pewno nie jakiejś rośliny, ale przykładowo głównego bohatera, jak najbardziej. I to spokojnie sprzed paru lat, przekraczając kilkukrotnie podaną przez ciebie granicę. Poniżej wykaz dla ciekawych: http://forum.lowpolyworkshop.com/topic/9130085/1/
  8. Exigo

    Galeria Grafik

    Jak trzymasz się retro (patrz: low poly), to może użyj techniki pixelart na teksturach o trochę większym nasyceniu kolorów?
  9. Hej. Dostałem serię zadań, z czego dwa posiadają treść nic nie mówiącą. W większości przypadków jest opisana implementacja, te zaś pozostają zagadką. Żadnych źródeł czy wskazówek. Oto one: Przychodzą komuś do głowy jakieś słowa-klucze, metody? Będę wdzięczny za wszelkie pomysły. :) (z początku myślałem że chodzi o otoczkę Grahama, lecz ta odpada ponieważ jest to zawarta w dalszych zadaniach)
  10. Kod tworzy tablicę win_tab, zwracam controla z tego o nazwie tab, i przypisuje do niego buttony do poszczególnych zakładek. Standardowa procedura. Powinno mi przy przełączaniu między nimi chować button z poprzedniej i pokazywać tego którego zakładkę wybrałem, ale tak się nie dzieje. Na starcie (po utworzeniu okienka) dostaję dwa na raz (i to nie jest wynikiem niepoprawnego rysowania, bo mogę na nie spokojnie klikać uzyskując odpowiedź). GML win_tab = API_Tab_Create(win, 5, _y, bw, win_h - _y - 30, 0, 0); tab = API_Control_GetHandle(win_tab); API_Tab_InsertItem(win_tab, 0, "Render"); API_Tab_InsertItem(win_tab, 1, "Grid"); API_Control_SetAutoTab(0); _g = API_Button_Create(tab, 10, _y + 25, 70, 20, BS_NOTIFY, 0); API_Control_SetText(_g, "a1 (render)"); API_Control_SetAutoTab(1); _g = API_Button_Create(tab, 10, _y + 25 + 20, 70, 20, BS_NOTIFY, 0); API_Control_SetText(_g, "a2 (grid)"); Nie mam zielonego pojęcia co robię źle. Jakieś rozwiązanie? :) EDIT: Dobra, już odkryłem. Głupie niedopatrzenie. Po deklaracji okna trzeba dodać kontrolkę odbierającą akcje: GML API_Check_Set(1, win); Mam nadzieję że komuś to pomoże w przyszłości.
  11. Może sprawdź jak zachowa się to: GML return ((((argument0 - argument1) mod 360) + 540) mod 360) - 180; Ten skrypt ("roznica") zwróci ci różnicę dwóch kątów. GML strzalka_dir += roznica(cel_dir, strzalka_dir ) * .05;
  12. Uff. Tak na przyszłość, gdyby ktoś napotkał podobny problem: ep_world_get_collision_body(world, index); gdzie: world_id: The id of the world. index: The index of the collision (0 is the first index). The collision functions will return the number of collisions found. Należy wywołać ją po teście, i zwróci ciało ostatniej kolizji. Btw. dzięki Huder za fatygę. :)
  13. Od razu zaznaczę że chodzi tu o znajomość Extreme Physics (takiego rozszerzenia z fizyką, btw.). Otóż wygląda to tak: Wszystkie funkcje z rodziny ep_world_collision_test_line, box, etc. zwracają tylko bool'a mówiącego o występowaniu kolizji w teście. Teraz chciałbym dobrać się do pozycji tego testu która zwróciła pozytywną wartość. Nie idzie znaleźć żadnej funkcji pozwalającej na to, a przecież wydaje się logiczne, że dostęp do tych danych powinien być na wyciągnięcie ręki. Miał ktoś kontakt z tą biblioteką i jest w stanie zasugerować jakieś rozwiązanie? :)
  14. Tak to jest jak się robi interpreter w interpreterze. Nielogicznie. Szczególnie jeśli jedna z najważniejszych (interpretowanych) funkcji (już wielokrotnie wspomniana) każdego interpretera jest taka, jaka jest.
  15. Nie mam studio, a obiekty są tworzone dynamicznie. :) Problem w tym że mam prosty interpreter który tworzy obiekty na podstawie treści plików zewnętrznych. W skład nich (pomijając samodzielne obiekty jak roślinka, czy coś w tym stylu) wchodzą wyjątki takie jak ciała fizyczne oparte na extreme physics - które z drugiej muszą mieć możliwość połączenia się jointami, czy innymi duperelami. W zasadzie do czegoś takiego byłby idealny execute_string, ale to od razu wykreśliłem (brak wsparcia, gra się może wysypać nie wiadomo czemu). Widocznie muszę zrobić, jak edie wspomniał, uber-listę tłumaczącą prawdziwe indeksy na te abstrakcyjne. Jest do zrobienia, tylko się trzeba nakombinować. Dlatego też fajnie byłoby jak by istniała jakaś prostsza alternatywa.
  16. Jest to w ogóle osiągalne? Mam na myśli coś w stylu test.id = 100123;
  17. Podzielam zdanie Threef-a. Zresztą, wystarczy spojrzeć na wyniki ankiety. Co do mnie, deklaruję swoją obecność i każdy weekend pasuje. Chyba że stanie się coś naprawdę nadzwyczajnego.
  18. Exigo

    Galeria Grafik

    Poszedłem za ciosem, i w wolnym czasie skończyłem. Exp gained: pierwszy model z "ręcznie" zrobioną teksturą (reszta prac to był zwyczajnie wypalony polypainting, na tym kończąc). liczbowo 2074 polygons/2664 edges/1592 vertices. Źle zrobiłem pakując masę trójkątów w czaszkę (stąd te duże liczby). Aż wstyd pokazać siatkę. Poniosło mnie. ; ) tekstury to diffuse, normalmap, specular po 512 i emissive z 256. Było przy tym dużo zabawy. :) @Edit: A, myślę że Miecz Kościanego Króla będzie pasować. ;)
  19. Exigo

    Galeria Grafik

    Teraz w trochę innym stylu.
  20. Exigo

    Galeria Grafik

    Wczoraj do późna zrobiłem sobie taki oto maraton. Bardzo luźna interpretacja hełmu z conceptu Adama Adamowicza (rip), w (ponownie) skyrimowych klimatach. Tylko że tym razem przeleciałem cały workflow (jupi!). 1,6k trisów, 3 tekstury diff, spec, normal po 512x512. Widok realtime. (hd https://gmclan.org/uploader/3290/smoczy_hel...e_finish_hd.jpg) (btw. zna się ktoś na modowaniu TES:Skyrim?) Na toporku się zatrzymałem kiedy doszedłem do retopologii demona na głowicy. Odpuściłem sobię, po prostu masakra. Na przyszłość trzeba unikać modeli z "dziurami" o skomplikowanym detalu. @Huder, ww. powód nie pozwala. Może być ten hełm?
  21. Exigo

    Galeria Grafik

    Prawdopodobnie jeszcze nie widziałeś skyrimowego uzbrojenia. Tam dopiero są wypierdki, szczególnie z grupy "starożytne", czy niektóre artefakty. Niepraktycznie wyglądające. Mniejsza z tym. Generalnie na tym klimacie się wzorowałem. Ale ok, absolutnie cię rozumiem, dlatego też postaram się następnym razem opanować z frędzlami. I tak nic nie powstrzyma mnie przed ukończeniem tego axe-a. ; ) Po za tym niezmiernie ci dziękuje za wysiłek włożony w treść posta, co jest rzadkością w tym temacie jak coś wrzucam. Plus. ; D @Edit: Btw. faktycznie, krew zalewa próbując zrobić sensowną topologję z tymi wywijasami. - Tak z technicznej strony.
  22. Exigo

    Galeria Grafik

    Proszę, rozwiń. Konstruktywna krytyka, wartość merytoryczna - wiesz o co chodzi. (Chodzi o strukturę czy kolor? Z pierwszym będzie problem bo zacząłem już robić z tego trójkąty. Teksturę można poprawić.)
  23. Exigo

    Galeria Grafik

    A jednak nie zapomniałem. ^^ @raperr. Faktycznie, drzewa wyglądają jak makiety. Cień rozwiązał by problem. Reszta jest super, lubię te piksele.
  24. Exigo

    Galeria Grafik

    Dzisiejsza sesja zbrush z playlistą growych soundtracków high fantasy. Po paru h. Jak jutro nie zapomnę, zrobię polypainting. Przy odrobinie szczęścia wykonam l-poly i wypalę wszystkie mapki. Jeśli natomiast stanie się cud wrzucę to do jakiegoś skyrima, czy coś w tym stylu. Btw. zna się ktoś na w.w. modowaniu?
×
×
  • Dodaj nową pozycję...