Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   домик с окошками (http://www.flasher.ru/forum/showthread.php?t=87061)

Котяра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, для оформления своего кода, надо использовать теги [code][/code].

ToXICus 28.10.2006 21:21

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

Хемуль 28.10.2006 21:39

Вложений: 1
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

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


Часовой пояс GMT +4, время: 07:11.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.