четверг, 19 декабря 2013 г.

Ночная инкапсуляция

Дорисовала я вчера элементы и поняла что не смогу заснуть пока их не вставлю в игру, хотя уже в ушах звенело слегка, поэтому кодю слегка на автомате.

Итак, делаю класс BaseCellData чтобы разбирать клип с разными цветами и формами для одного соеденения на битмапы.

public class BaseCellData {

public var y:int;
public var x:int;

public var name:String;

private var _frames:Array = [];

public function BaseCellData (
name:String, 
mc:MovieClip, 
x:int, y:int
) {
    this.x = x;
    this.y = y;
    this.name = name;
    for (var i:int = 1; i <= mc.totalFrames; i++) {
        mc.gotoAndStop(i);
        _frames[i] = createBitmap(mc).bitmapData;
    }
}

И забиваю себе данные.
public static var data:Object = {};
data['0000'] = new BaseCellData('cell_0000', new cell_0000(), -2, -2);
....

Таак думаю я, для начала сделаем рандомчик. Как сделать проще всего?

public function get bitmapData ():BitmapData {
    return _frames[1 + Math.floor(Math.random()* (_frames.length - 1)];
}

Впихиваю в отрисовку, запускаю - после нескольких правок неправильных символов все работает, красотень! Запускаю просчет - здравствуй карнавал (на каждый просчет все ячейки перекрашиваются).

Блиин, а надо же запоминать в какой ячейке какой цвет!
Дописывается код

public var frame:int;

public function getBitmapData (frame:int = -1):BitmapData {
    this.frame = frame;

    if(this.frame == -1){
        this.frame = 1 + Math.floor(Math.random()* (_frames.length - 1) );
    }
    return _frames[ this.frame];
}

Теперь я могу узнать какая картинка получена и запомнить во вьюхе, все работает, я ложусь спать.


Утро.
О боже что же я натворила! Мысль не выходит из головы пока завтракаю.

Убираю из кода getBitmapData, магический frame который отдает верное значение только сразу после обращения и открываю доступ к _frames.

А мораль такова - пока не собираешься строить продуманный и клевый звездолет лучше не выеживаться и давать доступ к данным напрямую.



Комментариев нет:

Отправить комментарий