Заставьте спрайт следовать по пути, используя C # - PullRequest
0 голосов
/ 29 ноября 2011

Я делаю проект по вычислительной технике в колледже, и я столкнулся с небольшим камнем преткновения.

Я делаю игру Tower Defense, и мне нужно заставить спрайт (в данном случае в форме графического блока) следовать указанному пути. Я пытался найти ответ в Интернете и на этих форумах, но почти каждый, кого я нахожу, использует XNA или какое-либо другое дополнение или использует другой язык кодирования. Так как мы должны использовать компьютеры колледжа, установка чего-либо еще не является вариантом, это должны быть просто стандартные платформы C #. Я пытался найти альтернативу для путевых точек или раскадровок, но мой поиск не принес результатов.

Если бы кто-нибудь вообще мог мне помочь, я был бы очень благодарен.
Спасибо

Ответы [ 2 ]

0 голосов
/ 29 ноября 2011

Я уже добавил один ответ, но у меня также есть совершенно другой ответ.Вы говорите, что не хотите использовать сторонние фреймворки, и я не уверен, пересекает ли это черту или нет. Scrolling Game Development Kit 2 позволит вам определить карты, спрайты и пути для спрайтов, которым они будут следовать, но затем он создаст полностью автономный проект, который можно загрузить в Visual C # Express и скомпилировать независимо, если вы так сделаете.выбирать.Единственная библиотека, на которую она опирается, - это OpenTK, просто для доступа к OpenGL для обработки рисунка графики.Эта часть может пересекать линию, но это в первую очередь для чертежа, который в основном инкапсулирован в Display.cs.Это не для управления состоянием каких-либо спрайтов, карт или движений.

0 голосов
/ 29 ноября 2011

Я бы заполнил больше деталей, но, видя, как это домашнее задание, я думаю, я просто предоставлю набросок:

  PictureBox pbox1 = new PictureBox();
  Point[] path = { new Point(10,100), new Point(150, 60), new Point(100, 120)};
  Timer timer1 = new Timer();
  int curPointIndex = 0;
  int nextPointIndex = 1;
  float percent = 0f;
  float pctIncrement = 1f;

  public Form1()
  {
     InitializeComponent();

     pbox1.Location = path[0];
     pbox1.Size = new Size(32, 32);
     pbox1.BackColor = Color.Red;

     timer1.Interval = 20;
     timer1.Tick += new EventHandler(timer1_Tick);
     timer1.Start();

     this.Controls.Add(pbox1);
     this.components.Add(timer1);
  }

  void timer1_Tick(object sender, EventArgs e)
  {
     percent += pctIncrement;
     // Calculate weighted average based on point number
     // curPointIndex and nextPointIndex in path here.

     // Set pbox1.Location to calculated position here.

     // Check for altering curPointIndex and nextPointIndex here when percent
     // reaches 100 (and reset percent) here.
  }

Я заполнил код в моем тестовом проекте, и он работает. Единственное предостережение в том, что спрайт будет перемещаться медленнее между точками, которые находятся близко друг к другу, чем между точками, которые находятся далеко друг от друга, но я не уверен, что это проблема для вас. Если это так, вы можете изменить pctIncrement на расчет, обратно пропорциональный расстоянию между текущей точкой и следующей точкой.

...