Форум сайта python.su
4
Привет!
Пытаюсь с помощью Pygame сделать игрушку.
Нарисовал задний фон. Сделал его спрайтом. Двигаю его справа налево очень медленно.
Количество кадров в секунду - 50.
Сдвигаю спрайт на 1 пиксель каждый цикл.
Всё работает как-бы нормально.
Мне не нравится “визуальный” результат.
Дело в том, что я вижу как спрайт “дёргается” при каждом сдвиге?!
Но ведь я сдвигаю всего на пиксель,а сдвиг виден “не вооружённым глазом”
А если я ещё замедляю движение, т.е. сдвигаю спрайт через цикл, то “дёрганье” ещё заметнее.
Подскажите, как с этим бороться?
Офлайн
4
Вот сама программа:
import pygame pygame.init() clock=pygame.time.Clock() class Background(pygame.sprite.Sprite): def __init__(self,left): super().__init__() self.image=pygame.image.load("C://Sunduk2/background1.png").convert() self.rect=self.image.get_rect(topleft=(left,0)) def update(self): if self.rect.right==642: bg_group.add(Background(left=640)) self.rect.x=self.rect.x-1 if self.rect.right==0: self.kill() win=pygame.display.set_mode((640,480)) bg_group=pygame.sprite.Group() bg_group.add(Background(left=0)) while 1: for ev in pygame.event.get(): if ev.type==pygame.KEYDOWN: if ev.key==pygame.K_q: pygame.quit() bg_group.draw(win) bg_group.update() pygame.display.update() clock.tick(50)
Отредактировано panama555 (Дек. 30, 2019 13:08:47)
Прикреплённый файлы:
Background1.png (23,3 KБ)
Офлайн
4
А если замедлить движение, то подёргивание ещё заметней:
import pygame pygame.init() clock=pygame.time.Clock() class Background(pygame.sprite.Sprite): def __init__(self,left,sdvig=0.1): super().__init__() self.image=pygame.image.load("C://Sunduk/background1.png").convert() self.rect=self.image.get_rect(topleft=(left,0)) self.x=self.rect.x self.sdvig=sdvig def update(self): self.x-=self.sdvig if self.rect.right==642: bg_group.add(Background(left=640)) self.rect.x=int(self.x) if self.rect.right==0: self.kill() win=pygame.display.set_mode((640,480)) bg_group=pygame.sprite.Group() bg_group.add(Background(left=0)) while 1: for ev in pygame.event.get(): if ev.type==pygame.KEYDOWN: if ev.key==pygame.K_q: pygame.quit() bg_group.draw(win) bg_group.update() pygame.display.update() clock.tick(50)
Отредактировано panama555 (Дек. 30, 2019 13:26:16)
Офлайн
44
конечно такой совет но - а на джите смотрели как сделаны игрушки на этом же фромеворке?
https://itch.io/games/made-with-pygame
и вставьте ссылку на его url Отредактировано AD0DE412 (Дек. 30, 2019 15:02:16)
Офлайн
4
Я не понял, что вы хотели сказать.
Вопрос простой.
Есть какой-нибудь способ избавиться от дрожания или нет?
И если есть, то в чём он заключается?
Офлайн
568
panama555
Я не понял, что вы хотели сказа
Офлайн
44
точно! ммм … надо мне быть поточнее
зы фикс* git все же произносится как гит а не джит … таки да
и вставьте ссылку на его url Офлайн
253
panama555Хм. По идее если смещение на пиксел вас тревожит то надо смотреть в сторону антиалиасинга. Обычно он включается целиком для всего приложения.
И если есть, то в чём он заключается?
Офлайн
4
doza_and
ТС может и не обнаружить нужного эффекта.
Офлайн
44
panama555топикстартер
Под словом “ТС”
panama555это не то см. pygame.display.gl_set_attribute() если не ошибаюсь
просто размыл свою картинку в фотошопе
panama555хз оно движится … но ведь так и должно быть
А у кого-нибудь наблюдается дрожание в моей программе
и вставьте ссылку на его url Офлайн