Форум сайта python.su
Пытаюсь сделать плавное движение объекта по клеткам со стороной 50 пикселей.
Все время идет глобальный бесконечный цикл отрисовки:
while 1:
clock.tick(30) # глобальный таймер
input(pygame.event.get()) # ловим события
item.update() # двигаем объект
screen.blit(bk, (0, 0)) # обновляем бэкграунд
allsprites.draw(screen) # рисуем все объекты на новых местах
pygame.display.flip() # обновляем экран
def moveup(self):
for x in xrange(50):
newpos = self.rect.move((0, -1)) # сдвигаем рамку спрайта на пиксель вверх
self.rect = newpos # перерисовываем спрайт на новом месте
pygame.time.delay(50) # задержка на 50 миллисекунд
Отредактировано (Апрель 8, 2009 19:21:05)
Офлайн
Обрати внимание на это:
> self.rect = newpos # перерисовываем спрайт на новом месте
И на это:
> pygame.display.flip() # обновляем экран
А теперь подумай почему у тебя не выводятся промежуточные состояния объекта. Подскажу, ты не забываешь обновлять экран, отрисовать задний буфер спереди? Хотя всё равно, так делать нельзя.
Задача достаточно элементарная, посиди и подумай еще. Тебе достаточно знать во сколько началось движение, сколько сейчас на часах, из какой точки и в какую точку движется объект, а уж выполнить интерполяцию координат объекта в соответствии с текущим временем может и моя бабушка.
..bw
Офлайн
Угу, я пытался так сделать, вот только если функция перерисовки спрайта вызывается с частотой общего fps отрисовки мира, то в ней бесполезно вызывать clock.tick(), он всегда будет нулевым. Поэтому чтобы рассчитать по формуле S=VT - нужен независимый таймер. Вот тут я и запинаюсь.
Отредактировано (Апрель 9, 2009 01:05:21)
Офлайн
Я не помню как там в pygame, проблем с таймером у меня не было. А время тебе нужно не прям сейчас (не обязательно), а достаточно времени начала отрисовки сцены. В любом случае, тебе никто не запрещает использовать менее точные time.time() и time.clock().
..bw
Отредактировано (Апрель 9, 2009 02:24:09)
Офлайн