Форум 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)
-   -   beginBitmapFill фоном как? (http://www.flasher.ru/forum/showthread.php?t=146968)

Survey 23.11.2010 11:15

beginBitmapFill фоном как?
 
День добрый.
Столкнулся с такой проблемой - делаю резиновый ролик, фон заполняю растровым изображением с помощью beginBitmapFill (libBitmap - фоновая картинка).
Всё бы ничего только не могу background`ом сделать (полученный фон "лежит" сверху и всё перекрывает). Можете подсказать как этого можно избежать?

Код AS1/AS2:

_root.listener = new Object();
_root.listener.onResize = function() { this.scaleMovie(); }
Stage.addListener(_root.listener);
 
this.scaleMovie = function() {
trace("А окошечко-то другим стало");
}
Stage.scaleMode = "noscale";
Stage.align = "TL";
//
// сама функция
function resizeContent ():Void {
  bmp_fill_mc._width = Stage.width/2;
  bmp_fill_mc._x = (Stage.width - my_mc._width)/2;
}
//
// слушатель для события onResize
var resizeListener:Object = new Object();
resizeListener.onResize = risizeContent;
Stage.addListener(resizeListener);
import flash.display.*;
import flash.geom.*;
var myBitmapData:BitmapData = BitmapData.loadBitmap ("libBitmap");
this.createEmptyMovieClip ("bmp_fill_mc", this.getNextHighestDepth ());
with (bmp_fill_mc) {
matrix = new Matrix ();
repeat = true;
beginBitmapFill (myBitmapData, matrix, repeat, smoothing);
moveTo (0, 0);
lineTo (0, 3000);
lineTo (3000, 3000);
lineTo (3000, 0);
lineTo (0, 0);
endFill ();
}
bmp_fill_mc._xscale = 100;
bmp_fill_mc._yscale = 100;


mooncar 23.11.2010 11:26

Цитата:

Сообщение от Survey (Сообщение 951678)
не могу background`ом сделать (полученный фон "лежит" сверху и всё перекрывает

Вы сами так указали, выбрав последнюю глубину для мувика фона:
Код AS1/AS2:

this.createEmptyMovieClip ("bmp_fill_mc", this.getNextHighestDepth ());

Например, фон создайте на нулевой глубине, а не на самой последней, а контент разместите в контейнере на глубине 1.

udaaff 23.11.2010 11:30

Или _root залейте.

Survey 23.11.2010 13:17

т.е так?:
Код AS1/AS2:

this.createEmptyMovieClip ("bmp_fill_mc", this.getNextHighestDepth (0));

а как в контейнер слой отдельный поместить (который должен быть сверху)?

mooncar 23.11.2010 16:31

Нет.
Вот это выражение вычисляет последнюю свободную глубину внутри объекта, на который указывает this:
Код AS1/AS2:

this.getNextHighestDepth();

Чтобы создать мувик на 0-ой глубине, следует просто записать
Код AS1/AS2:

this.createEmptyMovieClip ("bmp_fill_mc", 0);

Лучше сделайте как udaff посоветовал, тогда не надо будет лишние контейнеры создавать.

То есть ничего не создавайте, а просто залейте _root:
Код AS1/AS2:

import flash.display.*;
import flash.geom.*;
var myBitmapData:BitmapData = BitmapData.loadBitmap ("libBitmap");
 
matrix = new Matrix ();
repeat = true;
beginBitmapFill (myBitmapData, matrix, repeat, smoothing);
moveTo (0, 0);
lineTo (0, 3000);
lineTo (3000, 3000);
lineTo (3000, 0);
lineTo (0, 0);
endFill ();


Survey 23.11.2010 20:27

Спасибо, всё заработало
Т.к. бэкграундом надо "замостить" код немного изменил
Код AS1/AS2:

_root.listener = new Object();
_root.listener.onResize = function() { this.scaleMovie(); }
Stage.addListener(_root.listener);
 
this.scaleMovie = function() {
trace("А окошечко-то другим стало");
}
Stage.scaleMode = "noscale";
Stage.align = "TL";
//
// сама функция
function resizeContent ():Void {
  bmp_fill_mc._width = Stage.width/2;
  bmp_fill_mc._x = (Stage.width - my_mc._width)/2;
}
//
// слушатель для события onResize
var resizeListener:Object = new Object();
resizeListener.onResize = risizeContent;
Stage.addListener(resizeListener);
import flash.display.*;
import flash.geom.*;
var myBitmapData:BitmapData = BitmapData.loadBitmap ("libBitmap");
//this.createEmptyMovieClip ("bmp_fill_mc", this.getNextHighestDepth ());
with (myBitmapData) {
matrix = new Matrix ();
repeat = true;
beginBitmapFill (myBitmapData, matrix, repeat, smoothing);
moveTo (0, 0);
lineTo (0, 3000);
lineTo (3000, 3000);
lineTo (3000, 0);
lineTo (0, 0);
endFill ();
}
bmp_fill_mc._xscale = 100;
bmp_fill_mc._yscale = 100;

Теперь другой вопрос появился:
есть мувик,который отображается в правом углу флешки. При растяжении оной фон "замощается" но мувик не остаётся справа (остаётся на том же самом месте), как можно это исправить?

mooncar 23.11.2010 20:36

Корректируйте его положение в той же функции resizeContent.
Вначале нужно запомнить его положение по x и y и начальные размеры сцены. И, поскольку у вас стоит "TL", задаете в resizeContent добавки к начальным координатам как разности между новыми размерами сцены и старыми значениями ширины и выстоты.
Если бы стояло "T", делали бы половинную добавку, т.к. растяжение-сжатие сцены происходило бы от центра.

Survey 24.11.2010 09:14

Спасибо.


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

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