Экран прокручивается при движении игрока, и пули исчезают с экрана, и, несмотря на наличие функции удаления, пули вновь появляются на экране (в направлении выстрела) через 2/3 минуты.
Это вызвано интегральным переполнением чисел.Пуля никогда не удаляется из списка bullets
после того, как пуля покинула экран слева.Координата x пули непрерывно увеличивается до тех пор, пока она не переполнится.Таким образом, значение координаты x переключается с максимально возможного значения на минимально возможное значение.Это приводит к тому, что пуля снова «появляется» в правой части экрана через некоторое время.
Удалите пули из списка bullets
после того, как пуля покинула экран:
w = display.get_width()
for b in [b for b in bullets if b[0] < 0 or b[0] > w]:
bullets.remove(b)
Движение пули связано с движением игрока, так что когда игрок возвращается назад, все объекты пули также перемещаются назад на одинаковую величину, создавая иллюзию, что они остановились.Будучи недавно новичком, я не совсем уверен, как решить эти проблемы.Будем очень благодарны за любые предложения.
Количество прокрутки должно быть компенсировано при перемещении пуль.Обратите внимание на расстояние прокрутки в каждом кадре и добавьте сумму к позиции маркера:
pPosX += pVelX
scroll = 0
if pPosX > stageWidth - circleRadius-25: pPosX = stageWidth - circleRadius-25
if pPosX < circleRadius+55:pPosX = circleRadius+55
if pPosX < startScrollPosX: circlePosX = pPosX
elif pPosX > stageWidth - startScrollPosX: circlePosX = pPosX - stageWidth + w
else:
circlePosX = startScrollPosX
stagePosX += -pVelX
scroll = -pVelX
for b in range(len(bullets)):
bullets[b][0] += 2 + scroll
Но обратите внимание, скорость игрока, а также прокрутка и скорость пуль равны.Это приводит к тому, что пули останавливаются, если игрок движется вперед, потому что пули и игрок движутся вперед с равной скоростью.