我正在尝试让玩家跳跃时出现屏幕抖动。
视频 每当我渲染偏移量时(这将允许屏幕在玩家跳跃时晃动),当我加载游戏时,游戏会变得非常缓慢,我不知道为什么?我想实现一个屏幕抖动方法,但这总是会使我的游戏开始变慢,我不知道为什么,因为我只是将我的渲染偏移量 blitting 到窗口中。当我添加屏幕抖动来使其工作并加载游戏时,一切都运行缓慢,而屏幕抖动却起作用。如果我删除它,它就不起作用,而游戏会平稳运行。我需要找到一种方法,在不影响屏幕性能的情况下使其起作用。谢谢!
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()