Dobrý den,
vytvářít 2D "hru" na Windows, tedy spíše se učím ji tvořit. Ztroskotal jsem ale u gravitace a překážek. Jistě umím udělat čtvereček nebo obrázek ale jakmile by se s daným objektem srazil měl by se zastavit.
Nevíte jak na to?
Dobrý den,
vytvářít 2D "hru" na Windows, tedy spíše se učím ji tvořit. Ztroskotal jsem ale u gravitace a překážek. Jistě umím udělat čtvereček nebo obrázek ale jakmile by se s daným objektem srazil měl by se zastavit.
Nevíte jak na to?
bude to chtit kolizni system.. neco jako prolezeni pres vsechny objekty (nebo jen objekty pobliz danne pozice) a predat ten padajici objekt, aby se dalo porovnat jestli nenastala kolize... to jak je implementovana pak zalezi na tom, jakou presnost kolize chces... sou rychly ze se jen tak nejak odhadne dejme tomu podle stredu a nejake prumerne vzdalenosti hranice objektu a nebo sou presnejsi.. (chtelo by to mrknout na google na detekci kolizi a jak se provadi)
Ahoj,
tomu "propadávání" se říká kolize. Zkus zapátrat na internetu a určitě najdeš plno materiálů jak na to.
Ve výsledku jde o to, že kontroluješ, jestli lze pohybující se "čtvereček" umístit na danou pozici, tedy jestli již na dané pozici něco není.
Složitost a náročnost se odvíjí od toho, co vlastně děláš. Pokud budeš mít jednoduchou hru typu hledání min nebo tetris, tak to lze řešit pomocí pole (nebo spíše dvourozměrného pole). U náročnějších se jednotlivé prvky obalují právě třeba čtverečkem nebo jiným zjednodušeným obrazcem a kontroluješ, jestli nedošlo k průniku.
Evžen
Jaky navody? Chces byt programator? Nebo patlal?
Najdes jak to funguje a naprogramujes to - neni potreba navod: tady napiste i : integer, tady udelejte takovouhle metodu .. takhle si ulozte objekty do pole, tady mate for jak si to cely pekne projit a otestovat jestli nedoslo s aktualnim objektem ke kolizi ... takovehle styl uceni je stejnej jako zadny uceni... (pripadne jako patlani v jave)
#6 KIIV
Nehledám takovýto styl, přesto přece nevím o všech funkcích, které je na to potřeba. Stále jsem začátečník, a jako začátečník mám prostě s tímto problém.
tak zkus nastudovat, napis sem analyzu problemu a navrh reseni ktere pouzijes (pripadne co si nepochopil) - aspon se seznamis s necim ve stylu produkcniho programovani :D (+ jako bonus nahodit odhad casove narocnosti - coz ze zacatku je vetsinou hodne divoke)
#8 KIIV
Dobrá tedy...
Vytvořit jsem (jak už jsem říkal) timer, který každých 25 milisekund posune hráče o Top+10 a Left+10 (vítr). Napadlo mně, že to celé dám do podmínky podle toho, jestli hráč koliduje se zemí a ostatními pevnými prvky.
Jenže nevím, jak by měla fungovat funkce na zjištění toho, jestli hráč se zemí koliduje, nebo ne.
no to bys mel teoreticky nastudovat jak sem zminoval .. (napriklad seznam pevnych objektu a u kazdeho metodu na zjisteni kolize a jen to projet - ted uz jen zalezi na tvarech - jak zjistovat ty kolize )
Máš svého hráče, který je pro jednoduchost buď bod nebo obdélník. A dále máš překážku, která bude obdélník. Kolizi bodu s obdélníkem otestuješ funkcí PtInRect. Kolizi obdélník vs. obdélník otestuješ podmínkou:
if ((hrac.right >= zarazka.left) AND (hrac.left <= zarazka.right) AND (hrac.bottom >= zarazka.top) AND (hrac.top <= zarazka.bottom)) then
#16 Yohaku
pozici prave a dolni strany ziskas i sloucenim left a width a top a height objektu.
takze jak pise liborb:
if (((hrac.left + hrac.width) >= zarazka.left) and((hrac.top + hrac.height) >= zarazka.top) and ...
a podobne ...
mozna pro prehlednost muzes vytvorit promenne .. hracvpravo,hracvlevo,hracnahore, hracdole .. pri zmene pozice prepises promenne.
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku