Не могу запустить класс в игре.

ruivit

Новичок
Пользователь
Дек 13, 2021
3
0
1
В общем битый день мучаюсь с тем что не получается запустить класс.
Python:
#Класс преграды для персонажа
class pregrada(pygame.sprite.Sprite):
    def __init__(self,zx,zy):
        self.surf = pygame.Surface((20, 300))
        self.surf.fill((255,0,0))
        self.rect = self.surf.get_rect()

        self.rect.x = zx
        self.rect.y = zy
        
    def move(self):
       pass

Ранне использовал подобный способ подключения и он работал сейчас внизапно перестал. :(. В чём причина я так и не понял.
Python:
all_sprites = pygame.sprite.Group()

all_sprites.add(PT1)
all_sprites.add(P1)
platforms = pygame.sprite.Group()
pre = pygame.sprite.Group()

platforms.add(PT1)


#####################################################

     #Карта `
  
#lavel = [i for i in range(int(0), int(WIDTH) + 1)]
lavel = [0,1,2,3,4,5,6,7,8,9]
#level[1] = 10
    #постпроение карты
for i in range(10):
    if  i == 1:
        K = pregrada(i,650) #Кардинаты платформы
        all_sprites.add(K)
        platforms.add(K)
        

##########################################################


Если что вот код целиком игры
Python:
import pygame
from pygame.locals import *
import sys
import random
import clasiki
import array

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()
vec = pygame.math.Vector2 #2 for two dimensional
 
WIDTH = 1400  # Длина сцены
HEIGHT = 750 #Ширина сцены
ACC = 0.5
FRIC = -0.12
FPS = 60
 
FramePerSec = pygame.time.Clock()
 
displaysurface = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Game")
 
class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        #self.image = pygame.image.load("character.png")
        self.surf = pygame.Surface((40, 120))
        self.surf.fill((128,255,40))
        self.rect = self.surf.get_rect()
  
        self.pos = vec((10, 360))
        self.vel = vec(0,0)
        self.acc = vec(0,0)
 
    def move(self):
        self.acc = vec(0,0.5)
    
        pressed_keys = pygame.key.get_pressed()
                
        if pressed_keys[K_LEFT]:
            self.acc.x = -ACC
        if pressed_keys[K_RIGHT]:
            self.acc.x = ACC
                
        self.acc.x += self.vel.x * FRIC
        self.vel += self.acc
        self.pos += self.vel + 0.5 * self.acc
        
        if self.pos.x > WIDTH:
            self.pos.x = 0
        if self.pos.x < 0:
            self.pos.x = WIDTH
            
        self.rect.midbottom = self.pos
 
    def jump(self):
        hits = pygame.sprite.spritecollide(self, platforms, False)
        if hits:
           self.vel.y = -15
 
 
    def update(self):
        hits = pygame.sprite.spritecollide(P1 ,platforms, False)
        if P1.vel.y > 0:       
            if hits:
                self.vel.y = 0
                self.pos.y = hits[0].rect.top + 1
 
 
class platform(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.surf = pygame.Surface((WIDTH, 20))
        self.surf.fill((255,0,0))
        self.rect = self.surf.get_rect(center = (WIDTH/2, HEIGHT - 10))
 
    def move(self):
        pass


#Класс преграды для персанажа
class pregrada(pygame.sprite.Sprite):
    def __init__(self,zx,zy):
        self.surf = pygame.Surface((20, 300))
        self.surf.fill((255,0,0))
        self.rect = self.surf.get_rect()

        self.rect.x = zx
        self.rect.y = zy
        
    def move(self):
       pass
 

PT1 = platform()
P1 = Player()
all_sprites = pygame.sprite.Group()

all_sprites.add(PT1)
all_sprites.add(P1)


platforms = pygame.sprite.Group()
pre = pygame.sprite.Group()

platforms.add(PT1)


#####################################################

     #Карта `
  
#lavel = [i for i in range(int(0), int(WIDTH) + 1)]
lavel = [0,1,2,3,4,5,6,7,8,9]
#level[1] = 10

    #постпроение карты
for i in range(10):
    if  i == 1:
        K = pregrada(i,650) #Кардинаты платформы
        all_sprites.add(K)
        platforms.add(K)
        

##########################################################
 
 
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.KEYDOWN:   
            if event.key == pygame.K_SPACE:
                P1.jump()          
    displaysurface.fill((0,0,0))
    P1.update()
 
    for entity in all_sprites:
        displaysurface.blit(entity.surf, entity.rect)
        entity.move()
    pygame.display.flip()
    #pygame.display.update()
    FramePerSec.tick(FPS)
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Ранне использовал подобный способ подключения и он работал сейчас внизапно перестал. :(. В чём причина я так и не понял.
Причина в том, что не был вызван конструктор родительского класса pygame.sprite.Sprite.
Чтобы исправить замените эти строки кода:
Python:
#Класс преграды для персонажа
class pregrada(pygame.sprite.Sprite):
    def __init__(self,zx,zy):
        self.surf = pygame.Surface((20, 300))
        self.surf.fill((255,0,0))
        self.rect = self.surf.get_rect()

        self.rect.x = zx
        self.rect.y = zy
        
    def move(self):
       pass
на такие
Python:
#Класс преграды для персанажа
class pregrada(pygame.sprite.Sprite):
    def __init__(self,zx,zy):
        super().__init__()
        self.surf = pygame.Surface((20, 300))
        self.surf.fill((255,0,0))
        self.rect = self.surf.get_rect()

        self.rect.x = zx
        self.rect.y = zy
        
    def move(self):
       pass
 

Форум IT Специалистов