Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 4, 2017 16:18:00

grand
Зарегистрирован: 2013-09-19
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите организовать движение спрайтов.

Сломал голову, не могу понять, как заставить ряды двигаться в низ, вправо-влево двигаются нормально
(вместе), а в вверх-вниз только по одному ряду.
Вот код:

 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()

Офлайн

#2 Апрель 4, 2017 17:48:14

grand
Зарегистрирован: 2013-09-19
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите организовать движение спрайтов.

Разобрался сам, убрал метод update() из класса Caplia(Sprite)

 def update(self):
	 self.x += self.ai_settings.caplia_speed_factor
	 self.rect.x = self.x
,
добавил функцию update_caplias()
 def updata_caplias(screen, caplias, ai_settings):
	for caplia in caplias.sprites():
		caplia.rect.y += ai_settings.caplia_speed_factor
Подскажите может как-то по другому можно решить задачу и почему не работает обычное смещение по rect.y

Отредактировано grand (Апрель 4, 2017 17:52:36)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version