Найти - Пользователи
Полная версия: Pygame - движение
Начало » Python для новичков » Pygame - движение
1
Enchantner
Пытаюсь сделать плавное движение объекта по клеткам со стороной 50 пикселей.

Все время идет глобальный бесконечный цикл отрисовки:
    while 1:
clock.tick(30) # глобальный таймер
input(pygame.event.get()) # ловим события
item.update() # двигаем объект
screen.blit(bk, (0, 0)) # обновляем бэкграунд
allsprites.draw(screen) # рисуем все объекты на новых местах
pygame.display.flip() # обновляем экран
вот с item.update() и есть главная проблема, так как для плавного движения, по идее, нужен собственный таймер, не зависящий от глобального. Но движение должно быть только на 50 пикселей в одну сторону, так как в следующий раз оно может быть в другую. Пытался сделать так:
def moveup(self):
for x in xrange(50):
newpos = self.rect.move((0, -1)) # сдвигаем рамку спрайта на пиксель вверх
self.rect = newpos # перерисовываем спрайт на новом месте
pygame.time.delay(50) # задержка на 50 миллисекунд
но не выходит, объект просто прыгает на новое место.
Знаю, что вопрос очень нубский, но сегодня башка вообще не соображает, ткните носом плиз, а то даже доки не помогают :(
bw
Обрати внимание на это:
> self.rect = newpos # перерисовываем спрайт на новом месте
И на это:
> pygame.display.flip() # обновляем экран

А теперь подумай почему у тебя не выводятся промежуточные состояния объекта. Подскажу, ты не забываешь обновлять экран, отрисовать задний буфер спереди? Хотя всё равно, так делать нельзя.
Задача достаточно элементарная, посиди и подумай еще. Тебе достаточно знать во сколько началось движение, сколько сейчас на часах, из какой точки и в какую точку движется объект, а уж выполнить интерполяцию координат объекта в соответствии с текущим временем может и моя бабушка.

..bw
Enchantner
Угу, я пытался так сделать, вот только если функция перерисовки спрайта вызывается с частотой общего fps отрисовки мира, то в ней бесполезно вызывать clock.tick(), он всегда будет нулевым. Поэтому чтобы рассчитать по формуле S=VT - нужен независимый таймер. Вот тут я и запинаюсь.
bw
Я не помню как там в pygame, проблем с таймером у меня не было. А время тебе нужно не прям сейчас (не обязательно), а достаточно времени начала отрисовки сцены. В любом случае, тебе никто не запрещает использовать менее точные time.time() и time.clock().

..bw
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB