#python #python-2.7 #animation #pygame
#python #python-2.7 #Анимация #pygame
Вопрос:
В настоящее время я работаю над 2D-платформером, и спрайты, которые у меня есть, анимируются из нижней левой точки анимации, и когда я рисую анимацию, используя точки x и y, она по-прежнему анимируется снизу слева, поэтому, когда я рисую анимацию на экране, спрайт должен становиться короче, но спрайтыноги просто отрываются от земли вот так https://www.dropbox.com/s/ofeggmlcp4f6qsk/Animation_probs_video.mp4 Я знаю, что видео не очень качественное, но что с того. Его голова должна подниматься и опускаться, а не ноги. Если вы, ребята, можете мне помочь, я был бы очень признателен. Я мог бы также использовать программу, которая исправляет, что у меня есть компьютер с Linux с виртуальным ящиком Windows xp, и я использую python 2.7 и pygame. Спасибо.
Комментарии:
1. Подумайте о геометрии — спрайт «сжимается», поэтому ноги поднимаются, вам нужно отрегулировать ось y вниз, чтобы ноги оставались на земле (y становится больше)
2. Я попробовал это, и это было слишком сложно
3. Спрайт будет перемещаться по всему экрану
4. Если бы вы могли привести мне пример, как это сделать, это было бы здорово @gkusner
5. вы в основном рассматриваете весь спрайт и перемещаете его верхний левый угол, но что вам нужно сделать, это рассмотреть фактическую видимую часть спрайта и настроить контрольную точку в зависимости от того, где вы хотите, чтобы ноги были — да, это сложно, но чтобы выглядеть правильно, вот как вы должны это сделать
Ответ №1:
Предполагая, что вы анимируете серию прямоугольных спрайтов, каждый из которых является экземпляром pygame.Surface
, вы будете добавлять разницу между поверхностью с наибольшей высотой и поверхностью текущего спрайта в положение y каждый раз, когда вы blit
.
Найдите высоту самого высокого спрайта только один раз:
max_height = tallest_sprite.get_height()
Теперь, когда вы циклически просматриваете свои спринты, каждый кадр с current_sprite:
screen.blit(current_sprite, (x, y (max_height - current_sprite.get_height())
Если проблема с частотой кадров, вы можете заранее рассчитать эти различия и связать их с каждым спрайтом, чтобы у вас было на один get_height()
вызов меньше на кадр.
Комментарии:
1. Большое спасибо, что сработало