Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.04.2009, 16:31
ekeeper вне форума Посмотреть профиль Отправить личное сообщение для ekeeper Найти все сообщения от ekeeper
  № 1  
Ответить с цитированием
ekeeper

Регистрация: May 2008
Сообщений: 102
По умолчанию Почему класс приложения может создаваться дважды?

В CS4 создал флэшку, и главным классом приложения у нее прописал класс Main - потом описал его. Все нормально, работает итд.

Решил прекрутить прелоадер
Сходил на http://etcs.ru/blog/cs3/export_in_se...ame_flash_cs3/
почитал и сделал как там написано. Тоже все хорошо

То есть я поменял главный класс приложения с Main на Preloader
Прелоадер работает - когда все догружает он создает объект класса Main.

Проблема в том, что если в теле конструктора Main написать trace("Main"); то в аутпуте выведется строка "Main" два раза. И различные глюки в приложении показывают, что объектов типа Main - две штуки.

Весь код проверил раз 10 - сам руками я создают объект этот только в прелоадере.

Неужели fla как-то запомнил что прошлым классом приложения был Main и его переглючило и он теперь создает и его и прелоадер?

Попробовал по другом - создал новый проект - перенес туда кадры и библиотеку - не помогло.

Помогите плз проект горит

Старый 27.04.2009, 16:36
willis83 вне форума Посмотреть профиль Отправить личное сообщение для willis83 Найти все сообщения от willis83
  № 2  
Ответить с цитированием
willis83
 
Аватар для willis83

Регистрация: Jan 2008
Адрес: Украина, Славутич
Сообщений: 646
Отправить сообщение для willis83 с помощью ICQ
код в студию

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

Регистрация: May 2008
Сообщений: 102
Все как тут http://etcs.ru/blog/cs3/export_in_se...ame_flash_cs3/
При этом в куче проектах это использую - нигде такого нет

Preloader.as
Код AS3:
package {
	import flash.display.*;
	import flash.text.*;
	import flash.events.*;
 
	public class Preloader extends MovieClip {
		public static const ENTRY_FRAME:Number = 3;
		public static const DOCUMENT_CLASS:String = 'Main';
 
		private var progressBar:Sprite;
		public static var Application:Preloader;
 
		public function Preloader() {
			super();
			stop();
			Application = this;
 
			stage.showDefaultContextMenu = false;
			stage.scaleMode = flash.display.StageScaleMode.NO_SCALE;
			//stage.align = flash.display.StageAlign.TOP_LEFT;
 
			progressBar = getChildByName("ProgressBar") as Sprite;
			progressBar.scaleX = 0;
			loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
			loaderInfo.addEventListener(Event.COMPLETE, completeHandler);
		}
 
		private function progressHandler(event:ProgressEvent):void {
			var loaded:uint = event.bytesLoaded;
			var total:uint = event.bytesTotal;
			progressBar.scaleX = loaded/total;
		}
 
		private function completeHandler(event:Event):void {
			play();
			addEventListener(Event.ENTER_FRAME, enterFrameHandler);
		}
 
		private function enterFrameHandler(event:Event):void {
			if (currentFrame >= Preloader.ENTRY_FRAME) {
				removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
				stop();
				main();
			}
		}
 
		private function main():void {
			//var programClass:Class = loaderInfo.applicationDomain.getDefinition(Preloader.DOCUMENT_CLASS) as Class;
			//var program:Sprite = new programClass() as Sprite;
			var program:Main = new Main();
			program.name = "Main";
			stage.addChild(program);
		}
	}
}
Main.as
Код AS3:
package {
	import flash.display.*;
	import flash.events.*;
	public class Main extends Sprite {
 
		public function Main() {
			super();
                        trace("Main");
               }
        }
}

Старый 27.04.2009, 17:28
willis83 вне форума Посмотреть профиль Отправить личное сообщение для willis83 Найти все сообщения от willis83
  № 4  
Ответить с цитированием
willis83
 
Аватар для willis83

Регистрация: Jan 2008
Адрес: Украина, Славутич
Сообщений: 646
Отправить сообщение для willis83 с помощью ICQ
а функция main в прелоадере сколько раз вызывается. Поставьте в ней трэйс... вот вам и 2 класcа Main

Старый 27.04.2009, 17:30
ekeeper вне форума Посмотреть профиль Отправить личное сообщение для ekeeper Найти все сообщения от ekeeper
  № 5  
Ответить с цитированием
ekeeper

Регистрация: May 2008
Сообщений: 102
Чтобы хоть как-то работало - пришлось ввести счетчик объектов и проверять его в конструкторе класса Main. Жесть.

Добавлено через 54 секунды
Цитата:
Сообщение от willis83 Посмотреть сообщение
а функция main в прелоадере сколько раз вызывается. Поставьте в ней трэйс... вот вам и 2 класcа Main
Ставил трэйс - main вызывается ровно один раз...

Добавлено через 5 минут
Мне кажется это IDE глючит - сейчас был косяк следующего рода

у меня два разных проекта (лежат в разных папках) - но оба Fla называются Game и у каждого из них есть Main.as свой который они используют

Я открыл оба флашника и оба мэина - и компильнул один из проекетов - проект подцепил вместо своего Main.as - мэин другого проекта 0_о и вывалил кучу ошибок.

Перезапустил CS4 - все заработало

Старый 27.04.2009, 17:47
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Вы убили всю работу прелоадера, явно указав класс Main в Preloader. Можно было в таком случае вообще никаких прелоадеров не делать.

Старый 27.04.2009, 17:55
ekeeper вне форума Посмотреть профиль Отправить личное сообщение для ekeeper Найти все сообщения от ekeeper
  № 7  
Ответить с цитированием
ekeeper

Регистрация: May 2008
Сообщений: 102
Вы вот про эти строки?
Код AS3:
			var program:Main = new Main();
			program.name = "Main";
Когда я писал так:
Код AS3:
var programClass:Class = loaderInfo.applicationDomain.getDefinition(Preloader.DOCUMENT_CLASS) as Class;
var program:Sprite = new programClass() as Sprite;
эффект был тот же самый

Старый 27.04.2009, 18:02
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Значит Main инициализируется в embed-клипе, а этого происходить не должно. Нельзя переходить на кадр с embed-клипом, либо надо сделать два кадра в embed-клипе, остановить его на первом, а на втором разместить все необходимые элементы.

Создать новую тему Ответ Часовой пояс GMT +4, время: 21:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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