Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用Pygame实现类_Python_Class_Pygame - Fatal编程技术网

Python 用Pygame实现类

Python 用Pygame实现类,python,class,pygame,Python,Class,Pygame,我正试图使用pygame编写一个程序,创建一个名为Dot()的类,该类允许我实现点对象,它将是一个半径为2像素的小圆圈。我正试图在我的主游戏循环中创建它们,但我一直收到错误消息“name'x'未定义”。我不知道为什么会这样。如果它要抛出这样一个错误,我希望它首先说颜色没有定义,因为它在参数列表中列在第一位。我不确定我的错误是由我编写类本身的方式引起的,还是由我实现类的方式引起的(我几乎可以肯定我做错了,但我也尝试了几种不同的方法,并不断得到相同的错误),或者是这样还是两者兼而有之 #!/usr/

我正试图使用pygame编写一个程序,创建一个名为
Dot()
的类,该类允许我实现点对象,它将是一个半径为2像素的小圆圈。我正试图在我的主游戏循环中创建它们,但我一直收到错误消息“name'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)
dot=dot(颜色,x,y)#我不确定如何正确地实现这一点

您以前没有定义x或y值。你的错误来自这里。颜色也一样。 如果您希望在每次创建点对象时随机创建颜色和点坐标(至少我知道这是您正在寻找的),则必须重写
\uuuuu init\uuu
方法:

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)

dot=dot(颜色,x,y)
-这里的
x
y
是什么?他们来自哪里?
color
是以某种方式定义的,这可能是因为您使用了pygame.locals import*中的
,这导入了名称
color
。它们应该是圆位置的x和y坐标,而color将是圆的颜色。应该是的,尽管我知道这不是正确的语法。我只是不确定会是什么。这是正确的语法。问题发生在执行过程中,因为错误消息告诉您,没有定义name
x
。在哪里定义了
x
?您能否使用打印(x)
输出其值?(扰流板:你不能,出于同样的原因)。我以为我在类
Dot()
中定义了x、y和颜色,这将在我创建该类的对象时使用。不,你没有定义它们:你定义了
self.x、self.y
,它们是不同的。无论如何,当您执行
Dot(color,x,y)
并获得此错误时,它发生在尝试实例化
Dot
之前,因此,在调用
Dot之前。尝试以下操作:创建一个新的空白Python文件并编写
print(x)
。然后运行这个脚本。为什么您会收到这个确切的错误消息?这里的
x
是什么?(扰流板:您不知道,Python解释器也不知道,因为这个名称没有定义)