При создании игры на Pygame появился зелёный экран с точками, не понимаю, в чём ошибка, буду очень благодарна за помощь!
from kitten_classes import * #это основной файл kittens
def main():
game = Kittens()
game.launch()
if __name__ == "__main__":
main()
import pygame #это файл kitten_classes с основными алгоритмами
class Kittens:
def __init__(self):
pygame.init()
self.initialize_screen()
self.levels = self.load_levels()
self.running = True
def initialize_screen(self):
pygame.display.set_mode(1280, 960)
pygame.display.set_caption("Kittens")
def load_levels(self):
with open("pygame_kittens/levls/levels") as file:
levels = []
for line in file:
line = line.rstrip()
if line:
if line.startswith("LEVEL"):
level = {"map": [], "player": [], "crates": []}
elif line.startswith("P: "):
x, y = map(int, line[3:].split(","))
level["player"].append((x, y))
elif line.startswith("C: "):
crates = line[3:].split()
for crate in crates:
x, y = map(int, crate.split(","))
level["crates"].append((x, y))
elif line == "END LEVEL":
levels.append(level)
else:
level["map"].append(line)
return tuple(levels)
def launch(self):
while self.running:
self.handle_events()
self.updates()
self.updates_display()
def handle_events(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.running = False
def updates(self):
...
def updates_display(self):
...
def del(self):
pygame.quit()
#дальше идёт файл с уровнем
LEVEL 1
#####
####---#
#----X-#
####---#
#####
P: 1,2
C: 6,2 5,3
END LEVEL
Ответы (2 шт):
Столкнулся с той же проблемой, решил её, удалив строки:
from pygame.examples.go_over_there import clock, screen
from pygame.examples.moveit import WIDTH, HEIGHT
которые появились серым под import pygame
Зелёный экран с точками в Pygame обычно возникает, когда ты не очищаешь экран перед отрисовкой нового кадра или не обновляешь экран после отрисовки.
from kitten_classes import * # это основной файл kittens
def main():
game = Kittens()
game.launch()
if __name__ == "__main__":
main()
import pygame # это файл kitten_classes с основными алгоритмами
class Kittens:
def __init__(self):
pygame.init()
self.initialize_screen()
self.levels = self.load_levels()
self.running = True
def initialize_screen(self):
self.screen = pygame.display.set_mode((1280, 960))
pygame.display.set_caption("Kittens")
def load_levels(self):
with open("pygame_kittens/levls/levels") as file:
levels = []
for line in file:
line = line.rstrip()
if line:
if line.startswith("LEVEL"):
level = {"map": [], "player": [], "crates": []}
elif line.startswith("P: "):
x, y = map(int, line[3:].split(","))
level["player"].append((x, y))
elif line.startswith("C: "):
crates = line[3:].split()
for crate in crates:
x, y = map(int, crate.split(","))
level["crates"].append((x, y))
elif line == "END LEVEL":
levels.append(level)
else:
level["map"].append(line)
return tuple(levels)
def launch(self):
while self.running:
self.handle_events()
self.updates()
self.updates_display()
def handle_events(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.running = False
def updates(self):
pass
def updates_display(self):
# Очищаем экран
self.screen.fill((0, 0, 0)) # Заливаем экран чёрным цветом
# Обновляем экран
pygame.display.flip()
def __del__(self):
pygame.quit()
# дальше идёт файл с уровнем
# LEVEL 1
# #####
# ####---#
# #----X-#
# ####---#
# #####
# P: 1,2
# C: 6,2 5,3
#
#
# END LEVEL
Твои ошибки:
Ошибка в initialize_screen: Метод pygame.display.set_mode принимает кортеж с размерами экрана, а не два отдельных аргумента. Нужно исправить на pygame.display.set_mode((1280, 960))
Отсутствие очистки экрана: В методе updates_display нужно очищать экран перед отрисовкой нового кадра с помощью pygame.Surface.fill.
Отсутствие обновления экрана: После отрисовки всех объектов нужно обновлять экран с помощью pygame.display.flip() или pygame.display.update().