Функция surface.blit()
(т.е.: screen.blit) берет изображение и координаты верхнего левого угла того, где его нарисовать.
В предоставленном коде нарисованы две копии obstacle
в obstacleX
и obstacleX2
- один из которых установлен на 0
, а другой - ширину изображения. Таким образом, это должно привести к тому, что два изображения будут нарисованы рядом друг с другом, в левой части окна, в строке 380.
Если эти изображения больше не рисуются через некоторое время, это может быть вызвано -
- Переменные
obstacleX
и obstacleX2
заменяются на экранную позицию - Изображение
obstacle
изменяется на пустую (или иным образом невидимую) версию
В небольшом приведенном выше примере кода нет доказательств, но, поскольку вопрос предполагает перемещение изображений, я предполагаю, что координаты obstacleX
и obstacleX2
позиций рисования изменяются чтобы выйти за пределы экрана.
РЕДАКТИРОВАТЬ:
Очевидно, что ваши объекты начинаются с позиции 0
(левое окно), и позиция обновляется obstacleX -= 1.4
, которая перемещает препятствие дальше налево . Вот почему они запускаются на экране, но вскоре исчезают.
Поместите размеры экрана в константы, например:
WINDOW_WIDTH = 400
WINDOW_HEIGHT = 400
И используйте их вместо того, чтобы набирать код цифрами. Это уменьшает количество необходимых изменений, если вы решите изменить размеры окна, а также позволяет выполнять расчеты на основе ширины окна.
Так что начинайте свое препятствие с экрана.
obstacleX = WINDOW_WIDTH # off-screen
obstacleX2 = WINDOW_WIDTH + 100 # Further away from first obstacle
In главное обновление -l oop, когда положение предметов меняется, проверьте, не нужно ли их повторно зациклить обратно перед игроком:
# Move the obstacles 1-pixel to the left
obstacleX -= 1.4
obstacleX2 -= 1.4 # probably just 1 would be better
# has the obstacle gone off-screen (to the left)
if ( obstacleX < 0 - obstacle.get_width() ):
# move it back to the right (off-screen)
obstacleX = WINDOW_WIDTH + random.randint( 10, 100 )
# TODO - handle obstacleX2 similarly