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
Opus
Tvůrce
Avatar
Opus:9.7.2012 11:51

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šech a vš...
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Opus
David Hartinger:9.7.2012 12:12

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
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Opus
Kit:9.7.2012 15:54

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
Tvůrce
Avatar
Opus:9.7.2012 23:47

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šech a vš...
Avatar
Opus
Tvůrce
Avatar
Opus:9.7.2012 23:47

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šech a vš...
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.