#python #pygame #display
Вопрос:
Код может выдавать некоторые ошибки, но я их не понимаю. Я пытался их обыскать, но ничего не вышло!
Ошибки заключаются в:
File "d:Pythonsendsendclient.py", line 67, in <module>
main()
File "d:Pythonsendsendclient.py", line 64, in main
redrawWindow(win,p)
File "d:Pythonsendsendclient.py", line 50, in redrawWindow
pygame.display.update()
Код такой:
import pygame
width = 500
height = 500
win = pygame.display.set_mode ((width, height))
pygame.init()
pygame.display.set_caption("Client")
clientNumber = 0
class Player:
def __init__(self, x, y, width, height, color):
self.x = x
self.y = y
self.width = width
self.height = height
self.color = color
self.rect = (x,y,width,height)
self.val = 3
def draw(self,win):
pygame.init()
pygame.draw.rect(win, self.color, self.rect)
def move(self):
pygame.init()
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.x -= self.vel
if keys[pygame.K_RIGHT]:
self.x = self.vel
if keys[pygame.K_DOWN]:
self.y -= self.vel
if keys[pygame.K_UP]:
self.y = self.vel
self.rect = self.x,self.y,self.width,self.height
def redrawWindow(win,player):
player.draw(win)
win.fill((0,0,255))
pygame.display.update()
def main () :
run = True
p = Player(50,50,100,100,(0,255,0))
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
pygame.init()
pygame.quit()
pygame.init()
p.move()
redrawWindow(win,p)
pygame.init()
main()
Я пытаюсь закодировать онлайн — игру с помощью этого урока:
https://www.youtube.com/watch?v=McoDjOCb2Zoamp;t=22s
Кстати, это мой первый пост, так что извините, если я допустил какие-либо ошибки!
Ответ №1:
В нем есть опечатка Player.__init__
. self.val
должно быть self.vel
:
self.val = 3
self.vel = 3
Вам нужно нарисовать игрока после очистки фона и перед обновлением экрана:
def redrawWindow(win,player):
win.fill((0,0,255))
player.draw(win)
pygame.display.update()
Используйте pygame.time.Clock
для управления кадрами в секунду и, следовательно, скоростью игры.
Метод tick()
pygame.time.Clock
объекта задерживает игру таким образом, что каждая итерация цикла занимает один и тот же период времени. Видеть pygame.time.Clock.tick()
:
Этот метод следует вызывать один раз за кадр.
def main () :
run = True
p = Player(50,50,100,100,(0,255,0))
clock = pygame.time.Clock()
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
pygame.init()
pygame.quit()
pygame.init()
p.move()
redrawWindow(win,p)
clock.tick(60)
pygame.init()
main()
Типичный цикл приложений PyGame должен:
- обрабатывайте события с помощью или
pygame.event.pump()
илиpygame.event.get()
. - обновляйте игровые состояния и положения объектов в зависимости от входных событий и времени (соответственно кадров).
- очистите весь дисплей или нарисуйте фон
- нарисуйте всю сцену (
blit
все объекты) - обновите дисплей
pygame.display.update()
с помощью илиpygame.display.flip()
- ограничьте количество кадров в секунду, чтобы ограничить загрузку процессора с помощью
pygame.time.Clock.tick