Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Удобная или правильная подгрузка картинок,звуков в основную флэшку (http://www.flasher.ru/forum/showthread.php?t=117251)

AlexStukoff 22.10.2008 19:06

Удобная или правильная подгрузка картинок,звуков в основную флэшку
 
Привет всем.

Есть основная флэшка, движок игры.

В ней много уровней, каждый уровень со своей специфической графикой и звуками. Однако физика и суть объектов в принципе не меняется. Т.е. на одном уровне деревянные бочки как препятствия на другом предположим арбузы и т.п. :)
И вот встал вопрос - как эти ресурсы грузить?
Очевидно, что не "россыпью" т.е. каждую картинку и звук отдельным файлом. Все ресурсы легче собрать в одну флэшку и подгружать её в движок.
Но как тогда получить доступ к графике?

Например у меня есть класс Препятствие у которого есть свойство MovieClip (либо Bitmap) и он очень хочет туда заполучить изображение из подгружаемой библиотеки.

Как организовать swf с ресурсами чтобы их можно было как-то вменяемо вытащить уже в основной флэшке?

Вменяемо это значит как-то вот так:

Код:

BulletObject.Picture = [ссылка_на_загруженную_swf].BulletPic;
где Picture предположим Sprite;

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

Фух.
Если есть какие мысли или советы буду благодарен за помощь.

tyapichu 22.10.2008 19:49

есть у элементов, в библиотеке расположенных, такое свойство Linkage, в котором можно прописать имя класса. вот так и организуются ресурсы во флешке. потом загружаешь флешку и обращаешься к ресурсу по созданному тобой имени.

AlexStukoff 23.10.2008 10:47

Спасибо за совет, только КАК? :)

Создал флэшку 1.swf. У символа в библиотеке в свойстве Linkage прописано имя класса MyBox.

Далее пишу основную флэшку

Код:

package {
        import flash.events.*;
        import flash.display.Loader;
        import flash.net.URLRequest;
        import flash.display.DisplayObject;
       
        public class main extends MovieClip{
                var myloader:Loader = new Loader();
                function main() {
                        myloader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplite);
                        myloader.load(new URLRequest("1.swf"));
                }
                function onLoadComplite(evt:Event)
                {
                        var G:DisplayObject = myl.content;
                //И вот как теперь?
                //Очевидно, что любые вызовы формата
                var R:MovieClip = new G.MyBox();
                //или
                addChild(G.MyBox);
                //закончатся неудачей, потому что про свойство MyBox никому, кроме меня не известно :))))
                        }
        }
}

Что делать-то? Как жить дальше?

Alex Lexcuk 23.10.2008 11:11

Код:

package {
 import flash.display.*;
 import flash.events.*;
 import flash.net.*;
 import flash.text.*;
 import flash.utils.*;
 import flash.media.*;
 
  dynamic public class Receiver_doc extends Sprite{;
  public var loader:Loader;
  public var req:URLRequest;
  var Gerl_class:Class;
  var Dog_class:Class;
  var gerl_mc:MovieClip;
  var dog_mc:MovieClip;
  var i:int;
  public function Receiver_doc() {
  loader = new Loader();
  //addChild(loader);
  req = new URLRequest("House_mc.swf");
  loader.load(req);
  loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onLoadProgress);
  loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
  }
 
  public function onLoadProgress(param1:ProgressEvent):void {
  txt.text = "PROGRESS " + int(100 * (param1.bytesLoaded / param1.bytesTotal)) + "%";
  }
 
  public function onLoadComplete(param1:Event):void {
  removeChild(txt);
  Gerl_class = loader.contentLoaderInfo.applicationDomain.getDefinition("MyBox") as Class;
  gerl_mc = new Gerl_class();
  addChild(gerl_mc);
  gerl_mc.x = -250;
  gerl_mc.y=-50;
 
  gerl_mc = new Gerl_class();
  addChild(gerl_mc);
  gerl_mc.x = 100;
  gerl_mc.y=-50;
    }
  }
}

http://www.dnadillo.dn.ua/fla/load-MovieClip-class.html

mre 23.10.2008 11:16

Alex Lexcuk, не именуют так переменные - Gerl_class.

AlexStukoff 23.10.2008 13:24

Спасибо.
Это действительно работает.
Только вот получается такая картина.
У меня изометрия.
Главный герой - 8 изображений поворота.
Враги. 10 видов у каждого такая же петрушка - 80 изображений.
текстуры: пол 13 видов. стены - 19 видов.
прочие объекты - 12 объектов.
в итоге имеем 132 уникальных изображений.
Как это получается в коде? (левое опускаю)
Код:

var MegaLoader:Loader
function give_me_please_a_piece_of_happiness(Name_of_Movie_Clip:String, TargetMovieClip:MovieClip):void{
  var TempClass:Class;
  TempClass = MegaLoader.contentLoaderInfo.applicationDomain.getDefinition(Name_of_Movie_Clip) as Class;
  TargetMovieClip = new TempClass ();
}

//в основном коде
var MyHero:MovieClip;
give_me_please_a_piece_of_happiness("SmileFaceOfHero", MyHero);


etc 23.10.2008 13:44

Цитата:

Сообщение от mre (Сообщение 772302)
Alex Lexcuk, не именуют так переменные - Gerl_class.

Да и в словарик лучше иногда заглядывать :quiet:

†‡Paladin‡† 23.10.2008 14:32

param1:Event - ну неужели так сложно прочитать один раз конвенцию...

etc 23.10.2008 14:39

Цитата:

Сообщение от †‡Paladin‡† (Сообщение 772354)
param1:Event - ну неужели так сложно прочитать один раз конвенцию...

Скорее это вообще результат декомпиляции.

AlexStukoff 23.10.2008 16:22

Конвенция это как я понимаю соглашение о том, как и что называть? правила формирования имен переменных, классов, функций и прочее?
Если не секрет, то где можно почитать?


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

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