首页 > 解决方案 > Pygame 的类实现

问题描述

我正在尝试使用 pygame 编写一个程序来创建一个名为的类,该类Dot()允许我实现 Dot 对象,这将是 2 个像素半径的小圆。我试图在我的主游戏循环中创建它们,但我不断收到错误消息“名称'x'未定义”。我不确定为什么会这样。如果它要抛出这样的错误,我希望它首先说颜色未定义,因为它在参数列表中首先列出。我不确定我的错误是由我编写类本身的方式引起的,还是我的类实现中的某些东西(我几乎可以肯定我做错了,但我已经尝试了几种不同的方法好吧,并不断收到相同的错误),或者如果是,或者两者兼而有之。

#!/usr/bin/env python

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

pygame.init()

FPS = 30
fpsClock = pygame.time.Clock()

DISPLAYSURF = pygame.display.set_mode((700, 700), 0, 32)
pygame.display.set_caption('Version02')

WHITE = (255, 255, 255)
RED      = (255,   0,   0)
GREEN    = (  0, 255,   0)
BLUE     = (  0,   0, 255)

class Dot():
    def __init__(self, color, x, y):
        self = pygame.draw.circle(DISPLAYSURF, color, (x, y), 2, 0)
        self.color = getDotColor()
        self.x = getDotX()
        self.y = getDotY() 

    def getDotColor():
        color = random.choice([RED,  GREEN, BLUE])
        return color

    def getDotX():
        x = randint(0, 700)
        return x

    def getDotY():
        y = randint(0, 700)
        return y   

while True: #main game loop    
    DISPLAYSURF.fill(WHITE)

    dot = Dot(color, x, y)#I'm not exactly sure how to implement this correctly  

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

    pygame.display.update()
    fpsClock.tick(FPS)

标签: pythonclasspygame

解决方案


dot = Dot(color, x, y)#我不确定如何正确实现

您之前没有定义 ax 或 y 值。你的错误来自这里。颜色也一样。如果您希望每次创建 Dot 对象时随机创建颜色和点坐标(至少我知道这是您要查找的内容),则必须重写该__init__方法:

class Dot():
    def __init__(self):
        self.color = getDotColor()
        self.x = getDotX()
        self.y = getDotY()
        self = pygame.draw.circle(DISPLAYSURF, self.color, (self.x, self.y), 2, 0)

推荐阅读