В общем ерунда какая та получается. Использую один и тот же метод формирования групп спрайтов, в итоге в двух случаях он срабатывает в третьем нет.
По идеи должны сформироваться группы спрайтов что бы отслеживать сталкновения следующим когдом.
Но вот не чего подобного не происходит, не формируется группа хотя если переменовать группу под другой класс формирование происходит. Думал по началу что проблемма в классе, но я не нашёл в нём проблем. Более того класс запускается и прога работает при условии если не формируется группа. Вот сам ниже класс:
```
```
Бьюсь уже неделю и решить проблему не как не получается.
На всякий случай целиком ниже приведён код всей программы.
Python:
all_sprites = pygame.sprite.Group()
##
mobs = pygame.sprite.Group()
adidas = pygame.sprite.Group() #Не формируется группа
##
##
##
bullets = pygame.sprite.Group()
adidas = adidas() #Получается ашибка TypeError: 'Group' object is not callable
player = Player()
all_sprites.add(player)
#------------------------------------------
# Почемуто не формирует группу
#---------------------------------------
#--------------------------
adidas.add(adidas)
# Почемуто не работает!!! (час назад всё работало)
#creepy.add(creepy)
#---------------------------------------
Python:
# Проверка, не ударил ли перс жуть игрока
# Не работает совершенно
hits = pygame.sprite.spritecollide(player, adidas, False)
if hits:
running = False
Но вот не чего подобного не происходит, не формируется группа хотя если переменовать группу под другой класс формирование происходит. Думал по началу что проблемма в классе, но я не нашёл в нём проблем. Более того класс запускается и прога работает при условии если не формируется группа. Вот сам ниже класс:
```
Python:
class adidas(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((700, 40))
self.image.fill(YELLOW)
self.rect = self.image.get_rect()
self.rect.x = 0
self.rect.y = 0
Бьюсь уже неделю и решить проблему не как не получается.
На всякий случай целиком ниже приведён код всей программы.
Python:
import pygame, sys,random
import threading
from pygame.color import THECOLORS
from pygame import font
#import menu
pygame.init()
def game_1():
WIDTH = 700
HEIGHT = 700
FPS = 60
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
YELLOW = (255, 255, 0)
pygame.init()
#pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Игра!")
clock = pygame.time.Clock()
class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((50, 50))
self.image.fill(GREEN)
self.rect = self.image.get_rect()
self.rect.centerx = WIDTH / 2
self.rect.bottom = HEIGHT - 200
self.speedx = 0
def update(self):
#Перемещение в пространсве перса
self.speedx = 0
keystate = pygame.key.get_pressed()
if keystate[pygame.K_LEFT]:
self.speedx = -8
if keystate[pygame.K_RIGHT]:
self.speedx = 8
self.rect.x += self.speedx
if keystate[pygame.K_DOWN]:
self.speedy = +8
self.rect.y += self.speedy # +
if keystate[pygame.K_UP]:
self.speedy = -8
self.rect.y += self.speedy # +
#Границы которые не может перс преодолеть
#Левая правая старона
if self.rect.right > WIDTH:
self.rect.right = WIDTH
if self.rect.left < 0:
self.rect.left = 0
#Верх низ
if self.rect.top > HEIGHT:
self.rect.top = HEIGHT
if self.rect.bottom > HEIGHT :
self.rect.bottom = HEIGHT
def shoot(self):
bullet = Bullet(self.rect.centerx, self.rect.top)
all_sprites.add(bullet)
bullets.add(bullet)
class Mob(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((30, 40))
self.image.fill(RED)
self.rect = self.image.get_rect()
self.rect.x = random.randrange(WIDTH - self.rect.width)
self.rect.y = random.randrange(-100, -40)
self.speedy = random.randrange(1, 8)
self.speedx = random.randrange(-3, 3)
def update(self):
self.rect.x += self.speedx
self.rect.y += self.speedy
if self.rect.top > HEIGHT + 10 or self.rect.left < -25 or self.rect.right > WIDTH + 20:
# self.rect.x = random.randrange(WIDTH - self.rect.width)
# self.rect.y = random.randrange(-100, -40)
# self.speedy = random.randrange(1, 8)
self.rect.y = 100
class Bullet(pygame.sprite.Sprite):
def __init__(self, x, y):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((10, 20))
self.image.fill(YELLOW)
self.rect = self.image.get_rect()
self.rect.bottom = y
self.rect.centerx = x
self.speedy = -10
def update(self):
self.rect.y += self.speedy
# убить, если он заходит за верхнюю часть экрана
if self.rect.bottom < 0:
self.kill()
#Портал к новой игре
class Portl(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((70, 60))
self.image.fill(BLUE)
self.rect = self.image.get_rect()
self.rect.x = 350
self.rect.y = 60
class adidas(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((700, 40))
self.image.fill(YELLOW)
self.rect = self.image.get_rect()
self.rect.x = 0
self.rect.y = 0
all_sprites = pygame.sprite.Group()
##
mobs = pygame.sprite.Group()
adidas = pygame.sprite.Group() #Не формируется группа
##
##
##
bullets = pygame.sprite.Group()
adidas = adidas() #Получается ашибка TypeError: 'Group' object is not callable
player = Player()
all_sprites.add(player)
#------------------------------------------
# Почемуто не формирует группу
#---------------------------------------
#--------------------------
adidas.add(adidas)
# Почемуто не работает!!! (час назад всё работало)
#creepy.add(creepy)
#---------------------------------------
for i in range(8):
m = Mob()
all_sprites.add(m)
mobs.add(m)
#for i in range(1): #Вызов стены жути ( 1 штука)
# creepy = creepy()
# all_sprites.add(creepy)
#creepy.add(creepy)
# Цикл игры
running = True
while running:
# Держим цикл на скорости
clock.tick(FPS)
# Ввод процесса (события)
for event in pygame.event.get():
# проверка для закрытия окна
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
player.shoot()
# Обновление
all_sprites.update()
hits = pygame.sprite.groupcollide(mobs, bullets, True, True)
for hit in hits:
m = Mob()
all_sprites.add(m)
mobs.add(m)
# Проверка, не ударил ли враг игрока
hits = pygame.sprite.spritecollide(player, mobs, False)
if hits:
running = False
# Проверка, не ударил ли перс жуть игрока
# Не работает совершенно
hits = pygame.sprite.spritecollide(player, adidas, False)
if hits:
running = False
# Рендеринг
screen.fill(BLACK)
all_sprites.draw(screen)
# После отрисовки всего, переворачиваем экран
pygame.display.flip()
game_1()
pygame.quit()