Уведомления

Группа в Telegram: присоединиться

#1 Ноя. 7, 2019 19:24:24

panama555
Зарегистрирован: 2019-02-19
Сообщения: 103
Репутация: +  2  -
Профиль   Отправить e-mail  

Книга Доусона. Почему спрайты имеют одинаковые имена?

Привет.
Изучаю книгу Доусона. Делаю игру в которой нужно ловить пиццу сковородой.
“Сумасшедший повар” через определённые промежутки времени создаёт спрайты в виде пиццы которые падают вниз.
Но создаёт он спрайты пиццы с одним и тем же именем!
Я думал, что если я создам объект класса с тем же именем, то старый объект будет уничтожен, а новый появится. А здесь и новый объект появляется и старый остаётся.
Как это может быть?
Кто читал книгу - подскажите!
Спасибо

Офлайн

#2 Ноя. 8, 2019 21:57:16

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 1472
Репутация: +  207  -
Профиль   Отправить e-mail  

Книга Доусона. Почему спрайты имеют одинаковые имена?

panama555
Я думал, что если я создам объект класса с тем же именем, то старый объект будет уничтожен, а новый появится. А здесь и новый объект появляется и старый остаётся.Как это может быть?
Ну не видя вашего кода, трудно чточто сказать(а искать и читать книгу Доусона, сами понимаете..), нов пайтоне у каждого объекта есть счетчик, который показывает сколько переменных на него ссылаються, когда счетчик становиться равный 0, сборщик мусора его удаляет. Соответсвенно если старый обьект остаеться значит гдето на него ссылаеться какаято переменная(элемент списка/значение словаряи тд…), но повторюсь не видя кода ничего конкретного сказать нельзя.

Офлайн

#3 Ноя. 8, 2019 22:22:21

panama555
Зарегистрирован: 2019-02-19
Сообщения: 103
Репутация: +  2  -
Профиль   Отправить e-mail  

Книга Доусона. Почему спрайты имеют одинаковые имена?

Прикладываю файл из книги.
в этом месте:

 def check_drop(self):
        """ Decrease countdown or drop pizza and reset countdown. """
        if self.time_til_drop > 0:
            self.time_til_drop -= 1
        else:
            new_pizza = Pizza(x = self.x)
            games.screen.add(new_pizza)
            # set buffer to approx 30% of pizza height, regardless of pizza speed   
            self.time_til_drop = int(new_pizza.height * 1.3 / Pizza.speed) + 1 
строка:
new_pizza = Pizza(x = self.x)

Отредактировано panama555 (Ноя. 8, 2019 22:23:06)

Прикреплённый файлы:
attachment pizza_panic.py (4,2 KБ)

Офлайн

#4 Ноя. 8, 2019 22:34:25

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 543
Репутация: +  61  -
Профиль   Отправить e-mail  

Книга Доусона. Почему спрайты имеют одинаковые имена?

panama555

 games.screen.add(new_pizza)
в games.screen который вы добавляете экземпляры класса Pizza хоть и с одним именем но возможно разными параметрами. а вот где то в games они рисуются как разные объекты (тут уж нужно лезть в дебри)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version