Jump to content
  • 0

pomoc Kulecnik - napad


PanGemius

Dotaz

Dobry den, chtel bych se zeptat jak se da udelat kulecnik, jako to maj treba na serveru SP nebo WTLS. Jakym zpusobem to funguje a ktere funkce jsou potrebne pro to, aby to cele fungovalo. Nechci zadne konkretni kody, jenom napad, ktery me dovede k reseni teto situace.

Link to comment
Share on other sites

9 odpovědí na tuto otázku

Recommended Posts

  • 0
  • Majitel

Defakto jde jen o matematiku a nastavování pozic objektům.. Vše ostatní je jen obal, který si můžeš udělat jak chceš - předpokládám že v SAMP je to stále řešené přes textdrawy.

Link to comment
Share on other sites

  • 0

Nevidel som, ako to na tých serveroch presne funguje, ale očakával by som, že na objekt biliardového stola je vložených niekoľko malých objektov biliardových gulí a že sa využíva ColAndreas plugin na zistenie, či guľa narazí do inej gule/hrany stola. Guliam vieš potom asi nastaviť rýchlosť a smer podľa rýchlosti a smeru gule, ktorá do nich narazila. U odrazov od hrán stola platí asi niečo na spôsob uhol dopadu = uhol odrazu.

Edited by DuFF
  • Paráda! (+1) 1
  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

  • 0
  • Globální moderátor

Varianta jedna jsou texdraws, varianta druhá je přes objekty. Chovej se k objektům jen v rámci dvou os - budou se pohybovat jen v 2D prostoru, dej pod ně kulečníkový stůl, na to koule a jejich pohyb dopočítávej.

Vypadá to složitě, ale je to jinak strašně jednoduché ;) 

  • Paráda! (+1) 1
Link to comment
Share on other sites

  • 0
  • Majitel
před 10 minutami, DuFF said:

Nevidel som, ako to na tých serveroch presne funguje, ale očakával by som, že na objekt biliardového stola je vložených niekoľko malých objektov biliardových gulí a že sa využíva ColAndreas plugin na zistenie, či guľa narazí do inej gule/hrany stola. Guliam vieš potom asi nastaviť rýchlosť a smer podľa rýchlosti a smeru gule, ktorá do nich narazila. U odrazov od hrán stola platí asi niečo na spôsob uhol dopadu = uhol odrazu.

Používat kolizní detekci fyzikální cestou je zbytečná ztráta výpočetního výkonu (alespoň pro tento počin) - Celá věc se dá (jak již odpověděl @Hip) spočítat jen jednoduchou matematikou. Hráč po potvrzení úhlu a síly šťouchu "předá serveru" vstupní vektor, na základě kterého se vyšle bílá koule do prostoru a každým tickem se jí konstantně ubere rychlost a zároveň změří vzdálenost od ostatních koulí (s ohledem na jejich radius - resp. velikost). Pokud protne jinou kouli, spočítá se úhel mezi původním vektorem a vektorem do druhé koule (pozice bílé koule minus pozice kolizní koule) a na základě tohoto úhlu se poté vytvoří dva nové "vstupní" vektory, které se využijí pro novou aktivaci skriptu na obě koule s poloviční rychlostí bílé koule v místě kolize. A to celé se opakuje do té doby, než rychlost překročí nějaký limit (rychlost < 0.01 např) - poté se šťouch "dokončí" a začíná se na novo.

 

EDIT: Případně se dá na základě kolizního úhlu vypočítat i poměr předané energie pro rozdělení rychlosti koulí (když bílá jen škrtne jinou kouli, nepředá ji půl rychlosti ale jen zlomek

(90 - [uhel] / 90) * [rychlost bílé koule]

 

  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

  • 0
  • Globální moderátor
před 2 minutami, ffredyk said:

s poloviční rychlostí bílé koule

Ne pozor! Koule nemají poloviční rychlost, ale procentuální rychlost v závislosti na úhlu. Pokud je úhel 0° (tedy přímo zepředu narazí do koule), tak se bílá zastaví úplně a předá 100% rychlosti druhé. Pokud náraz byl 45°, bude to půl a půl. Pokud to bude těsně pod úhlem 90° tak se bílá skoro nezastaví a druhá skoro nepohne. Více než 90° znamená, že koule druhou kouli minula, takže se to nemusí řešit. Úhel počítáš mezi vektorem pohybu a vektorem/úsečkou pozice koule 1 a 2.

Link to comment
Share on other sites

  • 0
  • Majitel
před 6 minutami, Hip said:

Ne pozor! Koule nemají poloviční rychlost, ale procentuální rychlost v závislosti na úhlu. Pokud je úhel 0° (tedy přímo zepředu narazí do koule), tak se bílá zastaví úplně a předá 100% rychlosti druhé. Pokud náraz byl 45°, bude to půl a půl. Pokud to bude těsně pod úhlem 90° tak se bílá skoro nezastaví a druhá skoro nepohne. Více než 90° znamená, že koule druhou kouli minula, takže se to nemusí řešit. Úhel počítáš mezi vektorem pohybu a vektorem/úsečkou pozice koule 1 a 2.

Viz. edit původní citace - došlo mi to dřív, než jsi stihl zareagovat :-P :haha:

  • Smutný 1
Link to comment
Share on other sites

  • 0

Rozhodně je to mnohem složitější než kolegové @ffredyk a @Hip píšou.

Budeš muset řešit kolizi x koulí, protože ne vždy se pohybuje pouze jedna koule a zároveň musíš brát v potaz vektory rychlostí všech koulí při kolizi (ne pouze jedné).

 

Link to comment
Share on other sites

  • 0
před 3 hodinami, Lukasz said:

Rozhodně je to mnohem složitější než kolegové @ffredyk a @Hip píšou.

Budeš muset řešit kolizi x koulí, protože ne vždy se pohybuje pouze jedna koule a zároveň musíš brát v potaz vektory rychlostí všech koulí při kolizi (ne pouze jedné).

 

Samozrejme osi X a Y nastaviť tak aby sa voľne pohybovali tie gule... 

Je to dosť zložité úplne ale to sa skôr opytaj niCe ten to robil a ten ti poradí :)

  • Kappa 1
Link to comment
Share on other sites

  • 0

Vicemene pokud nebudes spat na hodine matematiky nekde v 2 nebo 3 rocniku stredni skoly. Tak se tam budete ucit o 3d souradnicovem prostoru. Bez znalosti tohoto to urcite nedas. Vicemene se vychazi pro zjednoduseni z logiky 2D a tedy se neuvazuje ze by koule mohla opustit svoje Z. Je to dost velke zjednoduseni ale stale to problem nedela dost jednoduchy. Dale jsou z toho ostraneny vsechny false atp. Proste se uvazuje vzdy primy strel. Kolize kouli zjistit jednoduse, podle vzdalenosti - jsou to koule. Odraz je jednoduchy u hrany stolu uhel dopadu = uhel odrazu. neboli +180.0. Pri narazu dvou kouli je uz potreba uvazovat trochu jinak.

Vicemene to mam nakonene podobne jako takto typek:

Ovšem to na serveru mam dyl než on vydal toto video, ale spoň jsme si ověřil, že jsem postupoval správně.

Edited by ATomas
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...