![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Всем привет!
Юзаю стандартный прелоудер,который генерит флешдевелоп, он начинает отображаться только с 70 процентов оно и понятно ( но тут же нельзя медию положить на 3 кадр? или можно? как советают в ксэцоы? или как это сделать? package { import flash.display.Bitmap; import flash.display.DisplayObject; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.events.ProgressEvent; import flash.text.TextField; import flash.utils.getDefinitionByName; import game.Media; import game.Define; import orlax.core.Utils; import flash.text.TextFieldAutoSize; import flash.display.BlendMode; public class Preloader extends MovieClip { [Embed(source='../Build/lib/Loader.png')] static public var loaderIMG:Class; protected var loaderSPR:Sprite = null; public function Preloader() { addEventListener(Event.ENTER_FRAME, checkFrame); // show loader this.graphics.beginFill(0xa0aaf7); this.graphics.drawRect(0,0, Define.SCREEN_WIDTH, Define.SCREEN_HEIGHT); this.graphics.endFill(); var spr:Sprite = new Sprite(); addChild(spr); loaderSPR = spr; spr.graphics.beginFill(0xffffff); spr.graphics.drawRect(-1, -1, 253, 16); spr.graphics.endFill(); spr.x = Define.SCREEN_WIDTH/2 - spr.width / 2; spr.y = Define.SCREEN_HEIGHT/2 - spr.height / 2; var img:Bitmap = new loaderIMG(); addChild(img); img.x = Define.SCREEN_WIDTH/2 - img.width / 2; img.y = Define.SCREEN_HEIGHT/2 - img.height / 2; drawProgress(0); } private function drawProgress(prc:Number):void { loaderSPR.graphics.beginFill(0x374375); loaderSPR.graphics.drawRect(-1, -1, 253 * prc, 16); loaderSPR.graphics.endFill(); } public function isUrl(urls:Array):Boolean { var domain:String = getUrl(); for (var i:int = 0; i < urls.length; i++) { if (domain == urls[i]) return true; } return false; } public function getUrl():String { var url:String = stage.loaderInfo.loaderURL; var urlStart:Number = url.indexOf("://") + 3; var urlEnd:Number = url.indexOf("/", urlStart); var domain:String = url.substring(urlStart, urlEnd); var LastDot:Number = domain.lastIndexOf(".") - 1; var domEnd:Number = domain.lastIndexOf(".", LastDot) + 1; domain = domain.substring(domEnd, domain.length); return domain; } private function checkFrame(e:Event):void { // update loader if (currentFrame == totalFrames) { removeEventListener(Event.ENTER_FRAME, checkFrame); startup(); } else { drawProgress((loaderInfo.bytesLoaded * 100 / loaderInfo.bytesTotal)/100); } } private function startup():void { Media.load(); stop(); if (isUrl(["","flashgamelicense.com"])) { var mainClass:Class = getDefinitionByName("Main") as Class; addChild(new mainClass() as DisplayObject); } else { var txt:TextField = new TextField(); txt.text = "[" + getUrl() + "]\nError: this URL not found"; txt.setTextFormat(Media.textFormatCenter); txt.selectable = false; txt.autoSize = TextFieldAutoSize.CENTER; addChild(txt); txt.scaleX = txt.scaleY = 2; txt.x = Define.SCREEN_WIDTH / 2 - txt.width / 2; txt.y = Define.SCREEN_HEIGHT / 2 - txt.height / 2; //drawProgress(0.5); txt.blendMode = BlendMode.INVERT; } } } } |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
__________________
Reality.getBounds(this); |
|
|||||
|
oO ясненько!
структура такая) есть класс Media в нем статические классы ембеды к примеру так class Media { public static var images:Array=[]; [embed .....'jpg'..] protected static img1:Class; } а в Лоад просто создается по одному экземляру типо |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Ну вот и ответ. То есть все это добро у Вас грузится в первый кадр Прелоадера. Отсюда и 70% на старте.
__________________
Reality.getBounds(this); |
|
|||||
|
угу я таки в первом посте и написал!
а как во флеш девелопе грузить не на первый? мне не ясно! как быть? Добавлено через 1 минуту может типо в прелоудере где чек фрейм? написать если кадр==2? но мне не ясно сколько в прелоудере кадров, и откуда они беруться ( |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Не надо импортить в него классы, не участвующие в самом прелоадере. Например - Media. Я же написал - весь контент должен импортироваться в класс Мейн. Прелоадер вообще не должен знать, что они существуют, эти классы, картинки, звуки и все прочее, чего он сам не показывает. В прелоадере должно быть ТОЛЬКО то, что визуализирует сам прелоадер. Все остальное запускается, когда на сцену помещается Мейн. Знать о них должен только Мейн, не Прелоадер. Вы должны рассматривать их как две разных флэшки:
Сначала загружаются все элементы, необходимые для показа первого кадра - Прелоадера, и он отображается. Проигрывающая головка таймлайна переходит на второй кадр - checkFrame определяет что этот кадр - последний. Выполняется плеер НАХОДИТ класс Мейн и начинает загружать все, что "упоминается" в нем - вот здесь и начинается загрузка основного контента, при этом Прелоадер уже работает и показывает эту загрузку (точнее генерит события прогресса загрузки, а уж что там показывается и как - определяете Вы в обработчиках) - и продолжается до тех пор, пока не загрузится все необходимое для показа "второго кадра" - то есть, вся флэшка целиком. Когда все загрузится, мувиклип Прелоадера покажет этот кадр. А в этом кадре - собственно все Ваше приложение. Вот, грубо, схема работы этого прелоадера. Если еще грубее - первый кадр это класс Прелоадер, а второй кадр - класс Мейн. Всю тяжелую артиллерию Вы должны инициировать только в Мейн, а в Прелоадере - только то что нужно Прелоадеру.
__________________
Reality.getBounds(this); |
|
|||||
|
Спасибо огромное, сейчай попробую)
|
![]() |
![]() |
Часовой пояс GMT +4, время: 13:38. |
|
|
« Предыдущая тема | Следующая тема » |
|
|