Проблемы с размерами SWF при загрузке во FLA - PullRequest
1 голос
/ 18 декабря 2009

Я создаю веб-сайт портфолио для себя и хочу встроить SWF, простую флэш-игру, в мой основной флэш-файл. Моя проблема в том, что когда я использую этот код, чтобы поместить swf в мой основной флэш-файл, он не сохраняет надлежащие размеры swf и показывает вещи, которые находятся за пределами сцены. Я не могу понять это! Любая помощь высоко ценится! Спасибо.

Вот мой код. (Я использую Flash CS3 с AS3.)

var my_Loader:Loader = new Loader();

var my_url:URLRequest=new URLRequest("piggybankgame.swf");

my_Loader.contentLoaderInfo.addEventListener(Event.COMPLETE, finishLoading);
my_Loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);

my_Loader.load(my_url);

function finishLoading(loadEvent:Event) {
    addChild(loadEvent.currentTarget.content);
}

Ответы [ 3 ]

2 голосов
/ 20 декабря 2009

Если я правильно вас понимаю, это связано с тем, как была создана флэш-игра SWF. Скорее всего, он построен без заботы о том, что происходит за пределами сцены.

Распространенным заблуждением является то, что прямоугольник, определяемый шириной и высотой SWF, является границей обрезки. Это не. Любой контент, который выходит за эту границу, будет видимым, если окно, отображающее SWF, достаточно велико, чтобы показать его. Это также происходит при изменении размера отдельного окна Flash Player в вашей операционной системе или при встраивании SWF-файла в HTML-страницу с шириной и высотой, для которых установлены значения, превышающие значения, определенные в SWF (например, при публикации из Flash CS3 / CS4.)

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

var loader : Loader = new Loader();
loader.load(new URLRequest('my320x240game.swf'));

var gameMask : Shape = new Shape;
gameMask.graphics.beginFill(0xffcc00);
gameMask.graphics.drawRect(0, 0, 320, 240);

loader.mask = gameMask;
this.addChild(loader);

Это создаст векторную форму (прямоугольник 320x240), которая действует как маска обрезки для экранного объекта загрузчика. Если вы знакомы с масками, надеюсь, легко увидеть, как это означает, что все, что выходит за пределы прямоугольника 320x240, станет невидимым.

Конечно, есть более приятные способы упорядочить код, но, надеюсь, это поможет вам двигаться в правильном направлении.

0 голосов
/ 18 декабря 2009

После загрузки вашего SWF вы должны установить его размер, который вы хотите =>

function finishLoading(loadEvent:Event) {
 var dob:DisplayObject= loadEvent.currentTarget as DisplayObject;
 // or
 // var dob:Loader = loadEvent.currentTarget as Loader;
 addChild(dob);
 dob.width=myWidth;
 dob.height=myHeight; 
}

Конечно, SWF, который вы загружаете, может делать то, что он хочет с шириной и высотой, которую вы проходите.

0 голосов
/ 18 декабря 2009

Я думаю, вы можете просто добавить Loader к родительскому экранному объекту. Например,

var gameSwf:Loader = new Loader();
gameSwf.load(new URLRequest("piggybankgame.swf"));
gameSwf.x = 100;
gameSwf.y = 100;
gameSwf.width = 320;
gameSwf.height = 200;
//Maybe make it visible of something     
gameSwf.contentLoaderInfo.addEventListener(Event.COMPLETE, gameLoaded);
gameSwf.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
addChild(gameSwf);

Я точно знаю, что это работает в Flex 3 с классом SWFLoader, который, как мне кажется, является эквивалентом Flex.

...