PDA

Просмотр полной версии : Реализация симулятора CRT дисплея


_ViPeR_
27.10.2007, 10:55
Доброго времени суток всем!
Задача следующая - нужно реализовать визуализатор симулирующий эл. пикселы дисплея CRT монитора (ну или телека), луч проходит по люминофору и пикселы начинают светится.
Есть поле 20х20 пикселов, а в роли пикселов выступают мувиклипы-ректанглы _height:20px _width:20px. Итого 400 квадратиков, и все они изначально имеют нулевую альфу. Рядом есть небольшая контрольная панелька, где сть FPS этого экранчика, пуск и стоп.
Запускаем это дело и пикселы должны начинать по очереди мгновенном загораться(_alpha сразу на 100%) и потухать (уже не мгновенно, с небольшой задержкой). В общей сложности это выглядит как сначала верхний ряд слева направо, затемвторой ряд справа налево и т.д. как и реально ходит пучок по люминофору.

Так вот возник вопрос, как это можно реализовать, ведь getTimer() возвращает значение в ms, т.е. минимальный интервал 1ms, а для реализации скорости в 25fps (виртуальных фпс'ов), нужно что бы все 400 пикселов прогнались за 1/25 сек. или интервал между каждым пикселом должен быть 1/25/400=0,0001сек, т.е. 1/10 от минимального интервала таймера.
Помогите с креативом, заранее спасибо!

telit
27.10.2007, 14:11
import mx.transitions.Tween;

tweening = function(img1_mc:MovieClip){
trace(img1_mc);
var myTween:Tween = new Tween(img1_mc, "_alpha", mx.transitions.easing.Strong.easeOut,0, 100, 100, false);
myTween.onMotionFinished = function() {
var myTween2:Tween = new Tween(img1_mc, "_alpha", mx.transitions.easing.Strong.easeOut,100, 0, 200, false);
};
}

var w:Number = 20;
var h:Number = 20;
_global.i = 0;
var bgColor:Number = 0x00CC00;
this.createEmptyMovieClip("rect", this.getNextHighestDepth());

create = function(){
if (_global.i== 9) clearInterval(interval);
name_ = "im" + _global.i;
rect.createEmptyMovieClip(name_, rect.getNextHighestDepth());
rect[name_].beginFill(bgColor);
rect[name_].lineTo(w, 0);
rect[name_].lineTo(w, h);
rect[name_].lineTo(0, h);
rect[name_].lineTo(0, 0);
rect[name_]._y = 10;
rect[name_]._x = _global.i*30;
tweening(rect[name_]);
_global.i++;
trace(_global.i);
}

var interval = setInterval(create,1000);

Вот быстро набросал :)

_ViPeR_
27.10.2007, 15:42
Огромный сенк!
Идею понял

Kikasso
27.10.2007, 16:06
Это все гораздо проще делается.

_ViPeR_
27.10.2007, 21:43
Kikasso, вот как раз то что нужно. Спасибо.
Но осталась проблема виртуальных фпс'ов...
Установил 120фпс в свойствах мувика, визуально где то 2,5-3 виртуальных кадра в секунду успевает проскочить, а на телике 25, ладно будем думать.

Kikasso
27.10.2007, 22:15
На телике 25 фпс, и что, вы видите как лучик по экрану бегает?

_ViPeR_
27.10.2007, 22:26
Вот в том то вся история, что можно будет менять скорость, или через var текстинпута или через numericStepper, и будет демонстрация этого эффекта, т.е. сначала вроде как изображение статическое, и не заметно как луч бегает, а потом уменьшая фпс станет видно.
Еще там нужно из этой матрицы что бы буковка была какая нибудь другим цветом :) Ну это я уже попробую сам...
Блин тоже дали задание мне...