Создание роликов с использованием ООП и pygamePython

Программы на Python
Anonymous
Создание роликов с использованием ООП и pygame

Сообщение Anonymous »

Вероятно, мне не хватает чего-то очевидного или простого, но я изо всех сил пытаюсь добавить «if self.cut_scene_manager.cut_scene is None:» во входные данные моего класса игрока
Вот мои main.py и player.py:

Код: Выделить всё

import pygame
import sys
from settings import *
from level import Level
from player import Player
from npc import NPC
from cut_scenes import CutSceneManager, CutSceneOne

class Game:
def __init__(self):
pygame.init()
self.screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('Passerine')
self.clock = pygame.time.Clock()
self.level = Level()
self.npc_group = pygame.sprite.Group()

self.player = Player((640, 360), self.level.all_sprites, self.level)
self.npc1 = NPC((1460, 530),self.level.all_sprites, self.level)

self.cut_scene_manager = CutSceneManager(self.screen)

def run(self):
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()

dt = self.clock.tick() / 1000
self.npc_group.update(dt)
self.npc_group.draw(self.screen)
self.level.run(dt)
self.cut_scene_manager.update()
self.cut_scene_manager.draw()
self.player.update(self.cut_scene_manager)
pygame.display.update()

if __name__ == '__main__':
game = Game()
game.run()

import pygame
from settings import *
from support import *
from cut_scenes import *

class Player(pygame.sprite.Sprite):
def __init__(self, pos, group, level):
super().__init__(group)

self.import_assets()
self.status = 'down_idle'
self.frame_index = 0

#general setup
self.image = self.animations[self.status][self.frame_index]
self.rect = self.image.get_rect(center = pos)
self.hitbox = self.rect.copy().inflate((-126, -70))
self.z = LAYERS['main']

#movement attribtes
self.direction = pygame.math.Vector2()
self.pos = pygame.math.Vector2(self.rect.center)
self.speed = 200
self.level = level
self.screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

# spawn point
self.spawn_point = 30,440

self.cut_scene_manager = CutSceneManager(self.screen)

# Set initial position to spawn point
self.reset_position()

def import_assets(self):
self.animations = {'up': [], 'down':[], 'left':[], 'right':[],
'right_idle':[], 'left_idle':[], 'up_idle':[], 'down_idle':[]}

for animation in self.animations.keys():
full_path = 'graphics/character/' + animation
self.animations[animation] = import_folder(full_path)

def reset_position(self):
self.pos = pygame.math.Vector2(self.spawn_point)
self.hitbox.center = self.pos
self.rect.center = self.hitbox.center

def set_spawn_point(self, new_spawn_point):
self.spawn_point = new_spawn_point

def animate(self, dt):
self.frame_index += 4 * dt
if self.frame_index >= len(self.animations[self.status]):
self.frame_index = 0

self.image = self.animations[self.status][int(self.frame_index)]

def input(self):
keys = pygame.key.get_pressed()
if self.cut_scene_manager.cut_scene is None:

if keys[pygame.K_UP]:
self.direction.y = -1
self.status = 'up'
elif keys[pygame.K_DOWN]:
self.direction.y = 1
self.status = 'down'
else:
self.direction.y = 0

if keys[pygame.K_RIGHT]:
self.direction.x = 1
self.status = 'right'
elif keys[pygame.K_LEFT]:
self.direction.x = -1
self.status = 'left'
else:
self.direction.x = 0

def get_status(self):  #checks if player should be idle
if self.direction.magnitude() == 0:
self.status = self.status.split('_')[0] + '_idle'

def check_collision(self, new_pos):
# Create a rect for the new position
player_rect = pygame.Rect(new_pos[0] - self.rect.width / 2, new_pos[1] - self.rect.height / 2, self.rect.width, self.rect.height)

# Iterate over the sprites in the 'Ground/walls' layer
for sprite in self.level.all_sprites:
if sprite.z == LAYERS['Walls'] and sprite.rect.colliderect(player_rect):
#print("collision with wall")
return True  # Collision detected

return False  # No collision

def move(self,dt):
# normalizing a vector
if self.direction.magnitude() > 0:
self.direction = self.direction.normalize()

# vertical movement
new_y = self.pos.y + self.direction.y * self.speed * dt

# Check if the new y position is within bounds
if 430 

Подробнее здесь: [url]https://stackoverflow.com/questions/78251596/creating-cutscenes-using-oop-and-pygame[/url]

Вернуться в «Python»