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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.10.2010, 17:56
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 11  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Код AS3:
public class PersonagesRepository extends MovieClip {
 
	public function PersonagesRepository( mainLink:Main ) {
		mainLink.showProfile();
	}
}

Старый 20.10.2010, 18:12
Vier вне форума Посмотреть профиль Отправить личное сообщение для Vier Посетить домашнюю страницу Vier Найти все сообщения от Vier
  № 12  
Ответить с цитированием
Vier

Регистрация: Sep 2004
Сообщений: 90
джонатан, покажи целиком код PersonagesRepository, похоже у тебя main, как статик объявлен. И подозреваю, что (mainLink as Main).showProfile(); должно прокатить.

Кстати, в конструктор принимай сразу mainLink:Main и не приводи классы.

Старый 20.10.2010, 18:47
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 13  
Ответить с цитированием
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
Bgg: та же ошибка.

Vier:

Код AS3:
package com.russianRoulette {
 
	import flash.display.MovieClip;
	import flash.events.Event;
	import com.flashgangsta.managers.ButtonManager;
	import fl.text.TLFTextField;
	import flash.net.URLLoader;
	import flash.display.Sprite;
	import flash.display.Loader;
	import flash.net.URLRequest;
	import caurina.transitions.Tweener;
	import flash.system.LoaderContext;
	import flash.system.ApplicationDomain;
	import flash.system.SecurityDomain;
	import flash.display.DisplayObject;
	import flash.events.ProgressEvent;
	import com.russianRoulette.Communicator;
 
	public class PersonagesRepository extends MovieClip {
 
		public static const SECTION_SHOP:String = "shop";
		public static const SECTION_REPOSITORY:String = "repository";
		public static const PERSONAGE_MOTION_FRAMES:int = 15;
		public static const PERSONAGE_TRANSITION:String = "easeInOutCubic";
 
		private var main:Main;
		private var currentPersonage:Number = 0;
		private var currentSection:String;
		private var currentId:String;
		private var showcase:MovieClip;
		private var nameLable:TLFTextField;
		private var costLable:TLFTextField;
		private var button:MovieClip;
		private var prevButton:MovieClip;
		private var nextButton:MovieClip;
		private var personage:Sprite;
		private var firstView:Boolean = true;
		private var personageLoader:Loader = new Loader();
		private var title:TLFTextField;
		private var personageGoOutNext:Object;
		private var personageGoOutPrev:Object;
		private var personageGoIn:Object;
		private var confirmation:Confirmation;
		private var blockRect:BlockRect;
		private var messageWindow:Message;
		private var buyingSuccess:Boolean;
 
		private static var personagesData:XML;
 
		public function PersonagesRepository( mainLink:Main, section:String, data:XML ) {
			this.addEventListener( Event.ADDED_TO_STAGE, init );
			main = mainLink;
			currentSection = section;
			personagesData = data;
		}
 
		private function init( event:Event ):void {
 
			trace(  "PersonagesRepository init" );
			this.removeEventListener( Event.ADDED_TO_STAGE, init );
			this.addEventListener( Event.REMOVED_FROM_STAGE, removed );
 
			gotoAndStop( currentSection );
 
			currentPersonage = 0;
			prevButton = prev_mc;
			nextButton = next_mc;
			showcase = showcase_mc;
			nameLable = showcase.name_txt;
			button = showcase.button_mc;
			title = title_txt;
			if( showcase.cost_txt ) costLable = showcase.cost_txt;
			personageGoOutNext = {x: -( stage.stageWidth / 2 ), useFrames: true, time: PersonagesRepository.PERSONAGE_MOTION_FRAMES, transition: PersonagesRepository.PERSONAGE_TRANSITION, onComplete: function():void { this.parent.removeChild( this ) } };
			personageGoOutPrev = {x: stage.stageWidth + ( stage.stageWidth / 2 ), useFrames: true, time: PersonagesRepository.PERSONAGE_MOTION_FRAMES, transition: PersonagesRepository.PERSONAGE_TRANSITION, onComplete: function():void { this.parent.removeChild( this ) } };
			personageGoIn = {x: Math.round( stage.stageWidth / 2 ), useFrames: true, time: PersonagesRepository.PERSONAGE_MOTION_FRAMES, transition: PersonagesRepository.PERSONAGE_TRANSITION };
 
			ButtonManager.addButton( prevButton, showPrevPersonage );
			ButtonManager.addButton( nextButton, showNextPersonage );
			ButtonManager.addButton( button, buttonClicked );
			ButtonManager.setButtonEnable( prevButton, false, true );
 
			showPersonage();
 
		}
 
		public function removed( event:Event ):void {
 
			trace(  "PersonagesRepository removed" );
			this.removeEventListener( Event.REMOVED_FROM_STAGE, removed );
 
			ButtonManager.removeButton( prevButton );
			ButtonManager.removeButton( nextButton );
			ButtonManager.removeButton( button );
			ButtonManager.removeButton( prevButton );
 
		}
 
		private function setLable( name:String, cost:String, id:String ):void {
			nameLable.text = name;
			if( costLable ) costLable.text = "Стоимость: " + cost + " серебряных кредитов";
		}
 
		private function showPersonage():void {
			var personageNode:XML = PersonagesRepository.personagesData.personage[ currentPersonage ];
			setLable( personageNode.@name, personageNode.@cost, personageNode.@id );
			loadPersonage();
		}
 
		private function loadPersonage():void {
			if( personageLoader.contentLoaderInfo.bytesLoaded !== personageLoader.contentLoaderInfo.bytesTotal) {
				personageLoader.close();
			}
 
			personageLoader.contentLoaderInfo.removeEventListener( ProgressEvent.PROGRESS, personageProgress );
			personageLoader.contentLoaderInfo.removeEventListener( Event.COMPLETE, personageLoaded );
 
			var request:URLRequest = new URLRequest( PersonagesRepository.personagesData.personage[ currentPersonage ].@url );
			var top:int = Math.round( title.y + title.height );
			var bottom:int = showcase.y;
 
			personage = new Sprite();
 
			if( firstView  ) {
				personage.x = Math.round( stage.stageWidth / 2 );
				firstView = false;
			}
 
			personage.y = top + Math.round( ( bottom - top )  / 2 );
 
			this.addChild( personage );
 
			personage.addChild( new PersonageRepositoryPreloader() );
			var preloader:DisplayObject = personage.getChildAt( personage.numChildren - 1 );
			preloader.x = -Math.round( preloader.width / 2 );
 
			personageLoader.contentLoaderInfo.addEventListener( ProgressEvent.PROGRESS, personageProgress );
			personageLoader.contentLoaderInfo.addEventListener( Event.COMPLETE, personageLoaded );
 
			personageLoader.load( request, new LoaderContext( false, ApplicationDomain.currentDomain, SecurityDomain.currentDomain ) );
 
		}
 
		private function personageProgress( event:ProgressEvent ):void {
			var preloader = personage.getChildAt( personage.numChildren - 1 );
			var precent:int = Math.round( event.bytesLoaded / event.bytesTotal * 100 );
			preloader.lable_txt.text = precent + "%";
		}
 
		private function personageLoaded( event:Event ):void {
			personage.removeChild( personage.getChildAt( personage.numChildren - 1 ) );
			event.target.content.x = -Math.round( event.target.content.width / 2 );
			event.target.content.y = -Math.round( event.target.content.height / 2 );
			personage.addChild( event.target.content );
			event.target.removeEventListener( ProgressEvent.PROGRESS, personageProgress );
			event.target.removeEventListener( Event.COMPLETE, personageLoaded );
		}
 
		private function showPrevPersonage( target:MovieClip ):void {
 
			Tweener.addTween( personage, personageGoOutPrev );
 
			currentPersonage--;
			showPersonage();
 
			personage.x = -( stage.stageWidth / 2 );
			Tweener.addTween( personage, personageGoIn );
 
			if( currentPersonage === PersonagesRepository.personagesData.personage.length() - 2 ) {
				ButtonManager.setButtonEnable( nextButton, true, true );
			}
 
			if( currentPersonage === 0 ) {
				ButtonManager.setButtonState( prevButton, ButtonManager.STATE_OUT );
				ButtonManager.setButtonEnable( prevButton, false, true );
			}
		}
 
		private function showNextPersonage( target:MovieClip ):void {
 
			Tweener.addTween( personage, personageGoOutNext );
 
			currentPersonage++;
			showPersonage();
 
			personage.x = stage.stageWidth + ( stage.stageWidth / 2 );
			Tweener.addTween( personage, personageGoIn );
 
			if( currentPersonage === 1 ) {
				ButtonManager.setButtonEnable( prevButton, true, true );
			}
 
			if( currentPersonage === PersonagesRepository.personagesData.personage.length() - 1 ) {
				ButtonManager.setButtonState( nextButton, ButtonManager.STATE_OUT );
				ButtonManager.setButtonEnable( nextButton, false, true );
			}
		}
 
		private function buttonClicked( target:MovieClip ):void {
			var currentPersonageInfo:XML = PersonagesRepository.personagesData.personage[ currentPersonage ];
			var message:String;
			currentId = currentPersonageInfo.@id;
 
			if( currentSection === PersonagesRepository.SECTION_SHOP ) {
				message = "Вы уверены что хотите купить " + currentPersonageInfo.@name + " за " + currentPersonageInfo.@cost + " серебряных кредитов?"
				blockRect = new BlockRect();
				confirmation = new Confirmation( message, buy, abort );
				main.addChild( blockRect );
				main.addChild( confirmation );
			}
 
		}
 
		private function buy():void {
			main.communicator.buyPersonage( currentId, onBuyed, VkErrors.buyPersonageError ); //Отправляем запрос на покупку персонажа
			confirmation.setLable( "Подождите..." );
		}
 
		private function abort():void {
			removeConfirmation();
			removeBlockRect();
		}
 
		private function removeConfirmation():void {
			main.removeChild( confirmation );
			confirmation = null;
		}
 
		private function removeBlockRect():void {
			main.removeChild( blockRect );
			blockRect = null;
		}
 
		private function onBuyed( response:XML ):void {
			buyingSuccess = response.success != 0; //Запоминаем результат сделки
			trace( buyingSuccess );
 
			removeConfirmation();
 
			messageWindow = new Message( response.message, messageClose ); //Выводим окно с результатом сделки
			main.addChild( messageWindow );
		}
 
		private function messageClose():void {
			main.removeChild( messageWindow );
			messageWindow = null;
			removeBlockRect();
 
			if( buyingSuccess ) { //Если персонаж был куплен то идём к профайлу.
				this.parent.removeChild( this );
				main.showProfile.call();
			}
 
		}
 
	}
 
}
main.showProfile() самая последняя строчка
__________________
Убейте меня!

Старый 20.10.2010, 20:07
Hidest вне форума Посмотреть профиль Отправить личное сообщение для Hidest Найти все сообщения от Hidest
  № 14  
Ответить с цитированием
Hidest
 
Аватар для Hidest

Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
Что-то у вас все же не так... ибо вот так в чистом виде работает:

Код AS3:
Main.as
 
package  
{
	import flash.display.MovieClip;
 
	public class Main extends MovieClip 
        {
 
		public function Main() 
                {
			var menu:Menu = new Menu(this);
		}
 
		public function showProfile():void
		{
			trace("showProfile called!");
		}
	}
}
 
 
Menu.as
 
package  
{
	import flash.display.MovieClip;
 
	public class Menu extends MovieClip
        {
 
		private var _main:Main;
 
		public function Menu(target:Main) 
               {			
			_main = target; 
			_main.showProfile();
		}
	}
}
Чего у вас пишет, какая ошибка текст ошибки увидел на предыдущей странице

в чем работаете, чем компилите?


Последний раз редактировалось Hidest; 20.10.2010 в 20:28.
Старый 20.10.2010, 20:41
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 15  
Ответить с цитированием
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
Adobe Flash Professional CS5

Сам не пойму, обычно в таких ситуациях ошибки небыло никогда.
__________________
Убейте меня!

Старый 21.10.2010, 01:49
Vier вне форума Посмотреть профиль Отправить личное сообщение для Vier Посетить домашнюю страницу Vier Найти все сообщения от Vier
  № 16  
Ответить с цитированием
Vier

Регистрация: Sep 2004
Сообщений: 90
Покажи еще класс Main. В таком виде у меня тоже ошибки нет.

Старый 21.10.2010, 01:55
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 17  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Код AS3:
public class PersonagesRepository extends MovieClip {
 
	public function PersonagesRepository( mainLink:Object ) {
		main = mainLink as Main; // что такое Main и где оно определено?
		main.showProfile();
	}
}
Добавлено через 1 минуту
Код AS3:
this.parent.removeChild( this );
понравилось.... ))) Но тут мне тоже кажется проблема в компиле. или что то не так делаете. в чистом виде вам показали все верно

Добавлено через 4 минуты
Код AS3:
currentPersonage === 1
и вот это тоже кстати неплохо

Старый 21.10.2010, 04:07
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 18  
Ответить с цитированием
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
Я конечно в АС3 новичек, но что вызвало у вас столько радости в последних двух цитатах кода, мне не понятно? Вы не слышали что такое строгое равенство? И что забавного во второй цитате?
Main это класс fla документа, который находится в том же пакете что и PersonagesRepository.

Кстати:
Код AS3:
currentPersonage === 0
currentPersonage === PersonagesRepository.personagesData.personage.length() - 2
currentPersonage === PersonagesRepository.personagesData.personage.length() - 1
Вам не показалось смешным?
__________________
Убейте меня!


Последний раз редактировалось джонатан; 21.10.2010 в 04:13.
Старый 21.10.2010, 08:34
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 19  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Цитата:
А как же мне тогда быть? Я просто хочу из Menu вызывать методы Main... Но не хочу ограничиваться только статикой.
Значит вы неправильно спроектировали свою идею. Создайте контроллер в Main, он содержит в себе нужные методы для управления меню, в конструктор меню передайте ссылку на этот класс. Хотя должно быть наоборот, ссылка на меню должна передаваться в контроллер меню.
__________________
тут я

Старый 21.10.2010, 11:49
Hidest вне форума Посмотреть профиль Отправить личное сообщение для Hidest Найти все сообщения от Hidest
  № 20  
Ответить с цитированием
Hidest
 
Аватар для Hidest

Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
Или шлите событие из своего меню, а уже в main его ловите и делайте, что нужно.

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

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

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


 


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


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