关于滞后的入门查询
Starter query about lag
好的。我的问题是,当我 运行 我的代码时,它会延迟除单击 a 或 d 时移动功能以外的所有其他功能。就像从天上飞来的球一样,它只是暂时停止移动。我如何解决它?
这是我制作的屏幕代码:
import pygame as py
import os
import time
NÄYTTÖX = 900
NÄYTTÖY = 675
颜色如下:
SKY_BLUE = (0, 128, 255)
GREEN = (0, 255, 0)
这里是让玩家参与:
PELAAJA_HALKAISIJA = 100
syötävä_halkaisija = 20
SCREEN = py.display.set_mode((NÄYTTÖX, NÄYTTÖY))
PELAAJA = py.image.load(os.path.join("Assets", "packman.png"))
PELAAJA = py.transform.rotate(py.transform.scale(PELAAJA, (PELAAJA_HALKAISIJA,
PELAAJA_HALKAISIJA)), 90)
这里是我的背景:
TAUSTA = py.transform.scale(py.image.load(os.path.join("Assets", "space.png")), (NÄYTTÖX,
NÄYTTÖY))
这里我在屏幕上绘制所有内容:
def piirto(syötävärect, pelaajarect):
SCREEN.blit(TAUSTA, (0, 0))
SCREEN.blit(PELAAJA, (pelaajarect.x, pelaajarect.y))
py.draw.circle(SCREEN, GREEN, (syötävärect.x, syötävärect.y), syötävä_halkaisija)
py.display.update()
这是主要功能:
def main():
pelaajarect = py.Rect(NÄYTTÖX / 2 - PELAAJA_HALKAISIJA / 2, NÄYTTÖY - PELAAJA_HALKAISIJA *
1.7, PELAAJA_HALKAISIJA, PELAAJA_HALKAISIJA)
syötävärect = py.Rect(NÄYTTÖX / 2, 0, syötävä_halkaisija, syötävä_halkaisija)
clock = py.time.Clock()
run = True
while run:
clock.tick(60)
for event in py.event.get():
if event.type == py.QUIT:
run = False
这是我的关键代码:
if event.type == py.KEYDOWN:
if event.key == py.K_a:
if pelaajarect.x == 400 or pelaajarect.x == 600:
for i in range(100):
pelaajarect.x -= 2
piirto(syötävärect, pelaajarect)
time.sleep(0.0007)
elif event.key == py.K_d:
if pelaajarect.x == 400 or pelaajarect.x == 200:
for i in range(100):
pelaajarect.x += 2
piirto(syötävärect, pelaajarect)
time.sleep(0.0007)
这使得天上的球永远下落:
if syötävärect.y < NÄYTTÖY:
syötävärect.y += 2
else:
syötävärect.y = 0
这是其他所有内容:
piirto(syötävärect, pelaajarect)
py.quit
if __name__ == "__main__":
main()
所以它不起作用。我使用 VScode 工作室
切勿尝试在应用程序循环内使用循环来控制应用程序。使用应用程序循环并更改对象在每一帧中的位置:
添加一个变量target_x
。在事件循环中设置变量并将对象移动到应用程序循环中的目标:
def main():
pelaajarect = py.Rect(NÄYTTÖX / 2 - PELAAJA_HALKAISIJA / 2, NÄYTTÖY - PELAAJA_HALKAISIJA *
1.7, PELAAJA_HALKAISIJA, PELAAJA_HALKAISIJA)
syötävärect = py.Rect(NÄYTTÖX / 2, 0, syötävä_halkaisija, syötävä_halkaisija)
# init target None
target_x = None
clock = py.time.Clock()
run = True
while run:
clock.tick(60)
for event in py.event.get():
if event.type == py.QUIT:
run = False
if event.type == py.KEYDOWN:
if event.key == py.K_a:
if pelaajarect.x == 400 or pelaajarect.x == 600:
# set target position
target_x = pelaajarect.x + 200
elif event.key == py.K_d:
if pelaajarect.x == 400 or pelaajarect.x == 200:
# set target position
target_x = pelaajarect.x - 200
# move to target position
if target_x != None:
if pelaajarect.x < target_x:
pelaajarect.x += 2
elif pelaajarect.x > target_x:
pelaajarect.x -= 2
if syötävärect.y < NÄYTTÖY:
syötävärect.y += 2
else:
syötävärect.y = 0
piirto(syötävärect, pelaajarect)
py.quit()
好的。我的问题是,当我 运行 我的代码时,它会延迟除单击 a 或 d 时移动功能以外的所有其他功能。就像从天上飞来的球一样,它只是暂时停止移动。我如何解决它? 这是我制作的屏幕代码:
import pygame as py
import os
import time
NÄYTTÖX = 900
NÄYTTÖY = 675
颜色如下:
SKY_BLUE = (0, 128, 255)
GREEN = (0, 255, 0)
这里是让玩家参与:
PELAAJA_HALKAISIJA = 100
syötävä_halkaisija = 20
SCREEN = py.display.set_mode((NÄYTTÖX, NÄYTTÖY))
PELAAJA = py.image.load(os.path.join("Assets", "packman.png"))
PELAAJA = py.transform.rotate(py.transform.scale(PELAAJA, (PELAAJA_HALKAISIJA,
PELAAJA_HALKAISIJA)), 90)
这里是我的背景:
TAUSTA = py.transform.scale(py.image.load(os.path.join("Assets", "space.png")), (NÄYTTÖX,
NÄYTTÖY))
这里我在屏幕上绘制所有内容:
def piirto(syötävärect, pelaajarect):
SCREEN.blit(TAUSTA, (0, 0))
SCREEN.blit(PELAAJA, (pelaajarect.x, pelaajarect.y))
py.draw.circle(SCREEN, GREEN, (syötävärect.x, syötävärect.y), syötävä_halkaisija)
py.display.update()
这是主要功能:
def main():
pelaajarect = py.Rect(NÄYTTÖX / 2 - PELAAJA_HALKAISIJA / 2, NÄYTTÖY - PELAAJA_HALKAISIJA *
1.7, PELAAJA_HALKAISIJA, PELAAJA_HALKAISIJA)
syötävärect = py.Rect(NÄYTTÖX / 2, 0, syötävä_halkaisija, syötävä_halkaisija)
clock = py.time.Clock()
run = True
while run:
clock.tick(60)
for event in py.event.get():
if event.type == py.QUIT:
run = False
这是我的关键代码:
if event.type == py.KEYDOWN:
if event.key == py.K_a:
if pelaajarect.x == 400 or pelaajarect.x == 600:
for i in range(100):
pelaajarect.x -= 2
piirto(syötävärect, pelaajarect)
time.sleep(0.0007)
elif event.key == py.K_d:
if pelaajarect.x == 400 or pelaajarect.x == 200:
for i in range(100):
pelaajarect.x += 2
piirto(syötävärect, pelaajarect)
time.sleep(0.0007)
这使得天上的球永远下落:
if syötävärect.y < NÄYTTÖY:
syötävärect.y += 2
else:
syötävärect.y = 0
这是其他所有内容:
piirto(syötävärect, pelaajarect)
py.quit
if __name__ == "__main__":
main()
所以它不起作用。我使用 VScode 工作室
切勿尝试在应用程序循环内使用循环来控制应用程序。使用应用程序循环并更改对象在每一帧中的位置:
添加一个变量target_x
。在事件循环中设置变量并将对象移动到应用程序循环中的目标:
def main():
pelaajarect = py.Rect(NÄYTTÖX / 2 - PELAAJA_HALKAISIJA / 2, NÄYTTÖY - PELAAJA_HALKAISIJA *
1.7, PELAAJA_HALKAISIJA, PELAAJA_HALKAISIJA)
syötävärect = py.Rect(NÄYTTÖX / 2, 0, syötävä_halkaisija, syötävä_halkaisija)
# init target None
target_x = None
clock = py.time.Clock()
run = True
while run:
clock.tick(60)
for event in py.event.get():
if event.type == py.QUIT:
run = False
if event.type == py.KEYDOWN:
if event.key == py.K_a:
if pelaajarect.x == 400 or pelaajarect.x == 600:
# set target position
target_x = pelaajarect.x + 200
elif event.key == py.K_d:
if pelaajarect.x == 400 or pelaajarect.x == 200:
# set target position
target_x = pelaajarect.x - 200
# move to target position
if target_x != None:
if pelaajarect.x < target_x:
pelaajarect.x += 2
elif pelaajarect.x > target_x:
pelaajarect.x -= 2
if syötävärect.y < NÄYTTÖY:
syötävärect.y += 2
else:
syötävärect.y = 0
piirto(syötävärect, pelaajarect)
py.quit()