我总是试图扩展Sprite类,这样我的对象就可以成为显示列表的一部分(并且还有EventDispatcher函数),即使它没有任何东西可以显示。但是,它将包含要显示的内容。这很方便,因为那些包含的对象只需要引用它们的容器来进行显示列表访问。
有没有人遇到这种诱惑? 这似乎很常见,但似乎也不合适。
不必要地扩展Sprite类会有很大的内存成本吗?
答案 0 :(得分:0)
为什么你想要某些东西成为显示列表的一部分?你说:但是,它将包含要显示的内容。
如果您的意思是想要组合可显示的对象,例如做类似的事情:
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个粒子,我会尽量保持每个粒子尽可能简单。