Имея только 1 орхидейный спрайт, он более или менее отражается вокруг экрана, как я предполагаю. Когда я добавляю больше, орхидеи спрайты движутся вместе как одна масса и отскакивают от границы, хотя они не приближаются к ней. Вот код:Почему мои пигмейские спрайты не перемещаются самостоятельно? И как я могу заставить их двигаться самостоятельно?
#Import and Init
import pygame
import random
from pygame.locals import *
pygame.init()
#Set Up the Window
width = 1240
height = 700
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Pollination!")
background = pygame.Surface(screen.get_size())
background = pygame.image.load("Forrest.jpg")
background = background.convert()
#Load and Convert the wasp
wasp = pygame.sprite.Sprite()
wasp.image = pygame.image.load("wasp1.gif")
wasp.rect = wasp.image.get_rect()
wasp_group = pygame.sprite.GroupSingle(wasp)
flowers = pygame.sprite.OrderedUpdates()
for i in range(5):
orchid = pygame.sprite.Sprite()
orchid.image = pygame.image.load("orchid1.gif")
orchid.rect = orchid.image.get_rect()
orchid.rect.right = random.randint(0, 1240)
orchid.rect.top = random.randint(0, 700)
flowers.add(orchid)
buzz = pygame.mixer.Sound("buzz.wav")
#Clock and Loop Variables
framerate = pygame.time.Clock()
GameGo = True
orchid_xinc = 2
orchid_yinc = 2
wasp_move = 5
#The Main Loop
while GameGo:
#Tick the Clock
framerate.tick(60)
#Keyborad Keypress Events, Movement
if pygame.key.get_pressed()[K_UP]:
wasp.rect.top -= wasp_move
if wasp.rect.top < -30:
wasp.rect.top = -30
if pygame.key.get_pressed()[K_DOWN]:
wasp.rect.top += wasp_move
if wasp.rect.top > 625:
wasp.rect.top = 625
if pygame.key.get_pressed()[K_LEFT]:
wasp.rect.right -= wasp_move
if wasp.rect.right < 110:
wasp.rect.right = 110
if pygame.key.get_pressed()[K_RIGHT]:
wasp.rect.right += wasp_move
if wasp.rect.right > 1255:
wasp.rect.right = 1255
for orchid in flowers:
if orchid.rect.top < -30:
orchid_yinc *= -1
if orchid.rect.top > 625:
orchid_yinc *= -1
if orchid.rect.right < 110:
orchid_xinc *= -1
if orchid.rect.right > 1255:
orchid_xinc *= -1
orchid.rect.right += orchid_xinc
orchid.rect.top -= orchid_yinc
for orchid in pygame.sprite.groupcollide(wasp_group, flowers, False, True):
buzz.play()
## #Blit our Images
screen.blit(background, (0, 0))
flowers.draw(screen)
wasp_group.draw(screen)
pygame.display.update()
#Handle a Close Event
for event in pygame.event.get():
if event.type == pygame.QUIT:
GameGo = False
pygame.quit()
Я смиренно предлагаю вам исследовать использование классов, на самом деле довольно легко справляется с несколькими идентичными, но отдельными объектами. – oxrock
Мне легче не использовать классы, как правило. Нужно ли в этом случае? –
Вы пытаетесь управлять группой идентичных спрайтов с помощью одного набора глобальных переменных. Мне кажется довольно очевидным, что они будут действовать одинаково. Вы уже используете класс спрайтов pygame, но довольно красиво, если начинаете создавать свои собственные классы спрайтов, вы можете легко справиться со многими другими вещами и полностью не зависимо от любого другого объекта. Объявите ООП, есть причина, по которой это так популярно. – oxrock