Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame屏幕抖动减慢游戏如何修复?_Python_Pygame - Fatal编程技术网

Python Pygame屏幕抖动减慢游戏如何修复?

Python Pygame屏幕抖动减慢游戏如何修复?,python,pygame,Python,Pygame,所以我试图为玩家制作一个屏幕震动,当他跳的时候 当我在blitting我的render_offset时,当我的玩家跳跃时,我的屏幕会抖动,当我加载到游戏中时,游戏会运行缓慢,我不知道为什么?我正在尝试为我的游戏实施一种屏幕震动方法,但这总是会使我的游戏开始变慢,我不知道为什么,因为我只是在我添加此部分以使我的屏幕震动工作时将我的渲染偏移量点放到我的窗口上,我在游戏中加载所有内容都会变慢,屏幕震动会工作,但如果我删除它,游戏将无法工作将运行平稳我需要一种方法,使这项工作不落后于我的屏幕谢谢

所以我试图为玩家制作一个屏幕震动,当他跳的时候

当我在blitting我的render_offset时,当我的玩家跳跃时,我的屏幕会抖动,当我加载到游戏中时,游戏会运行缓慢,我不知道为什么?我正在尝试为我的游戏实施一种屏幕震动方法,但这总是会使我的游戏开始变慢,我不知道为什么,因为我只是在我添加此部分以使我的屏幕震动工作时将我的渲染偏移量点放到我的窗口上,我在游戏中加载所有内容都会变慢,屏幕震动会工作,但如果我删除它,游戏将无法工作将运行平稳我需要一种方法,使这项工作不落后于我的屏幕谢谢

        window.blit(window,(render_offset))

下面是屏幕震动的工作原理如果我们点击空格,那么我们的震动将等于20 下面说如果抖动不大于0:然后保持-抖动为1,然后我们有一个带有列表的渲染变量,然后在下面说如果抖动,然后随机化两个列表

         # screenshakey
        if keys[pygame.K_SPACE]:
            shake = 20

        if shake > 0:
            shake -= 1

        render_offset = [0,0]
        if shake :
            render_offset[0] = random.randint(0, 8) - 4
            render_offset[1] = random.randint(0, 8) - 4
我的完整游戏代码:

我不知道为什么它在我的测试版本上工作,即使我在我的游戏上做了同样的事情。为什么它在我的游戏上落后了,但在这里没有落后呢?任何有用的修复都是非常感谢的!当我的播放器没有延迟地跳跃时,我正在尝试制作我的屏幕震动谢谢

import pygame,time,random
pygame.init()

WINDOW_SIZE = (500,500)
window = pygame.display.set_mode((WINDOW_SIZE), pygame.NOFRAME)
display = pygame.Surface((500,500)) # used as the surface for rendering, which is scaled

class player:
    def __init__(self,x,y,height,width,color):
        self.x = x
        self.y = y
        self.height = height
        self.width = width
        self.color = color
        self.rect = pygame.Rect(x,y,height,width)
    def draw(self):
        self.rect.topleft = (self.x,self.y)
        pygame.draw.rect(display,self.color,self.rect)

white = (205,105,205)
player1 = player(250,250,50,50,white)
player2 = player(290,250,150,50,white)
player3 = player(350,250,50,150,white)

def redraw():
    display.fill((0,0,0))
    player1.draw()
    player2.draw()
    player3.draw()


run = True
fps = 60
clock = pygame.time.Clock()

screenshake = 0
while run:
    clock.tick(fps)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    keys = pygame.key.get_pressed()
# 
     # screenshakey
    if keys[pygame.K_SPACE]:
        screenshake = 30

    if keys[pygame.K_RIGHT]:
        player1.x += 4
    if keys[pygame.K_LEFT]:
        player1.x -= 4
        
        
    if screenshake > 0:
        screenshake -= 1

    render_offset = [0,0]
    if screenshake:
        render_offset[0] = random.randint(0, 8) - 4
        render_offset[1] = random.randint(0, 8) - 4

    redraw()
    window.blit(pygame.transform.scale(display,WINDOW_SIZE),render_offset)

    pygame.display.update()

pygame.quit()


尝试使用方法的可选区域参数来提高性能:

也可以传递一个可选的区域矩形。这表示要绘制的源曲面的较小部分

计算
显示屏的缩小面积
表面:

pos=max(0,渲染偏移[0]),max(0,渲染偏移[1])
area_rect=display.get_rect()
area_rect.width-=abs(渲染偏移[0])
区域垂直高度-=abs(渲染偏移[1])
窗口(显示、位置、区域)