2013-07-21 2 views
2

Im новой для питона и им пытаются что-то с Pygame, но не знаю, как я должен это сделать ..Python доступа к переменным

def addRect(x, y, width, height, color, surface): 
    rect = pygame.Rect(x, y, width, height) 
    pygame.draw.rect(surface, color, rect) 
    pygame.display.flip() 

Вот для создания прямоугольников, но мой вопрос, как я должен получить доступ к ractangles я создаю? Я пытаюсь что-то вроде.

r1 = addRect(20, 40, 200, 200, (61, 61, 61), screen) 

Но тогда, когда я пытаюсь переместить его с помощью

r1.move(10,10) 

Я получаю сообщение об ошибке

r1.move(10,10) AttributeError: 'NoneType' object has no attribute 'move'

Как я должен получить к нему доступ? thanks-

+1

Вы не возвращаете 'rect' из функции. –

ответ

2

Функции Python имеют возвращаемое по умолчанию значение None. Поскольку у вас нет оператора return в вашей функции, он возвращает None, который не имеет атрибута move().

От The Python Docs

In fact, even functions without a return statement do return a value, albeit a rather boring one. This value is called None (it’s a built-in name).

>>> def testFunc(num): 
     num += 2 

>>> print testFunc(4) 
None 

Вы должны добавить return заявление вернуть переменную rect.

def addRect(x, y, width, height, color, surface): 
    rect = pygame.Rect(x, y, width, height) 
    pygame.draw.rect(surface, color, rect) 
    pygame.display.flip() 
    return rect 
+0

Спасибо. работал –

2

Я не знаю много PyGame, но вы можете изменить addRect -

def addRect(x, y, width, height, color, surface): 
    rect = pygame.Rect(x, y, width, height) 
    pygame.draw.rect(surface, color, rect) 
    pygame.display.flip() 
    return rect # Added this line. Returns the rect object for future use. 

Затем вы можете сделать прямоугольники и использовать методы тоже -

rect1 = addRect(20, 40, 200, 200, (61, 61, 61), screen) 
rect1.move(10,10) 

Это должен работать

Смежные вопросы