PDA

Просмотр полной версии : Повторяющийся фон


torrentevg
15.02.2009, 02:27
Кто знает как сделать в флеше так что бы фон повторялся. Например у меня есть патерн(узор) который должен повторяться по всей сцене. Таким образом уменьшая размер ролика.
В принципе решение есть, например добавить в Библиотеку изображение которое будет служить узором потом разместить его на сцене, конвертировать этот узор в Символ(Movie Clip) не нажимая ОК заходим в Advanced где ставим чекбокс напротив Export for ActionScript, для поля Identifier задаем имя square жмем ОК.
Удаляем мувик со сцены, идем в первый кадр жмем F9 и вставляем следующий АС:


tileBG = function () {

tile_width = 34;
tile_height = 34;
//
x_max = Math.round(Stage.width/tile_width);
y_max = Math.round(Stage.height/tile_height);
trace(x_max);
trace(y_max);
for (x=0; x<=x_max; x++) {

for (y=0; y<=y_max; y++) {

bg = _root.attachMovie("square", "bg"+x+y, this.getNextHighestDepth());
bg._x = tile_width*x;
bg._y = tile_height*y;

}

}

};
tileBG();



И все было бы хорошо .. но есть всегда какое то НО в котором мне так и не получается разобраться и заключается оно в том что в каком бы слое мы не вставляли данный скрипт он всегда будет на самом верху. Даже если у вас 100 слоев выше этого этот узор будет перекрывать их всех. Теперь вопрос каким образом поместить узор на сцену таким образом что бы он был всегда на самом низу. Можно ли средствами АС указать z-index ?

Fatality
15.02.2009, 02:53
В принципе решение есть, например добавить в Библиотеку изображение которое будет служить узором потом разместить его на сцене, конвертировать этот узор в Символ(Movie Clip) не нажимая ОК заходим в Advanced где ставим чекбокс напротив Export for ActionScript, для поля Identifier задаем имя square жмем ОК.
Удаляем мувик со сцены, идем в первый кадр жмем F9 и вставляем следующий АС:
Какое поразительное умозаключение ! Сами догадались ?

Для начала, лучше откажитесь от getNextHighestDepth() и задавайте глубину переменной-счетчиком. А "z-index" если его так называть, можно указать методом clip_mc.swapDepth(собственно "z-index").

tileBG = function () {

tile_width = 34;
tile_height = 34;
//
x_max = Math.round(Stage.width/tile_width);
y_max = Math.round(Stage.height/tile_height);
trace(x_max);
trace(y_max);
var num:Number = 0;
for (x=0; x<=x_max; x++) {

for (y=0; y<=y_max; y++) {
bg = _root.attachMovie("square", "bg"+x+y, num);
bg._x = tile_width*x;
bg._y = tile_height*y;

bg.onRelease = function()
{
trace(this.getDepth());
}

num--;
}

}

};
tileBG();

Жень Шень
16.02.2009, 12:36
Привет!
Посмотри пример. Фишка в том, что не надо:
1. Задавать размеры патерна. Габариты артинки определяют шаг.
2. Можно динамически менять заливку нужным патерном.
3. При изменении размера окна, картинка не масштабируется.
4. ... и при этом заливает всю область окна.
Но, последнее по своему усмотрению (можно ограничится только сценой клипа).

silin
16.02.2009, 12:49
такой еще вариант:
import flash.display.BitmapData;

var pattern:BitmapData=BitmapData.loadBitmap("pic");//pic - id картинки в библиотеке
_root.beginBitmapFill(pattern);
_root.lineTo(Stage.width,0);
_root.lineTo(Stage.width,Stage.height);
_root.lineTo(0,Stage.height);
_root.lineTo(0,0);
_root.endFill();

iGaF
26.04.2009, 22:59
Всем привет!
есть картинка она загружается в фон. нужно что бы при наведение мышкой в правый конец дублировалась таж картинка и еще плавно двигалась влево) т е как бы зацикливая фон. подскажите как сделать) может быть пример какой нить)
заранее спасибо!

а еще тут на форуме прочел в какой то теме про bitmapdata.draw(); может быть это можно реализовать с его помощью? если да то покажите пример (я совсем новичок)

Wolsh
26.04.2009, 23:26
А можно теперь это как-то на русский перевести? Я лично ничего вообще не понял, что дублируется, куда дублируется, куда плавно ("плавно" - понял)) двигается и что при этом зацикливается..

silin
27.04.2009, 09:14
у beginBitmapFill есть аргумент matrtix, отвечающий за трансформацию исходной картинки..
плавное (реально скорее всего это будет не очень плавно) смещение можно сделать, например так
import flash.display.BitmapData;
import flash.geom.*;

var pattern:BitmapData = BitmapData.loadBitmap("pic");//pic - id картинки в библиотеке
var vx:Number = 0;
var mtrx = new Matrix();
function onEnterFrame() {
vx = 10*(0.5-_xmouse/Stage.width);
mtrx.tx+=vx;

_root.clear();
_root.beginBitmapFill(pattern,mtrx);
_root.lineTo(Stage.width,0);
_root.lineTo(Stage.width,Stage.height);
_root.lineTo(0,Stage.height);
_root.lineTo(0,0);
_root.endFill();

}

iGaF
27.04.2009, 18:40
2Wolsh есть картинка я ее загружаю во флеш через MovieClipLoader. как мне потом сделать что бы она повторялась(а не заного загружалась) справа от загружаемой много много раз?)

ОльгаЮрьевна
27.04.2009, 18:51
MovieClipLoader грузит картинку в клип, т.о. после загрузки картинки просто дублируйте ваш клип вместе с содержимым (т.е. с вашей картинкой):)

lexa2000lexa
27.04.2009, 18:54
клипы не дублируються после того как в них что то загруженно.

ОльгаЮрьевна
27.04.2009, 18:59
клипы не дублируються после того как в них что то загруженно.
жалко... а почему?

lexa2000lexa
27.04.2009, 19:02
не знаю почему, но так написанно в хелпе.

iGaF
27.04.2009, 19:07
да да. вот прочел на форуме про bitmapdata.draw() метод. поможет он мне или нет?? если да то можно пример привести) а то хелп как то не сильно помог)

Добавлено через 31 минуту
дада. я знаю. на форуме читал про bitmapdata.draw(); метод. с помощью него можно дублировать или нет? если да то приведите плз пример загрузки и потом дублирования с помощью него.

Wolsh
27.04.2009, 20:30
Вот пример. Изучайте, спрашивайте.

iGaF
27.04.2009, 23:15
2 Wolsh спс огромное!) то что нужно)

adrenalin45
28.10.2009, 16:57
Отличный скролл,
Вопрос, как остановить изображение в край (чтобы не дублировалось) ?

bert19
05.05.2010, 23:22
Давно не брался за флэш, а вот приключилась необходимость, отсюда вопрос - по теме! - если нужно прокрутить не внешний подгружаемый битмап, а свою же, флэшевскую картинку (мувик), что в коде поменять надо? Просто вместо загрузки пустого клипа указать свой... хмм... простите тяжко после перерыва ((