Python 当fps高于15时,Pygame蛇的速度太高

Python 当fps高于15时,Pygame蛇的速度太高,python,pygame,frame-rate,pygame-clock,pygame-tick,Python,Pygame,Frame Rate,Pygame Clock,Pygame Tick,在这个用pygame制作的蛇类游戏中,我很难计算出速度的物理特性。 问题是,当我将fps设置为15以上时,蛇的速度也会增加。 我知道这与毫秒等有关,我发现它可以工作,高fps和低速。然而,在那一点上,我无法得到正确的X和Y,这样我就可以吃苹果了。 在这一点上我几乎迷路了。 这是我的整个蛇游戏。我不介意分享它,因为我想在它完成后立即开源 导入pygame 随机输入 从pygame.locals导入( K_UP, K_下来, 库左, 好的, K_逃跑, KEYDOWN, 库恩, 库奥, 库威, 库阿

在这个用pygame制作的蛇类游戏中,我很难计算出速度的物理特性。 问题是,当我将fps设置为15以上时,蛇的速度也会增加。 我知道这与毫秒等有关,我发现它可以工作,高fps和低速。然而,在那一点上,我无法得到正确的X和Y,这样我就可以吃苹果了。 在这一点上我几乎迷路了。 这是我的整个蛇游戏。我不介意分享它,因为我想在它完成后立即开源

导入pygame
随机输入
从pygame.locals导入(
K_UP,
K_下来,
库左,
好的,
K_逃跑,
KEYDOWN,
库恩,
库奥,
库威,
库阿,
库斯,
库德,
K_返回,
退出
)
pygame.init()
pygame.display.set_标题(“Le jeu snake!”)
班级游戏:
定义初始化(自):
self.white=(255、255、255)
self.black=(0,0,0)
self.red=(255,0,0)
self.blue=(0,0255)
self.green=(0,255,0)
self.background=pygame.image.load(“snake_bg.png”)
自身屏幕宽度=600
自身屏幕高度=400
self.screen=pygame.display.set_模式([self.screen_宽度,self.screen_高度])
self.running=True
self.paused=False
自我同意=错误
self.snake_block=25
self.apple_block=25
self.snake_x=0
self.snake_y=0
self.apple_x=0
self.apple_y=0
self.center=(self.SCREEN\u宽度//2,self.SCREEN\u高度//2)
self.width_grid=0
self.height_grid=0
self.snake_x_change=0
self.snake\u y\u change=0
self.snake_list=list()
self.snake_head=list()
self.snake_长度=1
self.score=0
self.clock=pygame.time.clock()
自速度=25
def绘制网格(自):
self.width_grid=[x*25表示范围内的x(0,self.SCREEN_width)]
self.height_grid=[y*25表示范围内的y(0,self.SCREEN_WIDTH)]
“”“对于self.width\u网格中的网格\u x:
pygame.draw.line(self.screen,self.white,[0,grid\ux],[self.screen\ux,grid\ux],2)
如果网格x>=600:
打破
对于self.height_栅格中的栅格y:
pygame.draw.line(self.screen,self.white,[grid\u y,0],[grid\u y,self.screen\u WIDTH],2)
如果栅格y>=600:
打破
def设置位置(自身、物体):
如果thing==“snake”:
self.snake\u x=self.SCREEN\u宽度/2
self.snake\u y=self.SCREEN\u高度/2
如果thing==“苹果”:
self.apple\u x=random.choice(self.width\u网格[0:24])
self.apple\u y=random.choice(self.height\u grid[0:16])
def牵引(自、obj):
如果obj==“蛇”:
对于self.snake_列表中的XnY:
pygame.draw.rect(self.screen,self.green,(XnY[0],XnY[1],self.snake_块,self.snake_块),2)
elif obj==“苹果”:
pygame.draw.rect(self.screen,self.red,(self.apple_x,self.apple_y,self.apple_块,self.apple_块))
def设置键方向(自):
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
self.running=False
如果event.type==KEYDOWN:
如果event.key==K_DOWN:
self.snake\u y\u change=自速度
self.snake_x_change=0
如果event.key==K_RIGHT:
self.snake\u x\u change=自速度
self.snake\u y\u change=0
如果event.key==K_UP:
self.snake\u y\u change=-self.velocity
self.snake_x_change=0
如果event.key==K_LEFT:
self.snake\u x\u change=-self.velocity
self.snake\u y\u change=0
如果event.key==K_s:
self.snake\u y\u change=自速度
self.snake_x_change=0
如果event.key==K_w:
self.snake\u y\u change=-self.velocity
self.snake_x_change=0
如果event.key==K\u d:
self.snake\u x\u change=自速度
self.snake\u y\u change=0
如果event.key==K_a:
印刷品(“Q作品”)
self.snake\u x\u change=-self.velocity
self.snake\u y\u change=0
如果未自行商定:
如果event.key==K_转义:
pygame.quit()
如果event.key==K_返回:
自我同意
如果自行同意:
如果event.key==K\u n:
pygame.quit()
如果event.key==K_o:
self.paused=False
self.score=0
如果event.key==K_转义:
self.snake_长度+=1
self.appeased=self.clock.tick(30)
def build_snake(自身):
蛇头=列表()
snake_head.append(self.snake_x)
snake\u head.append(self.snake\u y)
self.snake\u list.append(蛇头)
如果len(self.snake_列表)>self.snake_长度:
del self.snake_列表[0]
对于snake in self.snake_列表[:-1]:
如果snake==蛇头:
self.snake_reset()
自绘(“蛇”)
def检查苹果(自身):
如果self.snake\u x==self.apple\u x和self.snake\u y==self.apple\u y:
自我设置位置(“苹果”)
self.snake_长度+=1
self.score+=1
def蛇形边界检查(自我):
如果self.snake_x<0或self.snake_x>self.SCREEN_宽度-25:
self.snake_reset()
如果self.snake_y<0或self.snake_y>self.SCREEN_高度-25:
self.snake_reset()
def snake_重置(自):
self.paused=True
自我设置位置(“蛇”)
s