gpt4 book ai didi

python - Pygame 屏幕抖动减慢游戏速度如何修复?

转载 作者:行者123 更新时间:2023-12-04 03:41:14 28 4
gpt4 key购买 nike

所以我试图在玩家跳跃时为他做一个屏幕抖动

video每当我 blitting 我的 render_offset 时,当我的玩家跳跃时,这将使我的屏幕摇晃,当我加载到我的游戏中时,游戏将运行缓慢,我不确定为什么?我正在尝试为我的游戏实现屏幕抖动方法,但这总是会使我的游戏启动缓慢而且我不知道为什么,因为我只是在添加此部分以使我的屏幕抖动工作时将我的 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

我的完整游戏代码:Script

我不确定为什么它能在我的测试版上运行,尽管我对我的游戏做了同样的事情为什么它在我的游戏上滞后但在这里不滞后任何有用的修复都值得赞赏!我正在尝试在我的播放器无延迟地跳跃时进行屏幕抖动,谢谢!

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()

最佳答案

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

An optional area rectangle can be passed as well. This represents a smaller portion of the source Surface to draw.

计算显示表面的减少面积:

pos = max(0, render_offset[0]), max(0, render_offset[1])

area_rect = display.get_rect()
area_rect.width -= abs(render_offset[0])
area_rect.height -= abs(render_offset[1])

window.blit(display, pos, area_rect)

关于python - Pygame 屏幕抖动减慢游戏速度如何修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66002650/

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