Задать вопрос
@Span4ev

Что не так с производительностью pygame и этим кодом?

Скопировал код с одного сайта, вставил к себе и запустил, поглядеть, как работает.
Охренел от производительности. Объект двигается секунду, потом зависает на секунд 7 (ну это по-разному)
Висит, не двигается, ждёт чего-то. Бывает, что движение происходит и спустя пол минуты

Закрыл браузер и всё лишнее до кучи - не помогло. При этом загрузка проца и памяти в районе 20%

Почему? Тут производятся какие-то квантовые вычсления, от которых задыхается пайтон или пайгейм?

Зачем мне знать, почему так медленно работает?

1. Возможно это плохой пример кода и того, как не надо делать.
2. Может всё упирается в производительность (Потенциал) pygame и так и должно быть, а значит pygame - такое себе.
3. Может быть у меня проблемы с оперативкой, которые я раньше не замечал или с винтом, с осью, с мышкой и вебкой.
4. Слабый ПК для таких расчётов: i7 4770k, 16 RAM, SSD

С фэпээсиком игрался, даже 600 не спасает. Если у вас всё нормально, значит это плохой для меня знак. Буду искать причину

Успел написать этот текст, а объект (синий круг) ещё не достиг края экрана

собсно:

import pygame

pygame.init()

width = 600 # ширина окна
height = 400 # высота окна
radius = 20   # радиус круга
pos_x = 300 # координата x центра круга
pos_y = 200 # координата y центра круга

green = (0, 255, 0)
blue = (0, 0, 255)
speed = 1 # скорость перемещения
move_x = speed
move_y = speed

screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Игровое окно")
screen.fill(green)
pygame.display.flip()
FPS = 60
clock = pygame.time.Clock()

running = True
while running:
	for event in pygame.event.get():
	   
		if event.type == pygame.QUIT:
			running = False
		pos_x += move_x
		pos_y += move_y

		if pos_y + radius > height or pos_y - radius < 0:
			move_y = move_y * -1
		if pos_x + radius > width or pos_x - radius < 0:
			move_x = move_x * -1
	
	screen.fill(green)
	pygame.draw.circle(screen, blue, (pos_x, pos_y), radius)
	pygame.display.flip()
	clock.tick(FPS)
	
pygame.quit()
  • Вопрос задан
  • 292 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
S1riyS
@S1riyS
Вынесите блок с проверкой положения из цикла for event in pygame.event.get()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Замерь время выполнения отдельных участков кода через time.perf_counter(), узнай на чем оно задумывается.
По мне так наиболее вероятные кандидаты - pygame.event.get() и screen.fill().
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы