首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Starter查询关于lag

Starter查询关于lag
EN

Stack Overflow用户
提问于 2021-07-09 16:01:01
回答 1查看 15关注 0票数 1

好吧。我的问题是,当我运行我的代码时,当你点击a或d时,它会延迟除了移动函数之外的所有事情,就像从天空飞过的球一样,它会停止移动一段时间。我该如何修复它?下面是我制作屏幕的代码:

代码语言:javascript
复制
import pygame as py
import os
import time

NÄYTTÖX = 900
NÄYTTÖY = 675

以下是颜色:

代码语言:javascript
复制
SKY_BLUE = (0, 128, 255)
GREEN = (0, 255, 0)

下面是让玩家参与进来的内容:

代码语言:javascript
复制
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)

在这里,我将介绍我的背景:

代码语言:javascript
复制
TAUSTA = py.transform.scale(py.image.load(os.path.join("Assets", "space.png")), (NÄYTTÖX, 
NÄYTTÖY))

我在这里绘制屏幕上的所有内容:

代码语言:javascript
复制
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()

这是主要的函数:

代码语言:javascript
复制
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

以下是我的密钥代码:

代码语言:javascript
复制
            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)

这会使天空中的球永远落下:

代码语言:javascript
复制
        if syötävärect.y < NÄYTTÖY:
            syötävärect.y += 2
        else:
            syötävärect.y = 0

以下是其他所有内容:

代码语言:javascript
复制
        piirto(syötävärect, pelaajarect)
    py.quit

if __name__ == "__main__":
    main()

所以它不起作用。我使用VScode studios

EN

回答 1

Stack Overflow用户

发布于 2021-07-09 16:11:47

不要试图在应用程序循环中使用循环来控制应用程序。使用应用程序循环并更改对象在每个帧中的位置:

添加一个变量target_x。在事件循环中设置变量,并将对象移动到应用程序循环中的目标:

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68313239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档