【问题标题】:'builtin_function_or_method' object has no attribute 'tick''builtin_function_or_method' 对象没有属性 'tick'
【发布时间】:2012-12-08 22:04:56
【问题描述】:

我正在尝试使用 Pygame 的 Clock.tick,但它不存在。我很肯定 Pygame 有它用于 Python 3,即使我使用 dir(pygame.time.Clock),它仍然不存在。我不确定我是否做错了什么,或者 Pygame 没有适用于 Python 3 的功能。

这是我的代码:

import pygame, random, sys
from pygame.locals import *

class Pong_Ball(object):
    def __init__(self, screen, screen_height, screen_width):
        self.screen = screen
        self.screen_height = screen_height
        self.screen_width = screen_width

    def update(self):
        #pong ball's properties
        self.ball_color = 191,191,191
        self.pos_x = 100
        self.pos_y = 100
        self.vel_x = 1
        self.vel_y = 1

        while True:
            for event in pygame.event.get():
                if event.type == QUIT:
                    sys.exit()

            #clear the screen
            self.screen.fill((0,50,100))

            #move the pong ball
            self.pos_x += self.vel_x
            self.pos_y += self.vel_y

            #keep the ball on the screen
            if self.pos_x > self.screen_width or self.pos_x < 0:
                self.vel_x = -self.vel_x
            if self.pos_y > self.screen_height or self.pos_y < 0:
                self.vel_y = -self.vel_y

            #draw the pong ball
            self.position = self.pos_x, self.pos_y
            pygame.draw.circle(self.screen, self.ball_color, self.position, 10)

            #update the display
            pygame.time.Clock.tick(60)
            pygame.display.update()

def main():
    pygame.init()
    screen = pygame.display.set_mode((800,600))
    ball = Pong_Ball(screen, 600, 800)
    ball.update()

main()

【问题讨论】:

    标签: python python-3.x pygame


    【解决方案1】:

    啊。 documentation 虽然非常标准,但可能有点令人困惑。即使他们写了Clock.tick,也不意味着它是类的静态方法。你在一个实例上调用它:

    >>> import pygame
    >>> clock = pygame.time.Clock()
    >>> clock
    <Clock(fps=0.00)>
    >>> clock.tick
    <built-in method tick of Clock object at 0xb402b408>
    >>> clock.tick()
    14487
    >>> clock.tick()
    836
    

    确认它的行为:

    >>> import time
    >>> for i in range(5):
    ...     print clock.tick()
    ...     time.sleep(0.17)
    ...     
    22713
    172
    171
    171
    172
    

    【讨论】:

      【解决方案2】:

      pygame.time.Clock.tick(60) 替换为pygame.time.Clock().tick(60)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-29
        • 2018-03-27
        • 2020-11-27
        • 2016-01-31
        • 2012-10-16
        • 2014-09-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多