Форум 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=90900)

Amra Kimmerian 20.01.2007 13:28

Как с помощью скрипта заполнить экран точками (любыми объектами)
 
Здравствуйте.
Нужно с помощью кода сделать так, чтобы черный фон наполнился звездами. Пусть это будут хоть квадратики.
Алгоритм понимаю: сделать цикл создания или загрузки из библиотеки объекта (graphic или mc) и случаным образом разместить по экрану.
Как это все выглядит в Action Script?
Можно ли объект создать в процессе выполнения скрипта или он должен уже лежать в Library?
Может ли этот объект быть graphic или обязательно movieClip?
У меня есть уже в Library movieClip внутри которого лежит graphic белый квадрат. Пробую через цикл загружать его: :umnik2:
Код:

onClipEvent(load) { for ( i=0; i<200; i++)
                                        {
        attachMovie ("Star", "Star" + i, i, {_x:100, _y:100});
                                                };
}

, но ничего на экране не отображается. :confused: Пусть они упадут в одно и тоже место, но хоть один то должен быть виден - размер мувика с квадратом 10х10 пикселей.
Подскажите, пожалуйста, что я делаю неправильно.
И еще вопрос: как потом получить доступ к любому из этих образцов Star+i. Ну, например, чтобы поменять координаты.
Заранее благодарен.

MINASTIS 20.01.2007 13:41

1. Код надо обрамлять тегами , в твоем коде в таком виде даже разбираться не хочется.
2. Создаешь мувиклип на сцене, после в нем делаешь маленькую точку, делаешь точку мувиклипом с именем dot. После в начальном мувиклипе (в которым находится мувик dot) в кадре прописываешь:
Код:

var i:Number = 0;
for (i=0; i<400; i++) {
        duplicateMovieClip(dot,"dot"+i,i);
        this["dot"+i]._x = random (1200)
        this["dot"+i]._y = random (1200)
        this["dot"+i]._alpha = random(100);
        this["dot"+i].onEnterFrame = function () {
                this._x -= random(4)/20;
                this._y -= random(4)/20;
        }

}

Главное чтобы фон был черным.
Это чтобы кружащими звездами фон отделать.

etc 20.01.2007 13:53

MINASTIS, а почему нельзя было сделать ссылку на мувик, а не использовать прямой доступ, который медлителен?

Amra Kimmerian 20.01.2007 14:01

Спасибо за все!
За критику, за метод, за синтаксис! Ну и за проявленную инициативу!
Красиво и величественно движутся звезды!
Спасибо!:yahoo:

Kikasso 20.01.2007 14:09

Вложений: 1
duplicateMovieClip не надо.
не надо onClipEvent.
это устарело.
Сабж. можно сделать хотя бы следующим образом:
1) рисуем черный прямокгольник без рамки на всю сцену, ctrl+k и выравниваем его.
2) кликаем на нем дважды, F8 -> мувиклип с точкой опоры слева вверху.
3) на основной линейке времени с помощью панели свойств даем клипу имя, допустим bg.
Эти операции необходимы, чтобы звезды падали именно на задний план.
Далее рисуем звезду, F8, мувиклип с опорой по центру, в библитеке присваиваем ей linkage "star", со сцены убираем. По дороворенности флешеры с большой буквы пишут только имена классов.
код в первом кадре на основной временной шкале:
Код:

var count:Number = 200;
var initObj:Object = new Object();
while( count-- > 0){
 initObj._x = Math.random()*Stage.width;
 initObj._y = Math.random()*Stage.height;
 initObj._xscale = initObj._yscale = Math.random()*200 + 100;
 initObj._rotation = Math.random()*360;
 bg.attachMovie("star", "star"+count, count, initObj );
}

если хочется движения - измените
Код:

..
// initObj._rotation = Math.random()*360;
 initObj.onEnterFrame = function () {
        var rand:Number = Math.random();
        if( rand > .8 ) this._y+= .1;
        else if( rand > .6 ) this._y-= .1;
        else if( rand > .4 ) this._x-= .1;
        else if( rand > .2 )this._x +=.1;
}
..

пример в аттаче
ps:: обращаться как bg["star" + i] из рута
или _root.bg["star" + i] откуда угодно

MINASTIS 20.01.2007 14:39

__etc я не занимался Флешем пол-учебного года как в универ поступил. Если ты пояснишь что ты имел ввиду, я буду благодарен за восстановление знаний и выявление моих ошибок.

etc 20.01.2007 14:59

Код:

var mc = duplicateMovieClip(…
mc._x = …


MINASTIS 20.01.2007 15:10

Это упростило бы задачу. Буду знать. Спасиб.
По теме:Amra Kimmerian, был рад помочь со звездами =)

Kikasso 20.01.2007 15:20

Цитата:

Сообщение от Amra Kimmerian
Спасибо за все!
За критику, за метод, за синтаксис! Ну и за проявленную инициативу!
Красиво и величественно движутся звезды!
Спасибо!:yahoo:

Чтобы звезды не кончались в коде MINASTIS'а:
Код:

this["dot"+i].onEnterFrame = function () {
if(this._x < -10)this._x = 1200;
else  this._x -= random(4)/20;
if(this._y < -10)this._y = 1200;
  this._y -= random(4)/20;
}

1200 - условное число, поставь другое = размер клипа + ширина звезды

MINASTIS 20.01.2007 17:38

Kikasso хорошее дополнение, я действительно забыл, что они только на определенное время и на определенную площадь.

D12 21.01.2007 03:43

А лишние звезды то нужно удалять иначе через пять минут заклините компьютер ....


P.S. :bye:

Kikasso 21.01.2007 03:56

Цитата:

Сообщение от D12
А лишние звезды то нужно удалять иначе через пять минут заклините компьютер ....


P.S. :bye:

Да гдеж они, лишние-то? Я написал патч к коду MINASTIS'a готорый их телепортирует обратно на исходную, а мои не понравились :o
Мои, согласен, могут уплыть далеко, но это вряд ли, Math.random достаточно надежен.
В обоих случаях число звезд ограничено!
.... ой ой, на какую исходную :eek: в угол он их загоняет... вот дела..

Код:

this["dot"+i].onEnterFrame = function () {
if(this._x < -10)this._x += 1200;
else  this._x -= random(4)/20;
if(this._y < -10)this._y += 1200;
  this._y -= random(4)/20;
}

вот так-то лучше будет:)

iNils 21.01.2007 16:50

Amra Kimmerian, для оформления своего кода, надо использовать теги [code][/code].


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

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