Avatar
Opus
Redaktor
Avatar
Opus:

Chtěl bych se zeptat jak mám udělat aby střely, které střílý na nepřítele letěly přímočaře k cíly. Mám tam provizorně

if(enemy.position.X < position.X)
               position.X -= speed;
           if (enemy.position.X > position.X)
               position.X += speed;

           if (enemy.position.Y < position.Y)
               position.Y -= speed;
           if (enemy.position.Y > position.Y)
               position.Y += speed;

a chtěl bych něco ve stylu

velocity = Vector2.Transform(new Vector2(0, -speed),
               Matrix.CreateRotationZ(rotation));

           position += velocity;

aby vlastně letěly na přímo a né po y a pak po x souřadnici...

Předem děkuji za odpověď.

Odpovědět 9.7.2012 11:51
Všichni jsou blázni, někteří říkají že jsou aji letadla, ale já jsem jen ponorka.<br />Všichni kopírují odevšec...
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Opus
David Čápka:

Ahoj, s těmi vektory se zatím v XNA moc nekamarádím, ale přímočarý pohyb je velmi jednoduchý, stačí si vypočítat vertikální a horizontální rychlosti. Koukni na tento článek, je to článek starší, chystám se ho přepsat, ale měl bys to z něj pochopit: http://www.itnetwork.cz/index.php?…

Nahoru Odpovědět 9.7.2012 12:12
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Opus
Kit:

Pokud ti postačí 2D, můžeš s výhodou využít datový typ Complex. Můžeš s tím pak dělat běžné matematické operace a dobře se vyhodnocuje vzdálenost objektů.

Samozřejmě ve Vector2 můžeš přetížit operátor '+='.

Nahoru Odpovědět 9.7.2012 15:54
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Opus
Redaktor
Avatar
Opus:

Díky moc už to mám

na přičítání

position -= line_move(position, enemy.position);
private Vector2 line_move(Vector2 strela, Vector2 target)
       {
           float d = (float)Math.Sqrt(Math.Pow((strela.X - target.X), 2.0f) +                  (float)Math.Pow((strela.Y - target.Y), 2.0f)) / speed;
           return new Vector2((strela.X - target.X) / d, (strela.Y - target.Y) / d);
       }
Nahoru Odpovědět 9.7.2012 23:47
Všichni jsou blázni, někteří říkají že jsou aji letadla, ale já jsem jen ponorka.<br />Všichni kopírují odevšec...
Avatar
Opus
Redaktor
Avatar
Opus:

byla to rychlovka vše funguje jak má moc díky za http://www.itnetwork.cz/index.php?… ;)

Nahoru Odpovědět 9.7.2012 23:47
Všichni jsou blázni, někteří říkají že jsou aji letadla, ale já jsem jen ponorka.<br />Všichni kopírují odevšec...
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 5 zpráv z 5.