PDA

Просмотр полной версии : домик с окошками


Котяра2006
27.10.2006, 19:22
Приветствую!

Вопросик такой есть, помогите пожалуйста кто знает:

утрировано, есть символ - домик многоэтажный, есть символ окошко в первом кадре "горит" во втором "не горит". Как сделать чтобы расставив символы окошек как нужно по верх домика, сделать так чтобы они рандомно то горели то нет проигрываясь то на первом кадре то на втором, имитируя "вечерний дом". Или как это лучше сделать, не могу понять...

Заранее благодарен за любую помощь!

ToXICus
27.10.2006, 20:42
Ладно, напишу пока я, а там, может, кто-то и по проще напишет.
берем одно окно - конверт в мувиклип, там два кадра:
1 - черный
2 - желтый с какими-то шторами. (если хочешь конвертни второй кадр в мувиклип и добавь желтый glow)
в _root пиши
var window:MovieClip;
function lighting() {a=Math.random()1;
if(a<1) {
window.gotoAndStop(1);
} else {
window.gotoAndStop(2);
}
}
setInterval(lighting, 1000);
Таким образом у тебя будут окна включаться и выключаться от силы раз в пару секунд. Меняя в setInterval время в милисекундах скорость переключания будет менятсья.

iNils
27.10.2006, 21:13
ToXICus, для оформления своего кода, надо использовать теги .

ToXICus
28.10.2006, 21:21
Спасибо, я вообще чуток хтмл понимаю (сайт даже склеил :-)), а вот не додумался повесить тэг.
А вообще с оптимизацией в порядке?

Хемуль
28.10.2006, 21:39
2 ToXICus:
Ваш код работать не будет...
Во-первых, тут синтаксическая ошибка:

a=Math.random()1;

Во-вторых, если в качестве параметра Math.random вы хотели передать единицу, то хочу вас огорчить - Math.random не имеет параметров.
Соответственно, проверка

if(a<1)

будет выполняться всегда с положительным результатом, поскольку Math.random возвращает значение n, причём 0 <= n < 1.
Ну и, наконец, непонятно, зачем нужна строка

var window:MovieClip;

Вы зачем-то описываете переменную window типа MovieClip...

Вот:

var windowsClipName:String = "windows";
var windowClipBaseName:String = "window";
var windowBackgroundClipName:String = "background";
var windowFrameClipName:String = "frame";
var windowDarkColor:Number = 0x000066;
var windowLightColor:Number = 0xFFFF00;
var windowsInterval: Number = 10;
var windowsTop:Number = 100;
var windowsLeft:Number = 100;
var xWindowsNumber:Number = 4;
var yWindowsNumber:Number = 4;
var windowsLightInterval:Number = 2000;

var windowsClip:MovieClip = this.createEmptyMovieClip(windowsClipName, this.getNextHighestDepth());
windowsClip._y = windowsTop;
windowsClip._x = windowsLeft;

for (var xIndex:Number = 0; xIndex < xWindowsNumber; xIndex++)
{
for (var yIndex:Number = 0; yIndex < yWindowsNumber; yIndex++)
{
var newWindowName:String = windowClipBaseName + xIndex + yIndex;
var newWindow:MovieClip = createWindow(newWindowName, windowsClip, windowsClip.getNextHighestDepth(), 0, 0);
newWindow._x = xIndex * (newWindow._width + windowsInterval) - windowsInterval;
newWindow._y = yIndex * (newWindow._height + windowsInterval) - windowsInterval;
setRandomWindowLight(newWindow);
}
}

var timer:Number = setInterval(this, "updateWindows", windowsLightInterval);

function updateWindows()
{
for (var xIndex:Number = 0; xIndex < xWindowsNumber; xIndex++)
{
for (var yIndex:Number = 0; yIndex < yWindowsNumber; yIndex++)
{
var windowName:String = windowClipBaseName + xIndex + yIndex;
var windowClip:MovieClip = this[windowsClipName][windowName];
setRandomWindowLight(windowClip);
}
}
}

function setRandomWindowLight(windowClip:MovieClip)
{
setColor(windowClip[windowBackgroundClipName], randRange(1, 2) == 1 ? windowLightColor : windowDarkColor);
}

function createWindow(windowName:String, windowParentClip:MovieClip, windowDepth:Number, windowX:Number, windowY:Number):MovieClip
{
var newWindow:MovieClip = windowParentClip.createEmptyMovieClip(windowName, windowDepth);
newWindow._x = windowX;
newWindow._y = windowY;
var windowBackground:MovieClip = createRectangleMovieClip(windowBackgroundClipName, newWindow, newWindow.getNextHighestDepth(), 0, 0, 1, 1, 0x000000, 100);
var windowFrame:MovieClip = newWindow.attachMovie(windowFrameClipName, windowFrameClipName, newWindow.getNextHighestDepth());
windowBackground._width = windowFrame._width - 1;
windowBackground._height = windowFrame._height - 1;
return newWindow;
}

function setColor(movieClipToPaint:MovieClip, colorToPaint:Number)
{
var newColor:Color = new Color(movieClipToPaint);
newColor.setRGB(colorToPaint);
}

function randRange(min:Number, max:Number):Number
{
var randomNum:Number = Math.round(Math.random() * (max - min)) + min;
return randomNum;
}

function createRectangleMovieClip(newName:String, parentClip:MovieClip, parentClipDepth:Number, newX:Number, newY:Number, newWidth:Number, newHeight:Number, newColor:Number, newAlpha:Number):MovieClip
{
var newClip:MovieClip = parentClip.createEmptyMovieClip(newName, parentClipDepth);
newClip.beginFill(newColor);
newClip.moveTo(0, 0);
newClip.lineTo(newWidth, 0);
newClip.lineTo(newWidth, newHeight);
newClip.lineTo(0, newHeight);
newClip.lineTo(0, 0);
newClip.endFill();
newClip._x = newX;
newClip._y = newY;
newClip._alpha = newAlpha;
return newClip;
}

На сцене создаётся мувиклип-контейнер для иувиклипов окон. Можно задавать его координаты, расстояние между окнами, цвет светлого и тёмного окна, интервал времени между переключениями света в окнах, количество окон по горизонтали и по вертикали...
Исходник прикрепляю...

Котяра2006
31.10.2006, 03:25
Очередной респект г-ну Хемулю! Спасибо :)

ToXICus
30.11.2006, 01:44
Да, но меня же движок форума в отличие от флеша не подправит, а переменная создана для наглядного примера. В конце концов, можно же без такой суровой критики ?-). Мы все учились понемногу.