gpt4 book ai didi

python - Pygame 循环检查速度很少

转载 作者:行者123 更新时间:2023-12-03 14:06:38 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Faster version of 'pygame.event.get()'. Why are events being missed and why are the events delayed?

(1 个回答)


1年前关闭。




我正在尝试在pygame(python 3)中重新创建蛇,我想做的是每一帧,通过检查按键来检查蛇的速度,但它很少意识到我正在按下一个键,我做错了什么/我应该怎么做(代码在下面),我不明白为什么这不起作用,因为其他所有东西都可以立即运行,例如 clear 函数,甚至是做非常相似的事情的 handle(),所以它使我不知道为什么它不起作用

import pygame
from pygame.locals import *
import math
import random

pygame.init()
display = pygame.display.set_mode((512, 512))
pygame.display.set_caption("Snake")
display.fill((255, 255, 255))

def handle():
global x, y
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()

def make_apple():
x, y = random.randint(0, 502), random.randint(0, 502)
pygame.draw.rect(display, (255, 0, 0), (x, y, 10, 10))
return x, y

# -- COLLISION DETECTION -- #

def r(fox, foy, cR, sox, soy):
dx = abs(fox - sox)
dy = abs(foy - soy)
if dx < cR and dy < cR:
return True
else:
return False

def clear(aX, aY):
global x, y
display.fill((255, 255, 255))
pygame.draw.rect(display, (255, 0, 0), (aX, aY, 10, 10))
draw_snake(x, y)

def draw_snake(x, y):
pygame.draw.rect(display, (0, 255, 0), (x, y, 10, 10))

def set_vel():
for event in pygame.event.get():
if event.type == KEYDOWN:
print("KEY")
if event.key == K_LEFT:
yVel = 0
xVel = -1
elif event.key == K_RIGHT:
yVel = 0
xVel = 1
elif event.key == K_UP:
yVel = -1
xVel = 0
elif event.key == K_DOWN:
yVel = 1
xVel = 0
return xVel, yVel
return 0, 0
def update_pos(x, y, xV, yV):
x += xV
y += yV
return x, y

aX, aY = make_apple()
x, y = 256, 256
length = 1
eaten = False

while True:
velX, velY = set_vel()
clear(aX, aY)
handle()
x, y = update_pos(x, y, velX, velY)
if eaten:
aX, aY = make_apple()
eaten = False
pygame.display.update()
if r(x, y, 3, aX, aY):
display.fill((255, 255, 255))
eaten = True

最佳答案

你的问题是当你调用 pygame.event.get() ,该函数不仅获取事件,还从队列中删除它们。这意味着每帧调用它两次(就像你在 set_velhandle 中所做的那样)会产生奇怪的结果。
我写pygame的时候有一个for event in pygame.event.get()在我的 while True 中循环.尝试这样做并将退出处理和速度更改移动到 True循环而不是它们自己的函数。

关于python - Pygame 循环检查速度很少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63225864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com