Dobrý den,
v isometrické políčkové grafice (kosočtverce) o velikosti políčka 52, 26 chodí hrdina 13ti kroky po vektoru (+/-4; +/-2) při rychlosti 50ms. Během této doby nesmí změnit směr - jinak by nebylo zajištěno, že nakonec skončí přesně uprostřed nějakého políčka. Proto lze změnit směr pouze, pokud je Ready a v tom případě si projdu stisklé klávesy, přičemž dle toho volím další možnosti. (kupříkladu popojití dále)
public void Move(int x, int y)
{
if(Ready = (count++ == Steps))
count = 0;
else
{
X += x;
Y += y;
}
}
Zde není co řešit. Ovšem pro běh jsem zvolil vektor posunu (+/-8; +/- 4), čily-že 2x větší a z toho vyplývá, že by nikdy nemohl skončit přesně uprostřed jakéhokoliv políčka. (ne po běhu o jedno políčko) Zkrátka nejde podělit 13 2ma, či 52 8smi. Proto jsem to řešil různými podmínkami atp. Ale najednou zjišťuji, že stačí 2x zavolat metodu Move při posunu o vektor (+/-4; +/-2). (2x chůze) Nic víc - jen ji 2x zavolám a hrdina končí vždy přesně uprostřed každého políčka. I Ready funguje přesně jak má. Ale 13 nejde podělit 2ma! Jak je to možné? (Běhal jsem kvůli tomu x hodin po bludišti.)
Děkuji.
EDIT:
mazeGame.Hero.Move(differenceX, differenceY); // chůze
...
mazeGame.Hero.Move(differenceX, differenceY);
mazeGame.Hero.Move(differenceX, differenceY); // běh - jen 2x chůze