Я хотел бы знать, возможно ли использовать функцию pygame.draw.rect()
в Pygame с переменной цвета в классе.
Это мой код с подробными объяснениями под него: (обратите внимание, что я 'мы возьмем только полезную часть)
# consider pygame as 'pg' as I set with
# the line 'import pygame as pg'
class icon:
def __init__(self, picture, position, key):
self.icon = picture
self.position = position
self.p_x, self.p_y = position
self.size = 50
self.unlocked = False
self.key = key
self.status = 'off'
self.pulse_value = 0
self.pulse = 'down'
self.pulse_type = 'red'
self.c_icon = self.icon.get_rect()
self.c_icon.center = ( (self.p_x + 25), (self.p_y + 25))
def unlock(self):
self.unlocked = True
self.status = 'pulse'
self.pulse_type = 'grey'
def draw(self):
if self.unlocked == True :
if self.status == 'off':
pg.draw.rect(screen, color_passive, (*self.position, 50, 48))
elif self.status == 'on':
pg.draw.rect(screen, color_active, (*self.position, 50, 55))
elif self.status == 'pulse':
if self.pulse == 'down' :
self.pulse_value = self.pulse_value + 1
if self.pulse_value == 255 :
self.pulse = 'up'
elif self.pulse == 'up' :
self.pulse_value = self.pulse_value - 1
if self.pulse == 0 :
self.pulse = 'down'
if self.pulse_type == 'red' :
self.color_pulse = (self.pulse_value, 0, 0)
elif self.pulse_type == 'grey' :
self.color_pulse = (self.pulse_value, self.pulse_value, self.pulse_value )
pg.draw.rect(screen, *self.color_pulse, (*self.position, *self.size))
screen.blit(self.icon, self.c_icon)
world_2 = pg.image.load('ice_mountains.png').convert_alpha()
icon_1 = icon('world_2', (60, 60), K_1)
Это значок класса, который показывает любые значки вкладок на экране и определяет, разблокирована ли вкладка или нет.
Как видите,Я использую здесь функцию pygame.draw.rect()
Но в этой функции переменная цвета является «переменной класса» ( self.color_pulse)
.
Переменная self.color_pulse
определяется как ( self.pulse_value, self.pulse_value, self.pulse_value)
настрока выше.
И self.pulse_value
- это переменная класса, которая увеличивается на 5 каждый icon_2.draw()
со скоростью 30 раз в секунду.
В основном я использую функцию icon_2.draw()
восновной цикл.
elif exp >= 1000:
n_unlock = n_unlock + 1
icon_2.unlock()
print('world 2 unlocked')
это код для разблокировки значка.В тот момент, когда основной цикл выполняет icon_2.draw()
сразу после того, как этот разблокирован, ожидаемый результат заключается в том, что на экране должна появиться иконка, по умолчанию ... импульс, пока пользователь не щелкнет по ней.
НОК сожалению, я получил это:
#----------*={ _MAD_ }=*----------#
May Avoid Destruction
by Edhyjox
#----------*={ _MAD_ }=*----------#
Loading...
========== Ok
custom setting succesfully imported
Window main not existing, redirect to game
World 2 unlocked
Traceback (most recent call last):
File "************************/___MAD___/script/MAD - The game.py", line 266, in <module>
icon_2.draw()
File "************************/___MAD___/script/MAD - The game.py", line 190, in draw
pg.draw.rect(screen, *self.color_pulse, (*self.position, *self.size))
TypeError: 'int' object is not iterable
Я не совсем понимаю, почему я получил эту ошибку.Это означает, что я использую 'int' в функции pg.draw.rect()
, но в этой точке программы переменная self.color_pulse равна (5, 5, 5).
И, похоже, она работает для переменной, котораяне в классе ... У кого-нибудь есть подсказка по проблеме?