Весь вечер мучаюсь с тем что не получается перенести класс Bullet с одного кода игры в другой. Вот сам код класса игры.
Вот есть у нас сам класс перса у него есть обработчик свойства функция shoot. Ну и вот код класса самого персонажа
Класс прыгаете бегает при нажатие кнопок вроде как не глючит. Но вот при клики на энтере выстрел обрабатываемым кодом
Не могу сообразить где именно у меня ошибка когда вроде все должно работать но оно не чего не происходит. Я уже всё поп перепробовал но вот не как событие не работает. В играх я не очень по этому тут для меня просто много чего непонятного особенно эти спрайты. Вот код игры ниже для полной картины как говориться да и может кому пригодится.
Python:
class Bullet(pygame.sprite.Sprite):
def __init__(self, x, y):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((4, 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()
Вот есть у нас сам класс перса у него есть обработчик свойства функция shoot. Ну и вот код класса самого персонажа
Python:
#Класс персонажа
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
#self.image = pygame.image.load("character.png")
self.surf = pygame.Surface((40, 60))
self.surf.fill((128,255,40))
self.rect = self.surf.get_rect()
self.rect.centerx = WIDTH / 2
self.rect.bottom = HEIGHT - 200
self.pos = vec((300, 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
#------------------------------------------------------
# обработка выстрела
def shoot(self):
bullet = Bullet(self.rect.centerx, self.rect.top)
all_sprites.add(bullet)
bullets.add(bullet)
#--------------------------------------------------------
Python:
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()
#Событие выстрела перса
elif event.key == pygame.K_KP_ENTER:
P1.shoot()
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("Палигон отработки решений")
#Класс персонажа
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
#self.image = pygame.image.load("character.png")
self.surf = pygame.Surface((40, 60))
self.surf.fill((128,255,40))
self.rect = self.surf.get_rect()
self.rect.centerx = WIDTH / 2
self.rect.bottom = HEIGHT - 200
self.pos = vec((300, 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
#------------------------------------------------------
# обработка выстрела
def shoot(self):
bullet = Bullet(self.rect.centerx, self.rect.top)
all_sprites.add(bullet)
bullets.add(bullet)
#--------------------------------------------------------
#Клас платформы
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):
super().__init__()
self.surf = pygame.Surface((40, 40))
self.surf.fill((BLUE))
self.rect = self.surf.get_rect()
self.rect.x = zx
self.rect.y = zy
def move(self):
pass
#Лечилка появляется в случайном месте карты игры
class hil(pygame.sprite.Sprite):
def __init__(self,zx,zy):
super().__init__()
self.surf = pygame.Surface((40, 40))
self.surf.fill((WHITE))
self.rect = self.surf.get_rect()
self.rect.x = zx
self.rect.y = zy
def move(self):
pass
#Класс выстрелов
class Bullet(pygame.sprite.Sprite):
def __init__(self, x, y):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((4, 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()
PT1 = platform()
P1 = Player()
all_sprites = pygame.sprite.Group()
all_sprites.add(PT1)
all_sprites.add(P1)
platforms = pygame.sprite.Group()
hilila = pygame.sprite.Group()
pre = pygame.sprite.Group()
#Группа выстрилов
bullets = pygame.sprite.Group()
platforms.add(PT1)
#Функции и всякая ерунда
#Функция посроения платформ
def platfornome (x,y):
K = pregrada(x,y) #Кардинаты платформы
all_sprites.add(K)
platforms.add(K)
#Функция размещение хила
def hililka (x,y):
K = hil(x,y) #Кардинаты платформы
all_sprites.add(K)
hilila.add(K)
#####################################################
"""
- это платформа (реализовано)
+ это хилилка (реализована )
$ это враг
# это жуть при соприкосновение игра заканчивается
"""
#Карата уравня 1
lavel = [
"- - - -",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ---- ",
" ",
" ",
" ",
" ----------- ",
" ",
" ",
" --- ",
" ",
" ",
"-----------------------------------"]
#Построение уровня
x = 0
y = 0
for row in lavel:
for col in row:
if col == '-':
platfornome (x,y) #Строим платформы в режиме онлаин
elif col == '+':
hililka (x,y)
x += 40
x = 0
y += 40
##########################################################
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()
#Событие выстрела перса
elif event.key == pygame.K_KP_ENTER:
P1.shoot()
displaysurface.fill((0,0,0))
all_sprites.update()
for entity in all_sprites:
displaysurface.blit(entity.surf, entity.rect)
entity.move()
pygame.display.flip()
#pygame.display.update()
FramePerSec.tick(FPS)