Показать сообщение отдельно
Старый 13.06.2014, 16:33
Wells77 вне форума Посмотреть профиль Отправить личное сообщение для Wells77 Найти все сообщения от Wells77
  № 3  
Ответить с цитированием
Wells77

Регистрация: Nov 2013
Сообщений: 14
Которую неделю мучаюсь сделать внутренний прелоадер в таком проекте (Проект Flash Builder 4.7 на основе fla). Делая все как в статьях с аргументами -frame "start" Main, в итоге при компиляции в флеше и имитации загрузки (CS6) всеравно прелоадер начинает работать только когда весь контент загрузится. Статьи все описаны для прелоадера скомпилированого чисто в ФБ (то-есть используя проект ActionScript Project), но у меня ж fla привязано еще, и я не выношу несколько десятков мувиков в swc, ибо нада так каждому мувику класс прописывать, а в проекте с фла без этого обойтись можна и кода меньше. Вобщем что делаю не так? Можна реально сделать встроенный прелоадер в проекте на основе fla, или все-же придется fla использовать чисто для графики с последствующим импортом в библиотеку swc и компилить уже чисто в билдере без IDE? Очень прошу помощи, ибо крыша начинает ехать уже

Добавлено через 8 минут
Смотрел пример с иностранного сайта проекта сделаного чисто в Билдере 4.7 (ActionScript Project), но с привязкой swc графики с классами. Так вот там все работает c аргументом -frame "start" Main. Попробовал все это прикрутить в свой проект и вот что получилось:
1. Структура такая - Main.as, Preloader.as, Main.fla.
Код Main.as:
Код AS1/AS2:
package {
 
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.system.fscommand;
 
	import Data.CLASSES.LEVELS.LEVEL_1_2;
	import Data.CLASSES.MAIN_MENUS.Main_Menu1;
 
	import flash.events.Event;
 
	public class Main extends MovieClip {
		public var main_menu:Main_Menu1;
		public var level1:LEVEL_1_2;
 
 
		//====================КОНСТРУКТОР=====================================================
		public function Main(){
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
	//--------------------ИНИЦИАЛИЗАЦИЯ МЕНЮ--------------------------------------------------------
		public function init(e:Event = null):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
			main_menu = new Main_Menu1(this)
			addChild(main_menu);	
		}
 
		//---------------Новая игра----------------------------
		public function new_game() {
			level1 = new LEVEL_1_2(stage,this);
			main_menu=remove_movie_clip(main_menu);
			addChild(level1);
		}
 
		//--------------Загрузить игру-------------------------------
		public function load_game() {
 
		}
 
		//--------------Закрыть игру-------------------------------
		public function exit_game() {
			parent.removeChild(this);
			fscommand ("quit");
		}
 
		//---------------------------Удаление мувиков с главной сцены--------------------------------------
		private function remove_movie_clip(clip:*) {
			if (clip) {
				removeChild(clip);
			}
			return null;
		}
 
	}
}
Вобщем элементарный класс с подгрузкой на сцену основного контента. Фактически ничего в нем делать ненада по статьях.

Preloader.as:
Код AS1/AS2:
package
{
	// imports
	import flash.display.MovieClip;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.events.ProgressEvent;
	import flash.utils.getDefinitionByName;
	import mx.logging.Log;
	import mx.logging.targets.TraceTarget;
 
	public class Preloader extends MovieClip
	{
		/**
		 * Constructor
		 */
		public function Preloader()
		{
			trace("Старт прелоадера");
			// stage
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
 
			Pr=new MyPreloader();
			addChild(Pr);
 
			if (loaderInfo.bytesLoaded >= loaderInfo.bytesTotal)
			{
				// swf is already loaded
				preloaderCompleteHandler(null);
			}
			else
			{
				// preloader methods
				loaderInfo.addEventListener(Event.COMPLETE, preloaderCompleteHandler);
				loaderInfo.addEventListener(ProgressEvent.PROGRESS, preloaderProgressHandler);
			}
		}
 
		/**
		 * Preloader progress
		 */
		private function preloaderProgressHandler(event:ProgressEvent):void
		{
			trace("Preloader progress: " + Math.round((event.bytesLoaded / event.bytesTotal) * 100) + "%");
		}
 
		/**
		 * Preloader complete
		 */
		private function preloaderCompleteHandler(event:Event):void
		{
			trace("Прелоадер готов");
			// go to second frame
			gotoAndStop("start");
 
			// application classname
			var applicationClass:* = getDefinitionByName("Main");
 
			// make the application
			var application:* = new applicationClass();
			addChild(application);
		}
	}
}
Добавлено через 9 минут
Дальше в настройках проекта прописал как в статье в АС3 компиле:
Цитата:
-frame "start" Main