Diskuze: Střelba (tank)

Ostatní jazyky GameMaker GameMaker Střelba (tank)

Avatar
steflpatrik
Člen
Avatar
steflpatrik:

čauky, mam vytvořený tank, který se pohybuje v místnosti ve které jsou zdi. Tank se ovládá šipkama. Potřeboval bych udělat, aby tank při zmáčknutí mezerníku vystřelil nějakou kouli přesně ve směru kam je natočený a aby se ta koule odrážela od zdí, při dotyku z tankem zmizela a tank taky (nová hra) a aby do sedmi sekund koule zmizela. Dále aby tank mohl vystřlit maximálně 5 střel například za 10 sekund. Díky za radu.. jsem naprostej amater, tak podrobně na mě prosím :)

 
Odpovědět 23.2.2014 22:56
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na steflpatrik
Jan Demel:

Má to být něco jako Tank Trouble ?O.o

Nahoru Odpovědět 23.2.2014 22:59
To co se zdá být nemožné, je vždy možné.
Avatar
Odpovídá na steflpatrik
Vojtěch Pospíchal:

Nechceš, aby tu za tebe rovnou tu hru někdo udělal? Co kdyby jsi se podíval na tu miliardu tutoriálů co tu máš a pak sem napsal s konkrétním problémem a nikoli s žádostí o hru na míru... Až budeš potřebovat konkrétní radu napiš sem... Všichni ti rádi pomůžeme. Do té doby hodně štěstí!

 
Nahoru Odpovědět  +2 23.2.2014 23:00
Avatar
steflpatrik
Člen
Avatar
Odpovídá na Vojtěch Pospíchal
steflpatrik:

a poradit aspoň jak udělat to střílení ? aby to vystřelilo tam kam je tank otočený? všude jsem našel návod jen že to vystřelí kam ukazuje myš

 
Nahoru Odpovědět 23.2.2014 23:03
Avatar
TomBen
Redaktor
Avatar
Odpovídá na steflpatrik
TomBen:

Programování není o tom, že opíšeš nějaký návod.
Je to jako bys přišel za hudebním skladatelem a řekl mu,
aby ti podrobně popsal způsob, jakým si složíš vlastní symfonii.
Vyviň trochu vlastní snahy pls.

Nahoru Odpovědět  +3 23.2.2014 23:31
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Odpovídá na steflpatrik
Vojtěch Pospíchal:

Dobře můžu ti poradit.... (Upozorňuji tě že v GameMakeru nedělám, čili to bude praktická rada z opravdových herních enginů). Na začátku hry (GameMaker má jistý event create že?) si vytvoř proměnou direction. V update funkci hry (v GameMakeru se tomu říka Step???) si hlídej zda hráč stiskne SPACE. Pokud ano, použij ikonku CREATE_MOVING_IN­STANCE (nejsem si jistý jak se přesně jmenuje ale mělo by to být ono..). Nyní nastav do ikonky směr ve kterém se objekt bude pohybovat na proměnou direction a že musí být relative. A poslední rada na závěr: Pokud chceš jednou být programátor vykašli se na GameMaker a pojď pracovat do opravdových herních enginů (Unity3D, CryEngine, UDK). Nebo alespoň nepoužívej ikonky ale GameMaker language.

 
Nahoru Odpovědět  -1 23.2.2014 23:41
Avatar
1Pupik1989
Neregistrovaný
Avatar
1Pupik1989:

Na takovou malou hru bych asi ani netahal engine.

Jediné co musíš, tak držet jednu normálu. O normálách si něco pročti. Pak už jen hledáš kolizi ve směru normály. Pokud neexistuje, tak hráč hraje dál. Pokud existuje, tak hurá a hráč se slávou skončil. Nejlepší bude mít i definovaný nějaký maximální dostřel. Vůči pozici tanky můžeš pak spoustu objektů vyřadit.

 
Nahoru Odpovědět 23.2.2014 23:54
Avatar
TomBen
Redaktor
Avatar
Odpovídá na steflpatrik
TomBen:

V zásadě ti bude fungovat to, co píše Vojtěch Pospíchal.
Jen nastav depth střely na vyšší hodnotu než má tank,
aby se ti střely líhly ukryté pod obrázkem tanku.

Nahoru Odpovědět  +1 24.2.2014 0:33
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
1Pupik1989
Neregistrovaný
Avatar
1Pupik1989:

Ještě jsem zapomněl na ty zdi. Každá zeď má taktéž normálu a tam už je to úhel dopadu = úhel odrazu. U zdí už se normála dá vypičítat hned, takže jí ani není potřeba někde udržovat. GameMaker ale určitě na to něco má, co píšu je jen teorie.

 
Nahoru Odpovědět 24.2.2014 1:20
Avatar
TomBen
Redaktor
Avatar
TomBen:

1Pupik1989: Přesně tak, jen teorie.

Nahoru Odpovědět 24.2.2014 3:15
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Odpovídá na 1Pupik1989
Vojtěch Pospíchal:

1Pupik1989: Tahat engine na malou hru, zvlášť pokud jsi začátečník, je mnohem lepší, než na engine přesedlat až na velké projekty. U nich totiž v zásadě většinou selžeš a vinu pak svedeš na engine.

 
Nahoru Odpovědět  +1 24.2.2014 9:58
Avatar
1Pupik1989
Neregistrovaný
Avatar
Odpovídá na Vojtěch Pospíchal
1Pupik1989:

Co jsem si po letech všimnul, tak je to u každého jinak. Někomu pomůže začít rovnou na enginu a psát hru. Někomu pak naopak pomůže napsat jednu malou hru od začátku a pak nemá problémy napsat větší. Spíš se to ale týká 3D. Prakticky to "direction" je ta normála kterou jsem zmiňoval.

 
Nahoru Odpovědět 24.2.2014 10:54
Avatar
Odpovídá na 1Pupik1989
Vojtěch Pospíchal:

Ano, pravěpodobně závisí na jedinci, ale obecně platí: Čím dřív se naučíš programovat, tím snažší to v životě budeš mít....

 
Nahoru Odpovědět 24.2.2014 11:06
Avatar
TomBen
Redaktor
Avatar
TomBen:

Aby se tady zase neřešila jen vhodnost enginů, o které se už naflamovalo celkem dost, posunu téma trochu jinam. Vytvořil jsem funční model střelby podle pospileho metody ( cca 15 minut času ) a je zjevný jeden drobný nedostatek. Střed tanku je logicky uprostřed kvůli snadnému otáčení tanku. Když se instance střely vytvoří na souřadnicích tanku, je při rychlém pohybu vidět, že střely nevylétávají z hlavně. Řešením je vytvářet instance u ústí hlavně, ale pak je nutné rotovat okolo středu tanku s bodem vzniku střel matematicky a to hodně začátečníků odradí. Napadá někoho nějaké jiné řešení?

https://www.dropbox.com/…v86/tank.exe

Nahoru Odpovědět 24.2.2014 11:12
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Odpovídá na TomBen
Vojtěch Pospíchal:

Nedávno jsem dělal malý projekt jen tak abych nevyšel ze cviku. Možná vyhrabu Unity project. Dej mi minutku :).

 
Nahoru Odpovědět 24.2.2014 11:17
Avatar
TomBen
Redaktor
Avatar
TomBen:

Jinak aby tady nebyly bludy:
Direction není normála, direction je směr, zatímco normála je vektor kolmý na rovinu nebo osu. Navíc je direction klíčové slovo v syntaxi gml a zavádět novou terminologii není v tomto případě nijak výhodné.

Nahoru Odpovědět 24.2.2014 11:22
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
chain
Redaktor
Avatar
chain:

Okrem toho, ze pri tvorbe striel v strede nesedi ich zobrazovanie, mohol by nastat problem aj pri kolizii striel s tankom samotnym, co bola jedna z popisanych variant ukoncenia resp. restartu hry. suhlasim s tombenom. tvorba rakiet by bola zavisla na direction tank. Cize strely by sa tvorili vo vzdialenosti od tanku na pomys. kruznici, odvodol by so to z prevodu direction na angle- priblizne 1:58 nakolko uhol sa zadava radianoch(cize 0-2pi. mno a miesto tvorby strelz bude suradnice + vzdialenost od stredu x sin resp. cos alfa...

 
Nahoru Odpovědět 24.2.2014 11:57
Avatar
TomBen
Redaktor
Avatar
Odpovídá na chain
TomBen:

Fajn. Ale jde o stejné řešení, jaké jsem už naznačil. Rotace místa vzniku okolo tanku. Možná existuje i něco jiného. Jinak jsem tohle řešení už dříve použil v trochu obměněné podobě, kdy jsem měl v ústí hlavně neviditelný objekt, který rotoval okolo středu zbraně ( šlo tehdy o historický kanón ) a ten neviditelný objekt teprve vytvářel střely. Hezké bylo, že v debug módu byl objekt vidět, takže se to dobře ladilo. :-)

Nahoru Odpovědět 24.2.2014 12:12
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Odpovídá na TomBen
Vojtěch Pospíchal:

Přesně takhle to řeším já. S matematikou sem nikdy zrovna velký kamarád nebyl (což neznamená že s ní nějak bojuji {jenom to není zrovna můj šálek čaje}). Každopádně, tady je odkaz na zkompilovanou hru, kterou jsem nedávno řešil:

https://mega.co.nz/#F!f8hkyBpR!Y-BWKS-sJl2kyA7xBcwzcA

Devbook bohužel nepodporuje speciální znaky do linku: Tj. link je v kódu :).
Máte na výběr dva RAR soubory - Shooter.rar (Obsahuje zkompilovanou hru o zdrojový kód) a ShooterSource.rar (Obsahuje pouze zdrojový kód.) Pokud nemáte Unity a chcete si prohlídnout alespoň zdrojové kódy zamiřte do složky: \TopDownProjek­t\Assets\Scrip­ts. Zde se nachází C# skripty které můžete otevřít v jakémkoli editoru. Pokud ale máte možnost otevřít projekt v Unity jako celek doporučuji to.

Editováno 24.2.2014 12:30
 
Nahoru Odpovědět 24.2.2014 12:28
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Vojtěch Pospíchal
TomBen:

Tohle je poměrně šibalské řešení. :D
Vlastně jde o nekonečně rychlou střelu graficky provedenou jako čára.
V zásadě to i odpovídá reálu v tom, že rychlost střelce je tak malá proti faktické rychlosti střely, že skutečně lze rychlost střely zaokrouhlit směrem k nekonečnu. Docela dobré. :-)

Nahoru Odpovědět 24.2.2014 12:53
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Odpovídá na TomBen
Vojtěch Pospíchal:

Díky :) Byl to vlastně můj první pokus o střelbu tímhle směrem. Vždycky to byla jen inicializace objektu, ale jsou tam potom problémy tipu kolize v moc velké rychlosti, průstřel objektu který potřebuji aby šel penetrovat atd... RayCast je poměrně elegantní řešení.

 
Nahoru Odpovědět 24.2.2014 13:10
Avatar
Odpovídá na TomBen
Vojtěch Pospíchal:

Ještě jsem u tvého tanku objevil jednu malou chybku... V případě že se tank otáčí velkou rychlostí a přitom hráč střílí, tak střela evidentně nevychází z hlavně, ale ze středu tanku... Čili je to zřejmě opravdu nutné řešit buď druhým objektem v hlavni, nebo matematikou....

 
Nahoru Odpovědět 24.2.2014 13:46
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Vojtěch Pospíchal
TomBen:

Objevil jsi chybku? To byl přece důvod, že jsem to sem dával - aby to bylo vidět, že se to tak chová, když se použije střed, jak jsi to původně navrhoval ty sám. Myslel jsem, že si toho všimneš hned. :-)


Vypadá to, že místo klasických cos, sin by mohlo být výhodné
použít lengthdir_x(len­,dir) a lengthdir_y(len­,dir).

Dalším řešením by možná mohly být kolize. Střela vytvořená na pozici středu tanku by měla generovat kolizi tak dlouho dokud není u hlavně, takže by asi šlo při vytvoření hned posouvat v cyklu while dokud bude v kolizi s tankem, který střelu stvořil.

Každopádně to téma skrývá víc zajímavých aspektů.

Nahoru Odpovědět 24.2.2014 23:40
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Odpovídá na TomBen
Vojtěch Pospíchal:

Ne jde o to, že to bylo vidět už v případě, že se tank nehýbal. V případě že se hýbe, tak střela nejde ani ze středu tanku (z pohledu hráče)....
K řešení pomocí kolize: Tohle řeší kolize ve while není příliš dobré. Řešil jsem takhle kolize které musí být opravdu přesné, ale nároky na HW jsou pak řádově mnohem větší...

Editováno 24.2.2014 23:43
 
Nahoru Odpovědět 24.2.2014 23:42
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Vojtěch Pospíchal
TomBen:

Obojí efekt vychází ze stejného problému. Jestli jde o rychlost rotace nebo rychlost pohybu celého tanku už mnoho nezmění, proto mě nenapadlo, že bys to odlišoval.

Ohledně náročnosti kolizí:
Pravděpodobně by šlo o pár pixelů velikosti a stačilo by asi kontrolovat jen střed střely jako jediný bod proti masce tanku. Myslím, že by to stíhalo celkem v pohodě.

Nahoru Odpovědět 24.2.2014 23:48
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Odpovídá na TomBen
Vojtěch Pospíchal:

Pokud stále řešíme 2D tank v GameMakeru (zvlášť nějakou na koleni dělanou freeware hru), tak tam o výkon už zřejmě opravdu tolik nejde, ale pokud člověk řeší 3D hru na mobilní platformu řeší každé jediné FPS.

 
Nahoru Odpovědět 24.2.2014 23:51
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Vojtěch Pospíchal
TomBen:

To je pravda. Ve 3D by se to zřejmě nevyplatilo takhle dělat. :-)

Nahoru Odpovědět 24.2.2014 23:54
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
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 28 zpráv z 28.