Я пытаюсь преобразовать простую игру, написанную на pygame, в pyglet. Я почти во всем разобрался, но теперь я столкнулся с такой ситуацией, у меня есть фоновый спрайт, как в этом примере:
В моем коде pygame я пишу это, чтобы он плавно прокручивался в фоновом режиме:
base_shift = self.graphic.IMAGES['base'].get_width() - self.COMMON_CONST['screenWidth']
while True:
base_x = -((-base_x + 3) % base_shift)
self.screen.blit(self.graphic.IMAGES['base'], (base_x, y))
Обычно изображение длиннее, чем фактический экран, и как только оно проходит значение дельты между изображением X и экраном X, изображение снова устанавливается на 0.
Я пытаюсь сделать то же самое в pyglet внутри функции def update (self, dt):, но я точно не знаю, как это сделать. Я имею в виду, что понимаю значение dt, но все же ... Чтобы переместить изображение, я делаю что-то вроде этого:
def update(self, dt):
self.base.x -= 15 * dt
Конечно, это продолжит движение, и это не сбрасывает его позицию. Как я могу воспроизвести поведение, которое я сделал в pygame?
Благодарность
ОБНОВЛЕНИЕ
Я пробую этот код:
def update(dt):
self.base.x = -((-(self.base.x - 15 * dt)) % base_shift)
Кажется, что это работает, но это не гладко, когда возвращается к 0, не идеально выровнен.
ОБНОВЛЕНИЕ / 2 ВРЕМЕННОЕ РЕШЕНИЕ
Наконец я перешел к совершенно другому решению. Я разбиваю изображение по единому шаблону примерно так:
а затем я повторяю это много раз, чтобы заполнить ширину экрана плюс 2. Затем я перемещаю их все, и когда первый полностью выходит за пределы экрана, я удаляю из массива и добавляю новый.
Я не знаю, есть ли лучшее решение, пока все в порядке.