gpt4 book ai didi

python - 马里奥在pygame中跑过屏幕太快

转载 作者:行者123 更新时间:2023-11-28 19:56:23 25 4
gpt4 key购买 nike

所以首先是代码:

import pygame, sys
from pygame.locals import *

class Person(pygame.sprite.Sprite):

def __init__(self, screen):
self.screen = screen
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("images/mariowalking0.png")
self.rect = self.image.get_rect()
self.rect.center = (320, 220)
self.poseNumber = 1
def update(self):
self.rect.centerx += 1
if self.rect.centerx > self.screen.get_width():
self.rect.centerx = 0
self.poseNumber = (self.poseNumber + 1)
if self.poseNumber == 2:
self.poseNumber = 0
self.image = pygame.image.load("images/mariowalking" + str(self.poseNumber) +".png")
def main():
screen = pygame.display.set_mode((640, 480))
background = pygame.Surface(screen.get_size())
background.fill((255, 255, 255))
screen.blit(background, (0, 0))
boy = Person(screen)
allSprites = pygame.sprite.Group(boy)
keepGoing = True
while keepGoing:
for event in pygame.event.get():
if event.type == pygame.QUIT:
keepGoing = False
pygame.quit()
allSprites.clear(screen, background)
allSprites.update()
allSprites.draw(screen)
pygame.display.flip()
if __name__ == "__main__":
main()

如果你想运行代码,可以在这里找到 Sprite 的图像:http://imgur.com/a/FgfAd

马里奥 Sprite 以非常快的速度跑过屏幕。尽管我说过我要把 centerx 的值增加 1。知道为什么会这样。

顺便说一句,我是 pygame 的新手,如果我忽略了一个明显的事实或其他事情,我深表歉意。

最佳答案

您的程序将在不同的计算机上以不同的速度运行——这取决于计算机的速度。您可以使用 pygame.time.Clock()在所有计算机上获得相同的速度(非常慢的计算机除外)并降低游戏和马里奥的速度。

clock = pygame.time.Clock()

while keepGoing:

# rest of the code

pygame.display.flip()

clock.tick(30)

现在游戏将在所有计算机上每秒绘制 30 帧 (FPS),而马里奥每秒将绘制 30 次。 25 FPS 足以让人眼看到漂亮的动画。如果需要,您可以设置更高的 FPS - 例如 60。


此代码(get_fps()tick() 没有参数)显示您的计算机上的游戏速度有多快。在我的电脑上,我得到的大多是 500 FPS(但有时甚至是 1400 FPS)。

clock = pygame.time.Clock()

while keepGoing:

# rest of the code

pygame.display.flip()

clock.tick()
print clock.get_fps()

编辑:如果我最小化窗口我得到 10 000 FPS :)


编辑:

如果您仍然需要降低马里奥的速度并至少达到 30 FPS,您必须在移动马里奥之前检查时间。

class Person(pygame.sprite.Sprite):      

def __init__(self, screen):
# rest of code
self.next_move = pygame.time.get_ticks() + 100 # 100ms = 0.1s

def update(self):
if pygame.time.get_ticks() >= self.next_move:
self.next_move = pygame.time.get_ticks() + 100 # 100ms = 0.1s
# rest of code

我使用 get_ticks() 获取以毫秒 (ms) 为单位的当前时间(1000 毫秒 = 1 秒)并计算下一次移动的时间(100 毫秒 = 0.1 秒)。现在马里奥每秒将走 10 步。这样,即使我将 FPS 更改为 10 000,它也会始终每秒执行 10 步 :)。

关于python - 马里奥在pygame中跑过屏幕太快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20134955/

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