首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >马里奥在游戏中在屏幕上跑得太快了

问马里奥在游戏中在屏幕上跑得太快了
EN

Stack Overflow用户
提问于 2013-11-22 00:53:58
回答 1查看 3.3K关注 0票数 2

首先,代码是:

代码语言:javascript
复制
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

马里奥雪碧以非常快的速度在屏幕上运行。尽管我说过我会把中心线的值增加1,但我知道为什么会这样。

顺便说一句,如果我忽略了一个显而易见的事实或者什么的话,我真的是刚开始玩游戏。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-22 01:39:41

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

代码语言:javascript
复制
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)。

代码语言:javascript
复制
clock = pygame.time.Clock()

while keepGoing:

    # rest of the code

    pygame.display.flip()

    clock.tick()
    print clock.get_fps()            

编辑:如果我最小化窗口,我得到10000 FPS :)

编辑:

如果你仍然需要放慢马里奥,并有至少30个FPS,你必须检查时间,然后你移动马里奥。

代码语言:javascript
复制
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()获取当前时间(毫秒) (1000毫秒=1秒)和计算下一个移动时间(100毫秒=0.1秒)。现在马里奥将每秒10步。这样,即使我将FPS更改为10000 :),它也总是每秒10步。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20134955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档