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

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

AL.exe 23.10.2008 21:57

ИмяКласса
имяМетода
имяСвойства
ИМЯ_КОНСТАНТЫ

Это кратко :)

artfabrique 05.12.2008 02:09

Цитата:

Сообщение от AlexStukoff (Сообщение 772327)
Спасибо.
Это действительно работает.
Только вот получается такая картина.
У меня изометрия.
Главный герой - 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);


Тоже интересует вопрос.. Что если мы не знаем имена классов в загруженном мувике? как их все сделать доступными в лодере?
может есть способ назначит applicationDomain по умолчанию для загружаемого мувика?

etc 05.12.2008 14:42

artfabrique, LoaderContext.

artfabrique 07.12.2008 01:44

значит назначив аппдомен лодеру при загрузке моей "библиотеки" я смогу инстанциировать классы обьявленные в ней без доп.гемора?

etc 07.12.2008 17:10

А что есть «доп. гемор»?

CrazyFlasher 07.12.2008 17:23

Цитата:

ИМЯ_КОНСТАНТЫ
хм...я так ещё иногда обзываю статик переменные (необязательно константы)...наверное, это пришло ещё из АС2, т.к. там не было констант...не знаю, хорошо ли это? или по конвенции статик проперти недолжна ничем отличаться?


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

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