AttributeError: 'Sprite' object has no attribute 'type'
Сразу обозначу, что в самом python я, к сожалению, не профи
Делаю мини-игру по гайду с проверкой реакции(что-то похожее есть в игре Dead by Daylight). Рассчитывалось, что картинка slider.png будет двигать по размерам slider_bar_size вправо, а затем влево, но выдало ошибку "AttributeError: 'Sprite' object has no attribute 'type'". Подскажите пожалуйста, как это можно исправить?
(Код записан в разных файлах)
init python:
def slider_update(st):
global slider_speed
for sprite in slider_sprites:
if sprite.type == "slider":
if round(sprite.x) < slider_bar_size[0] - slider_size[0] and sprite.direction == "right":
sprite.x += slider_speed * Exam_difficulty
slider_speed += 0.04
elif round(sprite.x) >= slider_bar_size[0] - slider_size[0] and sprite.direction == "right":
sprite.direction = "left"
slider_speed = 2
elif round(sprite.x) > 0 and sprite.direction == "left":
sprite.x -= slider_speed * Exam_difficulty
slider_speed += 0.04
elif round(sprite.x) == 0 and sprite.direction == "left":
sprite.direction = "right"
slider_speed = 2
if not slider_stop:
return 0
else:
return None
label Arena_Exam_1:
$ slider_SM = SpriteManager(update = slider_update)
$ slider_sprites = []
$ safe_zone_image = Image("images/BG/Arena/safe-zone.png")
$ safe_zone_size = (149, 70)
$ slider_sprites.append(slider_SM.create(safe_zone_image))
$ slider_sprites[-1].type = "safe-zone"
$ slider_sprites[-1].type = "slider"
$ slider_sprites[-1].direction = "right"
$ slider_bar_size = (545, 70)
$ slider_image = Image("images/BG/Arena/slider.png")
$ slider_sprites.append(slider_SM.create(slider_image))
$ slider_size = (48, 66)
$ slider_speed = 2 #Скорость движения палочки
$ slider_stop = False
$ Exam_Attempts = 3
$ Exam_difficulty = 1
show text "{size=60}Get ready!?\n{size=50}\n{size=20}{color=#979797}click . . ."
pause
hide text
call screen Arena_Exam_1_1
(Ошибка)
While running game code:
File "game/SCRIPTS/MiniGames.rpy", line 514, in script
call screen Arena_Exam_1_1
File "renpy/common/000statements.rpy", line 670, in execute_call_screen
store._return = renpy.call_screen(name, *args, **kwargs)
File "game/SCRIPTS/variables.rpy", line 49, in slider_update
if sprite.type == "slider":
AttributeError: 'Sprite' object has no attribute 'type'
Ответы (1 шт):
$ slider_sprites.append(slider_SM.create(safe_zone_image))
$ slider_sprites[-1].type = "safe-zone"
$ slider_sprites[-1].type = "slider"
...
$ slider_sprites.append(slider_SM.create(slider_image))
А зачем вы одному слайдеру присваиваете два разных типа, а другому - ни одного? Тогда уж так, хотя код всё-равно коряво выглядит:
$ slider_sprites.append(slider_SM.create(safe_zone_image))
$ slider_sprites[-1].type = "safe-zone"
...
$ slider_sprites.append(slider_SM.create(slider_image))
$ slider_sprites[-1].type = "slider"
Вообще лучше оперировать объектами ещё до того, как они в список попадут, так меньше шансов ошибиться:
$ safe_zone_sprite = slider_SM.create(safe_zone_image)
$ safe_zone_sprite.type = "safe-zone"
$ slider_sprites.append(safe_zone_sprite)
...
$ slider_sprite = slider_SM.create(slider_image)
$ slider_sprite.type = "slider"
$ slider_sprites.append(slider_sprite)
Правда, во втором случае название списка и элемента слишком похожи, что тоже может привести к ошибке. Я бы список переименовал как-то, ведь там разные спрайты, а не только слайдер.