Python 当实现两个玩家时,Pygame会延迟

Python 当实现两个玩家时,Pygame会延迟,python,pygame,lag,multiplayer,Python,Pygame,Lag,Multiplayer,我刚开始玩pygame,遇到了一个问题——当我为两名玩家制作游戏时,第二个角色总是落后。这是我的密码 import pygame, sys from pygame.locals import * pygame.init() clock = pygame.time.Clock() background_img = pygame.image.load('Data/background.jpg') size = background_img.get_size() pygame.mixer.in

我刚开始玩pygame,遇到了一个问题——当我为两名玩家制作游戏时,第二个角色总是落后。这是我的密码

import pygame, sys
from pygame.locals import *

pygame.init()

clock = pygame.time.Clock()

background_img = pygame.image.load('Data/background.jpg')
size = background_img.get_size()

pygame.mixer.init()                         
pygame.mixer.music.load('Data/song.wav')   
pygame.mixer.music.set_volume(0.7)          
pygame.mixer.music.play(-1)    

dot_img = pygame.image.load('Data/dot.png')
dotx = 0
doty = 0
dotx_speed = 0
doty_speed = 0

circle_img = pygame.image.load('Data/circle.png')
circlex = 0
circley = 0
circlex_speed = 0
circley_speed = 0

display = pygame.display.set_mode(size)

pygame.display.set_caption('Game')

while 1: 
  for event in pygame.event.get():
      if event.type == pygame.QUIT:
          pygame.quit()
          sys.exit()

      elif event.type == pygame.KEYDOWN:
          if event.key == pygame.K_LEFT:
            dotx_speed = -10
          elif event.key == pygame.K_RIGHT:
            dotx_speed = 10
          elif event.key == pygame.K_UP:
            doty_speed = -10
          elif event.key == pygame.K_DOWN:
            doty_speed = 10
          elif event.key == pygame.K_a:
            circlex_speed = -10
          elif event.key == pygame.K_d:
            circlex_speed = 10
          elif event.key == pygame.K_w:
            circley_speed = -10
          elif event.key == pygame.L.s:
            circley_speed = 10            

    elif event.type == pygame.KEYUP:
        if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
            dotx_speed = 0
        elif event.key == pygame.K_UP or event.key == pygame.K_DOWN:
            doty_speed = 0
        elif event.key == pygame.K_a or event.key == pygame.K_d:
            circlex_speed = 0
        elif event.key == pygame.K_w or event.key == pygame.K_s:
            circley_speed = 0              

  dotx += dotx_speed
  doty += doty_speed

  circlex += circlex_speed
  circley += circley_speed    

  display.blit(background_img,(0,0))
  display.blit(dot_img,(dotx,doty))
  display.blit(circle_img,(circlex,circley))

  pygame.display.update()
  clock.tick(100)

我不太精通pygame,或者python,所以请原谅我的代码太草率。非常感谢您的帮助。

在一个流中首先使用所有事件处理程序和计算是不好的做法。例如,由于您的计算速度可能没有您想要的快(示例中为100 fps),请检查图像的分辨率

另外,您有太多的
if
-
else
语句(在您的情况下这不是错误)。你可以用dicts来代替它

使帧速率更真实(60)


请阅读,您的代码中有一些错误,例如使用
pygame.image.load('foo.png')
.convert()
方法将其转换为“以获得任何形式的速度”。我倾向于说这是因为(我假设的是第一个玩家)
dot
elif event.type==pygame.KEYDOWN
部分具有优先级。因此,
圆圈
只能在没有按下任何
控制键的情况下获得输入。不确定如何解决此问题,因为我相当确定无法检测到同时按下按键(忽略诸如
SHIFT
等修改器)。更改
if。。elif
如果。。if
可能会稍微改善一些,因为您可以在同一个循环中检测到多个键。
如果。。。if
不应更改它,因为
event.key
只能有一个值。代码看起来没问题。第二个字符是谁?即使你们并没有改变第一个角色的位置,第二个角色也有延迟?你能提供更多的信息吗?你的代码对我来说很有用,但是我在没有pygame.mixer的情况下测试了它,谢谢你的输入。我改变了帧速率,它似乎工作得更好一些,但过了一会儿,圆圈停止了,整个程序变得没有响应。(我必须强制退出应用程序。)作为对您之前评论的回应,第二个字符只是一个图像,即使我没有移动圆点,移动圆点后圆点仍然会滞后。我将阅读Pygame的新手指南。非常感谢。@JamieLin-code看起来不错。问题可能出在硬件(键盘)或操作系统上。您的意思可能是“使用pygame.image.load('foo.png')*和.convert()…*”;)