Форум сайта python.su
Сломал голову, не могу понять, как заставить ряды двигаться в низ, вправо-влево двигаются нормально
(вместе), а в вверх-вниз только по одному ряду.
Вот код:
import sys import pygame from pygame.sprite import Sprite from pygame.sprite import Group class Settings(): """Настройки.""" def __init__(self): self.screen_width = 1200 self.screen_height = 600 self.bg_color = (255, 255, 255) self.caplia_speed_factor = 1 self.caplia_drop_speed = 10 self.caplia_twist = 1 class Caplia(Sprite): """Описание капли.""" def __init__(self, ai_settings, screen): super(Caplia, self).__init__() self.screen = screen self.ai_settings = ai_settings self.image = pygame.image.load('caplia.png') self.rect = self.image.get_rect() self.rect.x = self.rect.width self.rect.y = self.rect.height self.x = float(self.rect.x) self.y = float(self.rect.y) def blitme(self): self.screen.blit(self.image, self.rect) def check_adges(self, ai_settings): if self.rect.right >= ai_settings.screen_width.right: return True elif self.rect.left <= 0: return True def update(self): self.x += self.ai_settings.caplia_speed_factor self.rect.x = self.x def key_event(): for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_q: sys.exit() def screen_update(ai_settings, screen, caplias): screen.fill(ai_settings.bg_color) caplias.update() caplias.draw(screen) pygame.display.flip() def caplias_view(screen, ai_settings, caplias): caplia = Caplia(ai_settings, screen) caplia_width = caplia.rect.width caplia_height = caplia.rect.height number_caplias_x = int((ai_settings.screen_width - (2 * caplia_width)) / (2 * caplia_width)) number_caplias_rows = int((ai_settings.screen_height - (2 * caplia_height)) / (2 * caplia_height)) for row in range(number_caplias_rows): for caplias_number in range(number_caplias_x): caplia = Caplia(ai_settings, screen) caplia.x = caplia_width + (2 * caplia_width) * caplias_number caplia.rect.x = caplia.x caplia.rect.y = caplia_height + (2 * caplia_height) * row caplias.add(caplia) def game(): pygame.init() ai_settings = Settings() screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption('Капли.') caplias = Group() caplias_view(screen, ai_settings, caplias) while True: key_event() screen_update(ai_settings, screen, caplias) game()
Офлайн
Разобрался сам, убрал метод update() из класса Caplia(Sprite)
def update(self): self.x += self.ai_settings.caplia_speed_factor self.rect.x = self.x
def updata_caplias(screen, caplias, ai_settings): for caplia in caplias.sprites(): caplia.rect.y += ai_settings.caplia_speed_factor
Отредактировано grand (Апрель 4, 2017 17:52:36)
Офлайн