Помощь с соотношением и частотой - PullRequest
1 голос
/ 02 сентября 2011

У меня есть следующее:

package {
    import flash.display.MovieClip;
    public class Ratio extends MovieClip {
    private var counter:Number;
    private var frequency:Number;
    private var ratio:String;
    private var max:Number;

    public function Ratio() {
        ratio ="2/8";   
        var arr = ratio.split("/");

        max = arr[1];
        frequency = arr[0];
        counter = 0;
        addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
    }

        private function loop(e:Event):void {
            trace(counter + ": " + (counter < frequency));
            counter++;

            if (counter == max) {
                counter = 0;
            }
        }

        public function destroy():void {
            removeEventListener(Event.ENTER_FRAME, loop);
        }
    }
}

Это выводит что-то вроде:

0: true
1: true
2: false
3: false
0: true
1: true
2: false
3: false

Но на самом деле мне бы хотелось:

0: true
1: false
2: true
3: false
0: true
1: false
2: true
3: false

т.е. более равномерная дисперсия (чередование) ... есть ли способ сделать это?

1 Ответ

0 голосов
/ 02 сентября 2011

Я думаю, что, возможно, здесь упущен смысл, но это должно дать желаемый результат:

private function loop(e:Event):void {
    trace(counter + ": " + !Boolean(counter % 2));
    counter++;
    if (counter == max)  counter = 0;
}

Обновление:

Хотя это становится немного тяжелымСледующее создает чередующуюся дисперсию, где это точно возможно.Все остальное проходит в прямой последовательности.Я не математик, и чувствую, что это можно сделать лучше.Например, это будет трактовать 3/9 как 1,1,1,0,0,0,0,0,0, тогда как «более хорошее» распределение может быть 0,1,0,0,1,0,0,1,0

var ratio:String = "3/5"; 

var counter:int = 0;
var arr = ratio.split("/");
var frequency:int = arr[0];
var max:int = arr[1];

addEventListener(Event.ENTER_FRAME,loop);

function loop(e:Event):void {
    if((max+1) / frequency == 2 || max / frequency == 2) {
        trace(counter + ": " + !Boolean(counter % 2));
    } else if((max-1) / frequency == 2) {
        trace(counter + ": " + Boolean(counter % 2));
    } else {
        trace(counter < frequency);
    }
    counter++;
    if (counter == max) removeEventListener(Event.ENTER_FRAME,loop);
}
...