Я недавно вошел в XNA и должен сказать, что мне это нравится. Как своего рода игра «Привет, мир», я решил создать классическую игру «Змейка». 90-градусная версия была очень простой и легкой в реализации. Но когда я пытаюсь сделать его версию, которая позволяет вращаться на 360 градусов, используя стрелки влево и вправо, я столкнулся с некоторой проблемой.
То, что я делаю сейчас, проистекает из 90-градусной версии: перебирая каждую часть тела змеи, начиная с хвоста и заканчивая прямо перед головой. Это прекрасно работает при движении каждые 100 миллисекунд. Проблема заключается в том, что это создает нестабильный стиль игры, так как технически игра развивает скорость всего 6 кадров в секунду, а не потенциальные 60.
Я хотел бы перемещать змею каждый игровой цикл. Но, к сожалению, поскольку змея движется со скоростью головы, она идет слишком быстро. Это будет означать, что голова должна двигаться с гораздо меньшим шагом, таким как (2, 2), в направлении, а не то, что у меня сейчас (32, 32). Поскольку я несколько недель работал над этой игрой, руководя школой, я думаю, что слишком много думал о том, как этого добиться. Это, вероятно, простое решение, я просто не догоняю его.
Вот некоторый псевдокод того, что я пробовал, исходя из того, что имеет для меня смысл. Я не могу придумать другой способ сделать это.
for(int i = SnakeLength - 1; i > 0; i--){
current = SnakePart[i], next = SnakePart[i - 1];
current.x = next.x - (current.width * cos(next.angle));
current.y = next.y - (current.height * sin(next.angle));
current.angle = next.angle;
}
SnakeHead.x += cos(SnakeAngle) * SnakeSpeed;
SnakeHead.y += sin(SnakeAngle) * SnakeSpeed;
Это производит что-то вроде этого: Код в действии . Как видите, каждая часть всегда остается за головой и не создает эффекта «следа».
Прекрасный пример того, чего я добиваюсь, можно найти здесь: Data Worm . Не вращение области просмотра, но эффект следа треугольников.
Спасибо за любую помощь!
источник