Показать сообщение отдельно
  #18 (permalink)  
Старый 03.10.2013, 00:20
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Я эксперементировал с typeScript и в порядке эксперемента переписал на нем код из примера выше. Публикую просто для сравнения, дабы мой скорбный труд не пропал совсем даром
Производительность ебстебственно одинаковая.

var getRandomInt=(min:number, max:number)=> Math.floor(Math.random() * (max - min)) + min;

//Класс управляющий поведением колонок
class Column {
    frameCount:number;//счетчик пропущенных кадров (тип число)
    length:number;    //Длина анимации (тип число)
    speed:number;     //это значение устанавливается frameCount, если он ниже нуля (тип число)

    //конструктор. Прикольно что minSize сразу в this попадает :)
    constructor(private minSize:number) {
        this.reset();
    }
    
    //сбрасывает столбик
    public reset() {
        this.frameCount = 1;
        this.speed = getRandomInt(1, 5);
        this.length = getRandomInt(this.minSize, this.minSize + 15);
    }

    //уменьшает счетчик на единицу
    public ReduceThecounter() {
        if ( ( this.frameCount-- ) < 0) {
            this.frameCount = this.speed;
            if ( (this.length--) < 0) this.reset();
        }
    }
}

//Матрица
class Matrix {
    private columns=[];
    private matrix=[];

    constructor(private elem, private sizeX:number, private sizeY:number){
        this.elem=typeof elem == "string" ? document.getElementById(elem) : elem;//не стал мудрить, оставил в стиле JS
        for (var x = 0; x < sizeX; x++) {
            this.columns.push(new Column(sizeY + 1));
            this.matrix.push([]);
            for (var y = 0; y < sizeY; y++) {
                this.matrix[x][y] = { sym: "&nbsp" };
            }
        }
    }

    //метод обновления
     public update () {
        var y = this.sizeY,
            x = 0,
            result = "";

        while (y--) {
            x = this.sizeX;
            while (x--) {
                if (y == 0) this.columns[x].ReduceThecounter();
                if (this.columns[x].frameCount == 0) {
                    if (y == 0) {
                        this.matrix[x][0].sym = (this.columns[x].length > this.sizeY) ? String.fromCharCode(getRandomInt(97, 122)) : "&nbsp";
                    } else {
                        this.matrix[x][y].sym = this.matrix[x][y - 1].sym;
                    }
                }
                result = this.matrix[x][y].sym + result;
            }
            result = "<br/>" + result;
        }
        this.elem.innerHTML = result;
    }
}
var m = new Matrix('matrix', 82, 17);

+(function f() {
    m.update();
    setTimeout(f, 1);
})();
//# sourceMappingURL=app.js.map
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 03.10.2013 в 00:27.
Ответить с цитированием