Расширять класс Sprite для удобства? - PullRequest
0 голосов
/ 26 августа 2009

Я всегда испытываю желание расширить класс Sprite, чтобы мой объект мог быть частью списка отображения (а также иметь функции EventDispatcher), даже если ему нечего отображать. Однако он будет содержать объектов, которые будут отображаться. Это удобно, потому что эти содержащиеся объекты должны ссылаться только на свой контейнер для доступа к списку отображения.

Кто-нибудь сталкивался с этим искушением?
Кажется, что это будет обычным делом, но также кажется неуместным.

Существуют ли значительные затраты памяти на ненужное расширение класса Sprite?

1 Ответ

0 голосов
/ 26 августа 2009

Почему вы хотите, чтобы что-то было частью списка отображения? Вы говорите: он, однако, будет содержать вещи для отображения.

Если вы хотите составить отображаемые объекты, например, делать что-то вроде:

var container:Sprite = new Sprite();
var image:Sprite = new some_lib_image();
var image2:Sprite = new some_other_lib_image();
container.addChild(image);
container.addChild(image2);
stage.addChild(container);

Тогда это полностью приемлемо. Если вы хотите создать класс с именем ImageContainer, который управляет добавлением и удалением изображений, и использовать его вместо Sprite - это тоже вполне приемлемо. Я бы не назвал это искушением, но я бы этого не сделал, если бы вы не добавили что-то стоящее в приведенный выше код.

Существуют ли значительные затраты памяти на ненужное расширение класса Sprite?

Не особенно. Размер вашего класса обычно будет примерно таким же, как sizeof (Sprite) + sizeof (instanceVariables []), где instanceVariables [] - это новые переменные, которые вы объявляете в своем классе. Я бы не беспокоился об этом. Композиция дороже, чем наследство; без необходимости использовать слишком много контейнеров. В общем случае я никогда не беспокоюсь об этом, но если бы я создал 5000 частиц в системе частиц, я бы постарался сделать каждую частицу максимально простой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...