繁体   English   中英

马里奥在pygame中跑得越来越快

[英]Mario running across screen too fast in pygame

首先是代码:

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

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

Mario 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()没有aguments)显示您的计算机上的游戏速度有多快。 在我的电脑上,我获得了大约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步。:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM