![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 316 Pomógł: 36 Dołączył: 2.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
Czy ma ktoś jakiś pomysł na generyczną metodę wykrywania czy dwa obiekty na canvas się stykają? Jak na razie to do głowy przyszło mi tylko jedno raczej niezadowalające rozwiązanie - sprawdzanie wzdłuż krawędzi, które zawodzi jednak kiedy obiekt nie jest prostokątem - np. ma kształt litery "z". Robię to tak:
Chciałbym uniknąć tworzenia kształtów z kolejnych prostokątów i testowania każdego z tych składowych, czy nie styka się z innym. Każda rada mile widziana (IMG:style_emoticons/default/smile.gif) . Ten post edytował 230005 25.05.2010, 23:26:21 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 697 Pomógł: 47 Dołączył: 19.12.2003 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem do jakich celów tego potrzebujesz. Najlepiej to rozwiązać od strony matematycznej(tj. nie sprawdzać kształtów już wyświetlonych ale analizować ich wzory matematyczne). Zawsze możesz również sprawdzać piksel po pikselu oba kształty.
Ten post edytował SHiP 26.05.2010, 11:30:38 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 316 Pomógł: 36 Dołączył: 2.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
Nie za bardzo rozumiem z tymi wzorami matematycznymi, albo może ty nie do końca mnie zrozumiałeś (IMG:style_emoticons/default/winksmiley.jpg) . W każdym razie postaram się rozjaśnić sprawę. Piszę Tetrisa :]. Potrzebuję wiedzieć kiedy kształt można przesunąć, a kiedy nie, np mam ustawiony jeden prostokąt i aktualnie przesuwam np. kształtem T. Muszę wiedzieć, czy "daszek" litery T nie styka się z już ustawionym prostokątem. Może być też tak, że daszek będzie nad górną krawędzią prostokąta, ale pozostała część kształtu będzie na styku - wtedy figura nie może się przesuwać (w stronę prostokąta). Obecnie robię to w taki sposób, że np. T składam z dwóch prostokątów i sprawdzam czy żaden z nich nie styka się z inną figurą. To rozwiązanie mnie jednak nie zadowala, bo dla każdej figury testowanie kolizji wygląda nieco inaczej, tak samo rotacja.
Ten post edytował 230005 26.05.2010, 12:06:58 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 697 Pomógł: 47 Dołączył: 19.12.2003 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
No to musisz wiedzieć, że w przypadku gier nie powinno się takich operacji wykonywać na grafice, bo jest to nieoptymalne.
Przechowuj aktualny stan mapy coś w stylu Kod 000000000000 000000000000 000000000000 000000000000 100000000000 110110110001 111011110010 1- zajęte pole 0 - puste pole I teraz w przypadku próby obrotu, nie sprawdzasz figur a jedynie to czy na mapie jest wolne miejsce aby przekręcić klocek w aktualnej pozycji. Jeśli jest, przekręcasz. Pozdrawiam |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 316 Pomógł: 36 Dołączył: 2.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
No dobra, spróbuję coś takiego zaimplementować, ale wciąż wygląda na to, że dla każdej figury test będzie wyglądał inaczej...
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 6.10.2025 - 07:33 |