Python清理和视觉改进

问题描述

我刚刚开始学习 Python,特别是 pygame,并且正在尝试制作一个简单的跳跃游戏。我制作了一个基本的运动脚本作为测试,但动画真的很不稳定。每当方块移动时,就会有一个残像,看起来就像它刚刚崩溃一样。此外,如果您对清理脚本有任何建议,那就太好了。

import pygame
from pygame.locals import *

SIZE = 800,600
RED = (255,0)
GRAY = (150,150,150)
x = 50
y = 50

pygame.init()
screen = pygame.display.set_mode(SIZE)

running = True
while running:
    for event in pygame.event.get():
        if event.type == QUIT:
            running = False

    pressed = pygame.key.get_pressed()

    if pressed[pygame.K_RIGHT]:
        x += 3
    if pressed[pygame.K_LEFT]:
        x -= 3
    if pressed[pygame.K_UP]:
        y -= 3
    if pressed[pygame.K_DOWN]:
        y += 3

    rect = Rect(x,y,50,50)

    screen.fill(GRAY)
    pygame.draw.rect(screen,RED,rect)
    pygame.display.flip()

pygame.quit()

解决方法

在 PyGame 中,您必须管理 FPS 以保持游戏稳定。例如,如果你有一台非常快的计算机,你将有 200 或 300 FPS,并且在像你一样的小场景中,你的玩家每秒移动 200 倍的速度,所以这是相当快的,否则你的计算机就是一个真的很旧,你会得到大约 30 FPS,而你的玩家每秒移动的速度只会是你速度的 30 倍,这显然要慢得多。

我想向您解释的是 FPS 是必不可少的,因此您的游戏可以具有恒定的移动和速度。

所以我只添加了配置 FPS 的行,我设置了 60 并将速度更改为 10,但您可以轻松地为您的计算机调整这些值。

import pygame
from pygame.locals import *

SIZE = 800,600
RED = (255,0)
GRAY = (150,150,150)
x = 50
y = 50

pygame.init()
screen = pygame.display.set_mode(SIZE)

# creating a clock
clock = pygame.time.Clock()

running = True
while running:
    for event in pygame.event.get():
        if event.type == QUIT:
            running = False

    pressed = pygame.key.get_pressed()

    if pressed[pygame.K_RIGHT]:
        x += 10
    if pressed[pygame.K_LEFT]:
        x -= 10
    if pressed[pygame.K_UP]:
        y -= 10
    if pressed[pygame.K_DOWN]:
        y += 10

    rect = Rect(x,y,50,50)

    screen.fill(GRAY)
    pygame.draw.rect(screen,RED,rect)

    # setting the fps to 60,depending on your machine,60 fps is great in my opinion
    clock.tick(60)
    pygame.display.flip()

pygame.quit()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...