Avatar
Honza
Člen
Avatar
Honza:

Dobrý den,
jsem v druhém ročníku SPŠ a studuji obor Informační technologie. Tento školní rok jsme začali programovat v C# ve Visual studiu 2013. Ke konci roku máme vytvořit hru/aplikaci a mé téma je Pac-man. Chtěl bych se zeptat na pár věcí.
Jako první, jak nejlépe udělat kolize? Původně jsem chtěl akorát vykreslit z obdélníků bludiště pro Pac-mana a pro každý obdélník udělat zvlášť kolizi pomocí ifů, tak mě napadlo, zda není nějaký snazší způsob?
Dále bych se chtěl zeptat jak udělat animaci pro Pac-mana (aby otvíral a zavíral pusu a měnil směr, kterým se kouká).
Postačí mi klidně nějaký odkaz s článkem, kde je daná problematika vysvětlena.
Děkuji za všechny rady a odpovědi.

 
Odpovědět 13.4.2015 13:03
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Honza
Jan Vargovský:

Kolize jde řešit skrz Rectangle.Inter­sectsWith(...)
Animaci můžeš udělat tak, že tam budeš mít nějaký stav a podle toho budeš měnit obrázek. Stav můžeš uchovávat jako normální číslo. A při každém vykreslení se ti inkrementuje stav. Stav si můžeš uchovávat v nějakém enumu, který budeš měnit podle toho, kde si zrovna zmáčkl klávesu (WSAD).

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 13.4.2015 20:42
Avatar
Honza
Člen
Avatar
Honza:

Ok, díky moc za rady :)
A mohl bych se ještě zeptat, chci udělat opravdu jednoduchou UI pro duchy, kteří by chodili po bludišti. Napadlo mě, že pokud by došel duch na souřadnice rozcestí v bludišti, vygenerovalo by se náhodné číslo a podle něj by se určil směr (přes switch nebo if), kterým se duch vydá. Je to dobré řešení, nebo existuje nějaký jiný způsob?

 
Nahoru Odpovědět 15.4.2015 11:36
Avatar
dirtyjobs
Člen
Avatar
Odpovídá na Honza
dirtyjobs:

Myslím si, že to je dobré řešení a nedokážu si představit, že by to šlo udělat jinak, možná na to někde existuje nějaká funkce, ale ta by to stejně řešila skrze náhodná čísla.

 
Nahoru Odpovědět 15.4.2015 12:47
Avatar
fik...
Člen
Avatar
Odpovídá na Honza
fik...:

Kdybys to chtěl udělat trochu složitěji, doporučuji přečíst tento článek: http://www.itnetwork.cz/…y-v-bludisti

 
Nahoru Odpovědět 15.4.2015 13:31
Avatar
David Hanina
Člen
Avatar
Odpovídá na Honza
David Hanina:

Určitě by měl postačit, animaci bych nejspíš udělal pomocí timeru a kolizi asi pomocí ifů v poli...

 
Nahoru Odpovědět 15.4.2015 14:59
Avatar
patrik.valkovic
Šéfredaktor
Avatar
patrik.valkovic:

Pár informací:
1 - Animace se tvoří pomocí spritů. jsou to samostatné obrázky, které když zaskládáš v rychlém sledu za sebe utvoří animaci. Například http://www.freewebs.com/…0Sprites.bmp To, jak často budeš obrázky dělat závisí na tobě (zpravidla se to řeší přes stav, ve kterém je, jak je popsáno výše).
2 - Kolize se řeší analytickou geometrií. Pacman bude reprezentovaný kružnicí, stěny obdelníky. Projdeš všechny stěny, zjistíš jestli se protíná kružnice Pacmana s obdelníkem stěny a pokud ano, řekneš co se má stát. Podobně to platí s duchy.
3 - Game loop. Jedná se prakticky o nekonečnou smyčku, ve které vlastní hra probíhá. Skládá se ze dvou základních bloků - Update a Render (nebo jakkoliv si je pojmenuješ). V prvním bloku aktualizuješ scénu (zachycení vstupu od uživatele a reagování na něj, posun Pacmana a duchů, výpočet kolizí) a ve druhém se scéna vykreslí. Takhle to jede do nekonečna. http://gameprogrammingpatterns.com/game-loop.html
4 - Pohyb duchů. Konkrétně v Pacmanovi jsou duchové individuální (každý má vlastní AI). Více se o tom dočteš tady: http://gameinternals.com/…ost-behavior
http://programujte.com/…-man-cast-2/

Nahoru Odpovědět 15.4.2015 20:52
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Honza
Člen
Avatar
Honza:

Díky, Patriku, za podobné vysvětlení. Určitě si to prostuduji. To, že duchové v Pac-manovi mají každý jiné chování, již vím, avšak teprve s C# začínám, proto si nejspíše bude stačit něco jednoduššího.

 
Nahoru Odpovědět 15.4.2015 21:01
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.