Witam!
Jestem młodym programistą i obecnie walczę z C# XNA.
Postanowiłem spróbować napisać grę typu Tower Defense.
Mój kod jest pewnie do bólu prosty, bo większości rozwiązań dochodzę sam.
Obecnie moim największym problemem jest raczej dość proste zagadnienie - ruch elementu w dowolnym kierunku.
Nie wiem, co zrobić, by obiekt (np. pocisk z wieżyczki) poleciał prosto z punktu A (działo) do punktu B (przeciwnik).
Nie ma problemu, gdy punkt A i B znajdują się na tej samej osi (X lub Y), ale nie umiem tworzyć ruchu na skos.
Próbowałem użyć klasy Curve, czytałem i czytałem, ale nie mam zielonego pojęcia, jak tego używać >.<
MSDN mnie nie oświecił.
Zdaję sobie sprawę, że mój problem to nic, ale nie umiem sobie poradzić.
Tak, żeby was dobić swoją niewiedzą moja pierwsza funkcja ruchu wygląda tak...:
//poniższa metoda jest fragmentem klasy CBullet
//zmienne zaczynające się od m_ to zmienne składowe
private void Move(GameTime gameTime)
{
if (!m_live)
return;
if (Vector2.Distance(m_sprite.m_position, m_target) <= m_size)
{ return; }
//przenoszenie się w kierunku m_target
double now = gameTime.TotalGameTime.TotalSeconds;
float way = (float)((now - m_lastmove) * m_speed);
if (m_target.m_position.X > m_position.X)
{
if (m_target.m_position.X - m_position.X < way)
{
m_position.X = m_target.m_position.X;
}
else
{
m_position.X += way;
}
}
else if (m_target.m_position.X != m_position.X)
{
if (m_position.X - m_target.m_position.X < way)
{
m_position.X = m_target.m_position.X;
}
else
{
m_position.X -= way;
}
}
if (m_target.m_position.Y > m_position.Y)
{
if (m_target.m_position.Y - m_position.Y < way)
{
m_position.Y = m_target.m_position.Y;
}
else
{
m_position.Y += way;
}
}
else if (m_target.m_position.Y != m_position.Y)
{
if (m_position.Y - m_target.m_position.Y < way)
{
m_position.Y = m_target.m_position.Y;
}
else
{
m_position.Y -= way;
}
}
}
Najchętniej skorzystałbym z klasy Curve. Zupełnie jej nie ogarniam, jednak chyba lepiej będzie się nauczyć, niż programować bez niej :)
Pozdrawiam!