NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Honza
Člen
Avatar
Honza:13.4.2015 13:03

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ý
Tvůrce
Avatar
Odpovídá na Honza
Jan Vargovský:13.4.2015 20:42

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í
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
13.4.2015 20:42
Avatar
Honza
Člen
Avatar
Honza:15.4.2015 11:36

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:15.4.2015 12:47

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...:15.4.2015 13:31

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
Odpovídá na Honza
Neaktivní uživatel:15.4.2015 14:59

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
Neaktivní uživatelský účet
Avatar
Patrik Valkovič:15.4.2015 20:52

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:15.4.2015 21:01

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.