Вот склепал класс преграды для игры на пегейме :
#Класс преграды для персанажа
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
Есть две группы:
all_sprites = pygame.sprite.Group()
platforms.add(PT1)
В общем при попытки вызвать спрайта выдаёт ошибку “‘pregrada’ object has no attribute ‘_Sprite__g’”
что самое интересное в другой версии игры где я пользовал данный способ всё работало.
Вот сам способ.
#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)
Вот вся игра целиком.
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)