Окно пигмеев становится очень медленным, когда я пытаюсь его запустить. Пока у меня есть 132 строки кода, и у меня есть много вещей, чтобы добавить. Во время выполнения теста я заметил, что игра запаздывает, когда я добавил следующие биты кода в
class Game:
def __init__(self):
self.win = pygame.display
self.d = self.win.set_mode((1200, 600))
self.win.set_caption(" JUMP ")
self.timee = 0
def write(self, size, writing, color, x, y):
font = pygame.font.SysFont("nirmalauisemilight", size)
text = font.render(writing, True, color)
self.d.blit(text, (x, y))
def game_over(self):
if b.y >= ba.y - b.side and self.timee > 5:
while True:
self.write(200, "GAME OVER", (255, 0, 0), 20, 50)
self.write(50, "Press enter to satart a new game", (0, 255, 0), 100, 400)
pygame.event.get()
keys = pygame.key.get_pressed()
if keys[pygame.K_RETURN]:
main()
g.win.flip()
И
def draw(self):
if g.timee < 5:
pygame.draw.rect(g.d, (0, 255, 0), (self.x, self.y, self.width, self.height))
else:
pygame.draw.rect(g.d, (255, 0, 0), (self.x, self.y, self.width, self.height))
g.timee
- это переменная, которую я сделал, поэтому я могу выполнить некоторые функции после времени игры в игру. g.timee
увеличивается на 0,01 в основном l oop. Я также пытался использовать функцию time.time()
модуля времени, но она отстала от игры еще больше. Буду признателен за любые советы о том, как уменьшить отставание.
РЕДАКТИРОВАТЬ
, просматривая другие вопросы, я наткнулся на cPrifile и, используя эти данные, получил эти данные
ncalls tottime percall cumtime percall filename:lineno(function)
0.000 0.000 0.204 0.204 testing.py:10(__init__)
1 0.000 0.000 0.000 0.000 testing.py:102(platforms)
401 0.001 0.000 0.001 0.000 testing.py:21(game_over)
1 0.020 0.020 9.688 9.688 testing.py:3(main)
1 0.000 0.000 0.000 0.000 testing.py:42(Block)
1 0.000 0.000 0.000 0.000 testing.py:43(__init__)
401 0.003 0.000 0.016 0.000 testing.py:53(draw)
401 0.002 0.000 0.006 0.000 testing.py:56(move)
401 0.001 0.000 0.001 0.000 testing.py:63(jump_logic)
401 0.002 0.000 0.002 0.000 testing.py:72(fall)
1 0.000 0.000 0.000 0.000 testing.py:84(Base)
1 0.000 0.000 0.000 0.000 testing.py:85(__init__)
1 0.000 0.000 0.000 0.000 testing.py:9(Game)
401 0.001 0.000 0.009 0.000 testing.py:91(draw)
401 0.001 0.000 0.001 0.000 testing.py:97(on_base)
I Я не совсем уверен, что это значит.
РЕДАКТИРОВАТЬ 2
Вот код, который у меня есть для справки
import pygame, os, random
def main():
os.environ["SDL_VIDEO_CENTERED"] = "1"
pygame.init()
acc_gravity = 0.009
terminal_vel = 4
class Game:
def __init__(self):
self.win = pygame.display
self.d = self.win.set_mode((1200, 600), pygame.RESIZABLE)
self.win.set_caption(" JUMP ")
self.timee = 0
self.platlist = []
def write(self, size, writing, color, x, y):
font = pygame.font.SysFont("nirmalauisemilight", size)
text = font.render(writing, True, color)
self.d.blit(text, (x, y))
def game_over(self):
if b.y >= ba.y - b.side and self.timee > 5:
while True:
self.write(200, "GAME OVER", (255, 0, 0), 20, 50)
self.write(50, "Press enter to start a new game", (0, 255, 0), 100, 400)
pygame.event.get()
keys = pygame.key.get_pressed()
if keys[pygame.K_RETURN]:
main()
g.win.flip()
def control_counter(self):
if self.timee > 100:
self.timee = 100
class Block:
def __init__(self):
self.x = 600
self.y = 0
self.side = 30
self.speed = 2
self.is_jumping = False
self.gravity = 0.005
self.jump_force = 10
self.jump_strength = 0.05
def draw(self):
pygame.draw.rect(g.d, (0, 99, 99), (self.x, self.y, self.side, self.side))
def move(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_RIGHT]:
self.x += self.speed
if keys[pygame.K_LEFT]:
self.x -= self.speed
def jump_logic(self):
for event in events:
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
if self.is_jumping == False:
b.jump_force = 10
self.is_jumping = True
def fall(self):
self.y += self.gravity
self.gravity += acc_gravity
if self.gravity >= terminal_vel:
self.gravity = terminal_vel
def jump(self):
self.y -= self.jump_force
self.jump_force -= self.jump_strength
if self.jump_force <= 0:
self.jump_force = 0
class Base:
def __init__(self):
self.x = 0
self.y = 550
self.width = 1200
self.height = 20
def draw(self):
if g.timee < 5:
pygame.draw.rect(g.d, (0, 255, 0), (self.x, self.y, self.width, self.height))
else:
pygame.draw.rect(g.d, (255, 0, 0), (self.x, self.y, self.width, self.height))
def on_base(self):
if b.y >= self.y - b.side:
b.y = self.y - b.side
b.is_jumping = False
class Platforms:
def __init__(self):
self.x = random.randint(1, 1100)
self.y = random.randint(-300, 0)
self.width = 100
self.height = 20
self.speed = random.randint(1, 4)
def draw(self):
pygame.draw.rect(g.d, (0, 0, 0), (self.x, self.y, self.width, self.height))
def move(self):
self.y += self.speed
ba = Base()
b = Block()
g = Game()
for i in range(10):
g.platlist.append(Platforms())
game_loop = True
while game_loop:
g.timee += 0.01
events = pygame.event.get()
g.d.fill((98, 98, 98))
b.draw()
b.move()
b.jump_logic()
b.fall()
if b.is_jumping:
b.jump()
ba.draw()
ba.on_base()
g.game_over()
for plats in g.platlist:
plats.draw()
plats.move()
g.win.flip()
pygame.time.Clock().tick(60)
main()