![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2013
Сообщений: 1
|
Как создать массив объектов класса из библиотеки ссылаясь на его имя?
package Classes { import flash.display.MovieClip; import flash.display.Sprite; public class Body extends Sprite { private var body:MovieClip; public function Body(num:int,dx:Number,dy:Number) { switch (num) { case 0 : this.body = new Block(); break; case 2 : this.body = new Background(); break; case 4 : this.body = new Trash(); break; case 5 : this.body = new Car(); break; } this.body.x = dx; this.body.y = dy; this.addChild(this.body); } ... package Classes { import flash.display.Sprite; import flash.display.MovieClip; import Classes.Body; public class Scroller extends Sprite { private var bg:Body = null; private var bgArray = new Array(); private var i:int = 0; private var posfront = 0; private var posback = 0; private var count:Number = 0; private var mc:MovieClip = null; private var num:Number = 0; private var MWidth = 0; private var speed:Number = 0; private var currentX:int = 0; private var oldX:int = 0; public function Scroller(num:Number,sw:Number,dy:Number) { this.num = num; this.MWidth = sw; switch (num) { case 0 : mc = new Block(); break; case 2 : { mc = new Background(); speed=-0.5; } break; case 4 : { mc = new Trash(); speed=-0.75; } break; case 5 : mc = new Car(); break; } count = Math.floor(sw/mc.width)+1; for (i=0; i<2*count; i++) { if (i!=0) { bg = new Body(num,bgArray[i - 1].PositionX + bgArray[i - 1].Width,dy); } else { bg = new Body(num,-mc.width - sw/2,dy); } bgArray.push(bg); if (num==4 || num==5) { bg.Frame = Rand(num); } this.addChild(bg); } bg = null; posfront = 0; posback = bgArray.length - 1; } ... тоесть как можна этот switch заменить одним мувиклипом? |
|
|||||
|
Перво-наперво - надо выкинуть индекс нафиг
Во вторых, здесь только один объект и он создаётся в обязательном порядке - чтобы бы его самого не передать? Но коли сильно хочется или если Body создаёт что-то внутри по своему усмотрению да ещё и не только в одном месте, то: Можно передавать вместо индекстов сами классы или объекты-фабрики, но на практике проще и гибше тупо передать функцию: package Classes { import flash.display.MovieClip; import flash.display.Sprite; public class Body extends Sprite { private var body:MovieClip; public function Body(createBody:Function,dx:Number,dy:Number) { this.body = createBody(); this.body.x = dx; this.body.y = dy; this.addChild(this.body); } ... package Classes { import flash.display.Sprite; import flash.display.MovieClip; import Classes.Body; public class Scroller extends Sprite { private var bg:Body = null; private var bgArray = new Array(); private var i:int = 0; private var posfront = 0; private var posback = 0; private var count:Number = 0; private var mc:MovieClip = null; private var num:Number = 0; private var MWidth = 0; private var speed:Number = 0; private var currentX:int = 0; private var oldX:int = 0; public function Scroller(createMC:Function,sw:Number,dy:Number) { this.num = num; this.MWidth = sw; mc = createMC(); ... ... var body:Body = new Body(createBlock, 0, 0); var body:Body = new Body(createRedBackground, 0, 0); // Вместо // var body:Body = new Body(1, 0, 0);// WTF? // var body:Body = new Body(2, 0, 0);// WTF? ... private function createBlock():YourCommonType { return new Block(); } private function createBackground():YourCommonType { return new Background(); } private function createRedBackground():YourCommonType// пример гибкости { var background:Background = new Background(); background.color = 0xff0000; return background; } ... + Можно использовать одни и те же классы с разными параметрами (меньше лишнего кода) + Компилятор скажет, если изменились параметры в конструкторе создаваемого объекта - Нужно писать функции, а не просто имя класса (больше лишнего кода) |
|
|||||
|
[+1 25.10.13]
[+4 18.03.14] |
вы return background , а у функции YourCommonType? Так можно?
|
|
|||||
|
Подразумевается, что у всех должен быть какой-то общий тип - они же все в body присваиваются, но какой?
Если бы я увидел сразу то конечно бы написал MovieClip, но теперь то что уж. Вообще, можно было и Background написать - здесь фиолетово. |
|
|||||
|
[+1 25.10.13]
[+4 18.03.14] |
Зачем было отвечать? Человек думает не только над решением своего вопроса, но и над тем что же вы написали такое.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 14:51. |
|
|
« Предыдущая тема | Следующая тема » |
|
|