tBane Temat założony przez niniejszego użytkownika |
» 2024-08-23 20:33:00 Zarządzać nimi. Nie mam pomysłu jak oprogramować. Na razie zrobiłem: -wyświetlanie budynków (podłogi) -dodawanie obiektów budynków do głównych list obiektów w celu ich przetwarzania (żeby poprawnie je renderować z indeksem z) np. walls, furnitures etc. -usuwanie budynków na PPM w edytorze map (usuwanie budynku wraz z jego obiektami)
-Nie wiem jak zrobić dodawanie budynków w mapEdytorze - na chwilę obecną robię to ręcznie pisząc w skrypcie mapy -Nie wiem jak przetwarzać skrzynie w budynkach - furniture-inventory ( na chwilę obecną wklepałem kod dla każdej skrzyni przypisuje to samo inventory). Może kolejny plik *.txt ze skryptem ? -Nie wiem jak rysować sprajta na budynku gdy jesteśmy poza nim -Nie wiem jak przetwarzać drzwi od budynku - otwarcie/zamknięcie/przechodzenie przez nie |
|
pekfos |
» 2024-08-23 21:20:18 Czy to nie jest przesadna komplikacja traktować budynek jako obiekt? Dodawanie budynków edytorem wydaje się łatwe tylko gdy planujesz wielokrotnie używać tego samego budynku. Jeśli i tak każdy budynek chcesz projektować ręcznie, to równie dobrze możesz go wrysować w samą mapę. Gracz nigdy nie dowie się czy pod budynkiem jest trawa, czy nie. -Nie wiem jak rysować sprajta na budynku gdy jesteśmy poza nim Skoro masz budynek jako osobny byt, to wiesz czy gracz jest w budynku. Jeżeli nie jesteś, możesz zamiast (albo na wierzchu) budynku możesz wyświetlić inną mapę kafelkową (skoro masz "floors", to może "roof"?) Zrobiłbym to mapą kafelkową bo chcesz użyć tych samych grafik żeby budynek w środku nie wyglądał zupełnie inaczej niż na zewnątrz, jak w tym gifie który podałeś. -Nie wiem jak przetwarzać drzwi od budynku - otwarcie/zamknięcie/przechodzenie przez nie Obiekt na którym możesz wykonać interakcję (jak na skrzyni), co by przełączało go między stanem otwartym i zamkniętym. Zamknięte drzwi mają kolizję, a otwarte nie. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-08-25 18:16:19 Skoro masz budynek jako osobny byt, to wiesz czy gracz jest w budynku. Jeżeli nie jesteś, możesz zamiast (albo na wierzchu) budynku możesz wyświetlić inną mapę kafelkową (skoro masz "floors", to może "roof"?) Zrobiłbym to mapą kafelkową bo chcesz użyć tych samych grafik żeby budynek w środku nie wyglądał zupełnie inaczej niż na zewnątrz, jak w tym gifie który podałeś. Zrobione. Tylko ja będę wyświetlał gotowe już sprite'y. Tak będzie wygodniej choć więcej pracy z grafiką, no ale wtedy budynki mogą różnorodniej wyglądać. Obiekt na którym możesz wykonać interakcję (jak na skrzyni), co by przełączało go między stanem otwartym i zamkniętym. Zamknięte drzwi mają kolizję, a otwarte nie. Zaczynam pracę nad tym. Dodam nową listę obiektów i będę je dodatkowo przetwarzał _doors. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-08-27 13:19:30 Dodałem jakoś te drzwi, ale nie wygląda to tak jak powinno i w dodatku blokują gracza podczas zamykania xD bool interactionsWithDoors() { float x1, y1, rx1, ry1; float x2, y2, rx2, ry2; x1 = player->position.x; y1 = player->position.y; rx1 =( player->collider->width / 2.0f + player->actionRange ); ry1 =( player->collider->length + player->actionRange ) / 2.0f; for( auto & door: doors ) { x2 = door->position.x; y2 = door->position.y; rx2 = door->collider->width; ry2 = door->collider->length; if( intersectionRectangleWithElipse( x2, y2, rx2, ry2, x1, y1, rx1, ry1 ) ) { if( door->state == doorState::open ) { door->close(); return true; } if( door->state == doorState::close ) { door->open(); return true; } } } return false; }
|
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-08-27 14:05:33 Udało się ! :D bool playerNextTo() { float x1, y1, rx1, ry1; float x2, y2, rx2, ry2; float x3, y3, rx3, ry3; x1 = player->position.x; y1 = player->position.y; rx1 =( player->collider->width / 2.0f + player->actionRange ); ry1 =( player->collider->length + player->actionRange ) / 2.0f; x3 = player->position.x; y3 = player->position.y; rx3 =( player->collider->width / 2.0f ); ry3 =( player->collider->length / 2.0f ); x2 = position.x; y2 = position.y; rx2 = collider->width; ry2 = collider->length; if( intersectionRectangleWithElipse( x2, y2, rx2, ry2, x1, y1, rx1, ry1 ) && !intersectionRectangleWithElipse( x2, y2, rx2, ry2, x3, y3, rx3, ry3 ) ) return true; else return false; }
void update( float dt ) { takeItSprite.setPosition( position.x, position.y - 50 ); ( playerNextTo() ) ? showHand = true : showHand = false; if( state == doorState::opening ) { if(( currentTime - startActionTime ).asSeconds() > 0.5f ) { state = doorState::open; collisioning = false; } } if( state == doorState::closing ) { if(( currentTime - startActionTime ).asSeconds() > 0.5f ) { state = doorState::close; } } }
|
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-08-30 19:21:35 Jednak ta mechanika ma pewne wady tzn. gdy gracz jest poza budynkiem to dach tego budynku zasłania pewne elementy. Gdy zaś gracz jest wewnątrz tego budynku, to dach nie jest wyświetlany i psuje to efekt "zasłaniania" przez budynek innych obiektów. Macie jakiś pomysł jak to naprawić ? https://youtu.be/vA542073-Ok?si=tkfZLfiZcZ3xtXpE |
|
pekfos |
» 2024-08-30 21:18:19 To czemu ten budynek z zewnątrz wygląda jakby miał 2 piętra? Człowiek i drzewo do skali masz zaraz obok. Ten dach nie powinien być większym problemem niż drzewo. Gdy zaś gracz jest wewnątrz tego budynku, to dach nie jest wyświetlany i psuje to efekt "zasłaniania" przez budynek innych obiektów. Skoro pokazujesz wnętrze, to wewnątrz powinien być dodatkowy trójkąt ściany który podpiera ten dwuspadowy dach. Możesz pokazać to i wtedy niczego nie odsłaniasz. Alternatywnie: będąc w budynku zasłoń na czarno wszystko co jest poza budynkiem. Wyświetlasz dach bo gracz nie widzi przez ściany - to działa w dwie strony normalnie. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-08-30 23:17:49 Teraz mam dwie opcje zasłaniania. Pierwsza polega na zasłonięciu obiektów poprzez renderowanie czterech czarnych prostokątów po jednym dla każdego z kierunków (górny, dolny, lewy, prawy). Druga to nie renderowanie obiektów nie należących do budynku, ale za każdym razem dla każdego z takich obiektów musiałbym sprawdzić czy ten obiekt należy do budynku co daje O(n^2). Chyba wybiorę pierwszą opcję. |
|
1 « 2 » 3 |