IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
matesax
Tvůrce
Avatar
matesax:23.12.2012 18:41

Dobrý den,
mám 2 body - výchozí A a cílový B. Potřebuji plynule přenést dělové koule z A do B. Ale ne po přímce, ale spíše takovým obloučkem - prostě tak jak děla střílí. Rád bych se vyhnul výpočtům náročných na výkon - protože se mi tu již dost počtů sčítá - a s výkonem začínám mít problémy... Děkuji.

Aktuálně střílím po přímce a s dost neefektivní veličinou - t (proměnná frame):

if (frame < 1) {

    fireCoordinates = [ oponentCoordinates[0] + fireVector[0] * frame, oponentCoordinates[1] + fireVector[1] * frame ];

    graphics.drawImage(images['fireImg'], fireCoordinates[0], fireCoordinates[1]);

    frame += 0.1;
}
 
Odpovědět
23.12.2012 18:41
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:23.12.2012 18:46

Jako "oblouček" bys raději parabolu nebo balistickou křivku? Ta druhá se ti bude hodit, pokud budeš mít ve hře i vítr. Také je realističtější.

Nahoru Odpovědět
23.12.2012 18:46
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:23.12.2012 18:50

Jestli půjde ta balistická střela bez náročných operací, tak proč ne - že... Moc jsem o fyzikálním modelu hry nepřemýšlel...

 
Nahoru Odpovědět
23.12.2012 18:50
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:23.12.2012 19:00

Výstřel z děla je vrh šikmý, dráhou ve vakuu je parabola. Vystačíš si s násobením a sčítáním.

Pokud chceš skutečnou balistickou křivku, v každém kroku spočítáš absolutní hodnotu rozdílu rychlosti střely a větru. Z toho spočítáš brzdný vektor, který odečteš od vektoru rychlosti střely.

Napsal jsem to hodně zjednodušeně, ale pro hru by to mohlo stačit.

Nahoru Odpovědět
23.12.2012 19:00
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:23.12.2012 19:05

Tak sám vidíš, jak to mám:

oponentCoordinates je bod ležící na přímce - spojuje vektor s jedinou přímkou - jedná se o pozici lodi v době výstřelu

fireVector - vektor z oponentCoordinates a místa kliknutí

Jak by jsi z toho tedy vycházel? Děkuji.

Editováno 23.12.2012 19:06
 
Nahoru Odpovědět
23.12.2012 19:05
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger:23.12.2012 19:05

http://www.itnetwork.cz/…ni-pole-zeme - koukni dolů, máš tam vše potřebné.

EDIT: Koukám, že vzorec tam z nějakého důvodu neni :[ Takže wiki: http://cs.wikipedia.org/…%A1ikm%C3%BD

Editováno 23.12.2012 19:10
Nahoru Odpovědět
23.12.2012 19:05
New kid back on the block with a R.I.P
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Hartinger
matesax:23.12.2012 19:18

Splodil jsem:

if (fireCoordinates[0] != oponentCoordinates[0] + fireVector[0] || fireCoordinates[1] != oponentCoordinates[1] + fireVector[1]) {

    fireCoordinates = [ oponentCoordinates[0] + fireVector[0] * frame, oponentCoordinates[1] + fireVector[1] * frame - (frame * frame * 5) ];

    graphics.drawImage(images['fireImg'], fireCoordinates[0], fireCoordinates[1]);

    frame += 0.1;
}

Jenže jak spočítat počáteční úhel (vektor) - aby mi to pěkně vyšlo?

Editováno 23.12.2012 19:19
 
Nahoru Odpovědět
23.12.2012 19:18
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:23.12.2012 19:22

Po zkušenostech už tvé programy moc nečtu. Jakmile to musím scrolovat, je to pro mne nezajímavé.

Pohyb střely by neměl navazovat na výchozí, ale na předchozí pozici. Jen tak můžeš započítat i proměnlivé síly, které mohou vzniknout nebo se měnit během letu.

Nahoru Odpovědět
23.12.2012 19:22
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:23.12.2012 19:25

Pokud se aktuální pozice dělové koule nerovná cílové pozici, tak proveď:

x += čas * složka x (B - A vektor počátku střely)
y += čas * složka y - (5 * čas * čas) // počítám s G = 10 - ne 9.82

Jen jsem se ptal - jak spočítat úvodní vektor? Protože ten B - A je pro přímý pohyb...

Editováno 23.12.2012 19:26
 
Nahoru Odpovědět
23.12.2012 19:25
Avatar
matesax
Tvůrce
Avatar
Odpovídá na matesax
matesax:23.12.2012 19:34

Prostě jak z počátečního bodu a cílového spočítat vektor - na který mohu již použít vrh šikmý - tak aby mi to vyšlo do cíle...

 
Nahoru Odpovědět
23.12.2012 19:34
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:23.12.2012 19:41

Když si ty výrazy zderivuješ podle času, tak se zjednoduší.

Je to jednoduchý cyklus:

vy -= G * dt
x += vx * dt
y += vy * dt

dt je krok času, vy je rychlost v ose y ...

Nahoru Odpovědět
23.12.2012 19:41
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:23.12.2012 19:47

Ale jaký bude ten počáteční úhel/vektor? Děkuji. (To tvoje bude jen ztrácet Y - prvně ale musí vzletět...)

 
Nahoru Odpovědět
23.12.2012 19:47
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:23.12.2012 19:55

Jo takhle? Ty potřebuješ výpočet pro dělostřelce? Pohyb se skládá ze 2 částí:

  • rovnoměrný pohyb z A do B
t = (Bx - Ax) / vx
  • vrh svislý.
t = sqrt((2 * (By - Ay)) / G)

Tyto časy se rovnají.

vx = v * cos(alfa)
vy = v * sin(alfa)

kde v je úsťová rychlost a alfa je náměr. Stačí ty rovnice spočítat.

Nahoru Odpovědět
23.12.2012 19:55
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:23.12.2012 20:04

Nevěděl jsem jak to pojmenovat - sorry. Náměr spočítám jak? Z toho t jsem trochu nešťastný. :)

Mohl by jsi být trochu konkrétnější?

Výchozí bod mám pozici lodi - tedy my.x a my.y a cílový pozici myši - e.pageX, e.pageY - děkuji.

Tedy první rovnice je jasná to je ten můj vektor fireVector, ale kam se podělo t?

Editováno 23.12.2012 20:05
 
Nahoru Odpovědět
23.12.2012 20:04
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 14 zpráv z 14.