为了账号安全,请及时绑定邮箱和手机立即绑定

如何让我的游戏帧不下降在pygame

如何让我的游戏帧不下降在pygame

绝地无双 2023-06-20 15:52:14
我尝试过提高 fps 但那没有用,我尝试的最后一件事是删除一些更新命令但那没有用是什么让我的游戏滞后#####################################    # LIVES AND SPIKE    for spike in spikes:        for one in range(len(spikes)-1-1-1):            if player1.rect.colliderect(spikes[one].rect):                if deaths > 0:                    deaths -= 1                    talk = font.render("LIVES = "+str(deaths),True,(255,255,255))                    talkRect.center = ((100,90))                    del spikes[one]    for pike in pikes:        for one in range(len(pikes)-1-1-1):            if player1.rect.colliderect(pikes[one].rect):                if deaths > 0:                    deaths -= 1                    talk = font.render("LIVES = "+str(deaths),True,(255,255,255))                    talkRect.center = ((100,90))                    del pikes[one]    for live in lives:        for one in range(len(lives)-1-1-1):            if player1.rect.colliderect(lives[one].rect):                if deaths > 0:                    deaths += 1                    talkRect.center = ((100,90))                    del lives[one]                     #########################################################    
查看完整描述

1 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

关于滞后部分,有几件事:

  • 正如@Kingsley 所提到的,你是双循环,对碰撞检查的数量进行平方

  • 您正在检查不在屏幕上的对象

  • 您在迭代对象时删除对象(可能解释了 -1-1-1)

试试这段代码。它移动得更快:

#     LIVES AND SPIKE

    lstdel = []

    for i,spk in enumerate(spikes):

        if spk.rect.left > 500 or spk.rect.left < 0: continue  # off screen

        if player1.rect.colliderect(spk.rect):

            if deaths > 0:

                deaths -= 1

                talk = font.render("LIVES = "+str(deaths),True,(255,255,255))

                talkRect.center = ((100,90))

                lstdel.append(i)

    for i in lstdel[::-1]:

        del spikes[i]  #delete from end

  

    lstdel = []

    for i,pk in enumerate(pikes):

        if pk.rect.left > 500 or pk.rect.left < 0: continue  # off screen

        if player1.rect.colliderect(pk.rect):

            if deaths > 0:

                deaths -= 1

                talk = font.render("LIVES = "+str(deaths),True,(255,255,255))

                talkRect.center = ((100,90))

                lstdel.append(i)

    for i in lstdel[::-1]:

        del pikes[i]  #delete from end

  

    lstdel = []

    for i, lv in enumerate(lives):

        if lv.rect.left > 500 or lv.rect.left < 0: continue  # off screen

        if player1.rect.colliderect(lv.rect):

            if deaths > 0:

                deaths += 1

                talkRect.center = ((100,90))

                lstdel.append(i)

    for i in lstdel[::-1]:

        del lives[i]  #delete from end


查看完整回答
反对 回复 2023-06-20
  • 1 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号