2013-05-01 3 views
0

Я разрабатываю небольшую игру, и я создаю класс для объекта-моба. Класс содержит несколько широких переменных, которые будут полезны при создании нескольких экземпляров этого объекта. Мне было интересно, было бы нормально иметь загрузчика внутри класса вместо загрузчика в основном классе, который можно было бы использовать для загрузки изображений для класса mob, который я пишу.AS3 загрузчик в классе экземпляров

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

Так может ли кто-нибудь сказать мне, если это не слишком ресурсоемкое, чтобы каждый экземпляр использовал свой собственный загрузчик, а затем установил его равным null после загрузки изображения? Объем проекта довольно прост, но хорошо знать будущие проекты.

--edit--

Я просто смотрел в graphics.copyfrom (источник) и понял, что не собирается работать. Еще больше исследований привело меня к неожиданному отсутствию «клонирования мувиклипа». Кроме того, как я боялся, указывая несколько мувиклипов на содержимое загрузчика, удалил их все, когда я попытался его удалить.

К сожалению, хотя мой первоначальный выбор может быть неэффективным, это, в основном, единственный способ, которым это можно сделать ... У каждой мобы есть анимированный swf movieclip, поэтому я не могу создавать растровые изображения. Я также не могу повторно использовать контент от загрузчиков, потому что, если несколько мувиклипов указывают на него, изменение одной толпы вызовет изменения в мувиклипах остальных. К сожалению, я собираюсь - на данный момент - придерживаться каждой толпы, имеющей собственный загрузчик (который установлен в значение null после использования) и загрузки внешнего swf. Видимо, в AS2 был способ сделать это, и я не хочу использовать символ библиотеки с классами документов. Итак, я застрял. Спасибо за помощь, я думаю, отправьте сообщение, если вы выясните решение моей проблемы!

--edit--

я понял фрагмент кода может также быть полезным. Имейте в виду, что это swfs с загружаемыми 20 + кадрами.

public class Spawner { 

     var mc:MovieClip; 
     var loader:Loader; 
     var refr:Stage; 
     var x:Number,y:Number; 
     var loaded:Boolean = false; 

     public function Spawner(ref:Stage, type:String, inx:Number, iny:Number) { 
      refr = ref; 
      x = inx; 
      y = iny; 
      loader = new Loader(); 
      loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadImg); 
      loader.load(new URLRequest(type)); 
     }//constructor 

     public function loadImg(e:Event):void{ 
      mc = MovieClip(e.target.content); 
      loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadImg); 
      refr.addChild(mc); 
      mc.gotoAndStop(1); 
      mc.x = x; 
      mc.y = y; 
      refr = null; 
      loader = null; 
      loaded = true; 
     }//loadImg 

    }//class 

ответ

0

Это звучит как очень плохая идея. Вы загружаете новое изображение для каждого отдельного экземпляра.

Почему бы просто не иметь класс с вашими загрузчиками, которые будут действовать как ваш графический репозиторий. Загрузите все изображения, которые вам нужны в определенном разделе вашей игры, а затем выпустите экземпляры BitmapData для каждого загружаемого изображения.

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

Визуально вы должны иметь что-то вроде этого:

enter image description here

+0

Я не очень люблю эту терминологию. Может ли «bitmapdata» быть анимированным swf/movieclip? Если это так кажется хорошей идеей. Какой метод я использовал бы для MovieClips как отдельные копии источника? – user2118704

+0

Подождите, я думаю, у меня есть идея ... было бы хорошо иметь массив загрузчиков, содержащих ресурсы, чтобы я мог просто передать их содержимое конструкторам моих объектов? Как ... Arr [0] = new Loader(); Arr [0] .contentLoaderInfo.addEventListener (Event.COMPLETE, dostuff); Arr [0] .load (новый URLRequest ("someresource.swf")); затем в методе 'dostuff': Arr [0] = MovieClip (event.target.content); , и тогда я смогу установить для него мувиклипы, и каждый из них будет их собственным экземпляром? – user2118704

+0

Или (извините за изменения) было бы лучше сделать то, что у меня было выше, но использовать 'moveclip.copygraphics (Arr [0] .graphic);'? – user2118704

0

ИМХО, нет проблем, у вас есть класс с загрузчиком внутри него. Сборщик мусора позаботится об этой задаче и очистит ее для вас. Самая важная часть - сделать «removeEventListener» слушателей, которые вы использовали, чтобы освободить загрузчика сборщику мусора.

Но если у вас будет 350 объектов, загружающих 350 разных изображений одновременно, вы можете думать по-другому: а если вы сделаете спрайт и загрузите его один раз и используете его десятки раз?

Проблема здесь (ЕСЛИ есть проблема) - это количество запросов http одновременно для изображений. Если это замедляет процесс загрузки, подумайте о sprite image.

ура.

+0

У меня есть removeEventListener после загрузки мувиклип. Спасибо за разъяснение, что мой подход невелик, но, по крайней мере, возможен. Я могу попытаться создать идею хранилища с другого поста. – user2118704

+0

Я бы использовал спрайт или растровое изображение, если бы мог, но это анимированные swfs. Кажется, это мой единственный выбор, поскольку альтернативные решения и классы, похоже, делают то же самое (несколько экземпляров загрузчика или массив загрузчиков). – user2118704

Смежные вопросы