AttributeError: объект «str» не имеет атрибута «обновление» в игре.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 AttributeError: объект «str» не имеет атрибута «обновление» в игре.

Сообщение Anonymous »


Я делаю песочницу(с песком) и наткнулся на ошибку в этой строке:

для зерна в песке: зерно.обновление() Переменная sand — это словарь, и я не знаю, что пошло не так. Если вам нужна дополнительная ясность, прокомментируйте. Полная программа:
импортировать pygame импортировать случайный ШИРИНА, ВЫСОТА = 640, 360 ФПС = 60 БЕЛЫЙ = (255, 255, 255) ПЕСОК = (194, 178, 128) GRAVITY = 0,5 # повышенная гравитация защита main_program(): глобальный песок pygame.init() game_display = pygame.display.set_mode((ШИРИНА, ВЫСОТА)) pygame.display.set_caption("Песочница") is_crashed = Ложь часы = pygame.time.Clock() шрифт = pygame.font.SysFont("Arial", 32) sand_grain = pygame.Surface((4, 4)) pygame.draw.rect(sand_grain, ПЕСОК, (0, 0, 4, 4)) песок = {} sand_id = 0 пока не is_crashed: mouse_x, mouse_y = pygame.mouse.get_pos() mouse_held = pygame.mouse.get_pressed()[0] если mouse_held: песок[str(sand_id)] ​​= Зерно(mouse_x, mouse_y) sand_id += 1 для зерна в песке: зерно.обновление() для события в pygame.event.get(): если event.type == pygame.QUIT: is_crashed = Истина # обрабатываем событие нажатия кнопки мыши если event.type == pygame.MOUSEBUTTONDOWN: # получаем позицию и кнопку события мыши позиция = event.pos кнопка = событие.кнопка # получаем список всех зерен, находящихся под курсором мыши clicked_grains = [g вместо g в sand.values(), если g.rect.collidepoint(pos)] # если есть кликнутые зернышки если кликнут_зерна: # получить самое верхнее зерно top_grain = clicked_grains[-1] # если нажата левая кнопка мыши если кнопка == 1: # установите для атрибута перетаскивания зерна значение True top_grain.dragged = Истина # обрабатываем событие нажатия кнопки мыши если event.type == pygame.MOUSEBUTTONUP: # получаем позицию и кнопку события мыши позиция = event.pos кнопка = событие.кнопка # получаем список всех зерен, находящихся под курсором мыши clicked_grains = [g вместо g в sand.values(), если g.rect.collidepoint(pos)] # если есть кликнутые зернышки если кликнут_зерна: # получить самое верхнее зерно top_grain = clicked_grains[-1] # если отпустить левую кнопку мыши если кнопка == 1: # установите для атрибута перетаскивания зерна значение False top_grain.dragged = Ложь game_display.fill(БЕЛЫЙ) для зерна в sand.values(): зерно.draw(game_display, sand_grain) pygame.display.flip() часы.тик(FPS) pygame.quit() класс Зерно: def __init__(self, x, y): self.x = x self.y = y self.yv = 0 self.xv = random.randint(-2, 2) # добавлена ​​горизонтальная скорость self.rect = pygame.Rect(self.x, self.y, 4, 4) self.dragged = False # добавлен атрибут перетаскивания обновление защиты (сам): глобальный песок if self.y > HEIGHT - 4: # проверка на столкновение нижнего края self.y = ВЫСОТА - 4 self.yv = 0 elif self.y < 0: # проверка на столкновение с верхним краем self.y = 0 self.yv = 0 еще: self.yv += ГРАВИТАЦИЯ if self.x > WIDTH - 4: # проверка на столкновение правого края self.x = ШИРИНА - 4 self.xv = 0 elif self.x < 0: # проверка столкновения левого края self.x = 0 self.xv = 0 еще: self.xv += random.randint(-1, 1) # добавляем случайность к горизонтальному движению self.x += self.xv self.y += self.yv self.rect = pygame.Rect(self.x, self.y, 4, 4) forother в sand.values(): # проверка на наличие столкновений с другими зернами если другое не self и self.rect.colliderect(other.rect): # используйте метод pygame.Rect.colliderect self.yv = 0 self.xv = 0 если self.y Other.y: self.y = другое.y + 4 если self.x другое.x: self.x = другое.x + 4 перерыв # проверяем, перетаскивается ли зерно мышью если перетащить самостоятельно: # получаем текущую позицию и движение мыши mouse_x, mouse_y = pygame.mouse.get_pos() mouse_rel_x, mouse_rel_y = pygame.mouse.get_rel() # установите положение и скорость зерна в соответствии с мышью self.x = mouse_x self.y = mouse_y self.xv = mouse_rel_x self.yv = mouse_rel_y # обновляем прямоугольник зерна self.rect = pygame.Rect(self.x, self.y, 4, 4) def draw(self, display, Grain): display.blit(зерно, self.rect) если __name__ == "__main__": main_program()
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Объект DataFrame не имеет атрибута str - ошибка .str.replace
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Декодирование JWT, AttributeError: объект 'str' не имеет атрибута 'decode'
    Anonymous » » в форуме Python
    0 Ответы
    47 Просмотры
    Последнее сообщение Anonymous
  • Python AttributeError: объект «str» не имеет атрибута «DataFrame» [дубликат]
    Anonymous » » в форуме Python
    0 Ответы
    78 Просмотры
    Последнее сообщение Anonymous
  • LLMGraphTransformer.convert_to_graph_documents(documents) AttributeError: объект 'str' не имеет атрибута 'content'
    Anonymous » » в форуме Python
    0 Ответы
    53 Просмотры
    Последнее сообщение Anonymous
  • Метод .endswith() вызывает исключение «AttributeError: объект 'str' не имеет атрибута 'value'»
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»