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

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

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

Регистрация: Mar 2007
Сообщений: 46
По умолчанию Как в классе переменную одной функции загрузить в другую?

Цитата:
Kuruki
Ну к примеру так
Код:
public function function1():String { 
var str:String = 'hello';
return str;
}
public function function2(par:String):Void {
trace(par);
}
public function function3():Void {
function2(function1());
}
Спасибо, что ответил .

Можешь помочь в моем примере? На скорую руку накропал, несуди плиз строго.
Как сделать чтобы мое условие if ... else if работало в функции init?
Код:
class my {
	private var frames:MovieClip;
	public function my(str:String) {
		this.frames = frames;
		var str:String = "hello";
		getDaten(str);
	}
	private function getDaten(str:String) {
		var obj:Object = this;
		for (var i = 0; i <= str.length; i++) {
			var tex = str[i];
			if (tex[10] == "up") {
				var m_Frame:MovieClip = frame_Up;
			} else if (tex[0] == "down") {
				var m_Frame:MovieClip = frame_Down;
			}
		}
		obj.init();
	}
	private function init() {
		var frame_Up:MovieClip = this.createEmptyMovieClip("frame", this.getNextHighestDepth());
		var frame_Down:MovieClip = this.createEmptyMovieClip("frame", this.getNextHighestDepth());
		frames = m_Frame.attachMovie("fr", "fr" + i, m_Frame.getNextHighestDepth());
	}

}

Старый 13.08.2008, 13:22
Kuruki вне форума Посмотреть профиль Отправить личное сообщение для Kuruki Найти все сообщения от Kuruki
  № 2  
Ответить с цитированием
Kuruki

Регистрация: Jan 2008
Сообщений: 669
Ой-ё! Я даже не могу понять, что ты хочешь сделать... Ты хочешь передавать в конструктор имя клипа, а потом аттачить его что-ли? Вообщем распиши все по-подробнее на словах.

Старый 13.08.2008, 19:52
DrugON вне форума Посмотреть профиль Отправить личное сообщение для DrugON Найти все сообщения от DrugON
  № 3  
Ответить с цитированием
DrugON
 
Аватар для DrugON

Регистрация: Mar 2007
Сообщений: 46
извини намудрил конечно...
вот оригинал моей функции
Код:
	private function getXMLDaten(xml_weg:String):Void {
		var punkt:Object = this;
		var menu_db:Array = new Array();
		this.xml.onLoad = function(success:Boolean) {
			if (success) {
				for (var i = 0; i < this.firstChild.childNodes.length; i++) {
					var shortcut = this.firstChild.childNodes[i];
					var submenu_db:Array = new Array();
					if (shortcut.attributes.ur == "up") {
						var m_frame = frame_Up;
					} else if (shortcut.attributes.ur == "down") {
						var m_frame = frame_Mitte;
					}
					for (var j = 0; j < shortcut.childNodes.length; j++) {
						submenu_db.push({ur:shortcut.childNodes[j].attributes.ur, caption:shortcut.childNodes[j].attributes.name, link:shortcut.childNodes[j].attributes.link});
					}
					menu_db.push({ur:shortcut.childNodes[j].attributes.ur, caption:shortcut.attributes.name, link:shortcut.attributes.link, subnav_db:submenu_db});
				}
				punkt.initMenu(menu_db);
			}
		};
		xml.load(xml_weg);
	}
опять же, я хочу чтобы мое условие выполнялось в другой функцие. Да, хочу передать в конструктор имя клипа
Код:
	private function initMenu():Void {
var frames:MovieClip = m_Frame.attachMovie("fr", "fr" + i, m_Frame.getNextHighestDepth());
}
как это сделать?

Старый 13.08.2008, 20:36
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Создавать функции внутри функций - плохо, на то есть много причин.
Есть для этих целей класс mx.utils.Delegate он специально предназначен для делегирования (передачи) объекта в области видимости которого будет выполнена функция этой функции.
Кроме того, переделывать ХМЛ в другую структуру, будь то массив или объект - в 99% случаев абсурдное занятие, которое только занимает время и ресурсы. В общем случае, либо используйте так, как есть, либо если очень сложная структура - есть XPath, есть и в mx пакете, и есть альтернативный вариант.
Ну и вот это - ну, как бы вообще не серьезно:
Код:
menu_db.push({	ur:shortcut.childNodes[j].attributes.ur, 
			caption:shortcut.attributes.name, 
			link:shortcut.attributes.link, 
			subnav_db:submenu_db});
Почему нельзя было так?
Код:
menu_db.push(shortcut.childNodes[j].attributes);
Кроме всего прочего, перебирать в цикле ХМЛ таким вот образом:
Код:
while(xml.childNodes[i].childNodes[i].childNodes[i].childNodes[i]...)
Во-первых нечитаемо, а во вторых создает лишнюю нагрузку, т.е. логично в таком случае поступить так:
Код:
var xn:XMLNode = xml.childNodes[i].childNodes[i].childNodes[i].childNodes[i];
while(xn.childNodes[i]...)
__________________
Hell is the possibility of sanity

Старый 13.08.2008, 22:22
DrugON вне форума Посмотреть профиль Отправить личное сообщение для DrugON Найти все сообщения от DrugON
  № 5  
Ответить с цитированием
DrugON
 
Аватар для DrugON

Регистрация: Mar 2007
Сообщений: 46
Спасибо за советы, но у меня пока нет цели оптимезировать.
Цитата:
Кроме того, переделывать ХМЛ в другую структуру, будь то массив или объект - в 99% случаев абсурдное занятие, которое только занимает время и ресурсы.
ну хорошо, переделывать не чего не будем.
вот так моя функция функционирует 100%
Код:
	private function getXMLDaten(xml_weg:String):Void {
		var punkt:Object = this;
		var menu_db:Array = new Array();
		var frame_Up:MovieClip;
		this.xml.onLoad = function(success:Boolean) {
			if (success) {
				for (var i = 0; i < this.firstChild.childNodes.length; i++) {
					var shortcut:Array = this.firstChild.childNodes[i];
					
					var submenu_db:Array = new Array();
					for (var j = 0; j < shortcut.childNodes.length; j++) {
						submenu_db.push({ur:shortcut.childNodes[j].attributes.ur, caption:shortcut.childNodes[j].attributes.name, link:shortcut.childNodes[j].attributes.link});

					}
					menu_db.push({ur:shortcut.attributes.ur, caption:shortcut.attributes.name, link:shortcut.attributes.link, subnav_db:submenu_db});
					this.initMenu.apply(this, shortcut);
				}
				punkt.initMenu(menu_db);
			}
		};
		xml.load(xml_weg);
	}
попробывал переменную передать в функцию initMenu() методом apply
Код:
	private function initMenu(nav_db:Array, shortcut):Void {
		if (shortcut.attributes.ur == "up") {
			var m_frame = frame_Up;
			trace(shortcut.attributes.ur);
		} else if (shortcut.attributes.ur == "down") {
			var m_frame = frame_Mitte;
			trace(m_frame);
		}
var frames:MovieClip = m_Frame.attachMovie("fr", "fr" + i, m_Frame.getNextHighestDepth());
}
но приходит только один параметр undefined, а не массив. Так разве нельзя?
P.S. я только учусь и пытаюсь разобраться.

Старый 14.08.2008, 02:34
XBEEN вне форума Посмотреть профиль Отправить личное сообщение для XBEEN Найти все сообщения от XBEEN
  № 6  
Ответить с цитированием
XBEEN

Регистрация: Dec 2007
Сообщений: 69
Ты запутался в this'ах, а еще разберись в области видимости функции...
Внутри анонимной функции this'ом является экзепляр xml, а экзепляр объекта punkt внутри данной функции не будет виден.
И вообще ЗАЧЕМ ты экзепляру объекта punkt присваиваешь экзепляр класса?
В общем решение может быть таким:
Код:
private var menu_db:Array = new Array();
private var frame_Up:MovieClip;
private var xml:XML;
private function getXMLDaten(xml_weg:String):Void {
		xml.onLoad = Proxy.create(this, checkLoadingResult);
		xml.load(xml_weg);
}
private function checkLoadingResult():Void {
		if(xml.loaded) {
			// твой код
			initMenu(arr);
		}
}
private function initMenu(arr:Array):Void
{

}
Создаешь дополнительный класс Proxy, который расширяет область видимости
Код:
class Proxy
{
	public static function create(obj:Object, func:Function):Function
	{
		var arg:Array = arguments.slice(2);
		var new_func:Function = function()
		{
			return func.apply(obj, arg);
		};
		return new_func;
	}
}
Proxy позволяет передавать параметры, но в нашем случае можно было использовать встроенный класс mx.utils.Delegate!
В любом случае это "гавнокод", лучше разберись в принципах ООП, а потом пиши код в классах.


Последний раз редактировалось XBEEN; 14.08.2008 в 02:41.
Создать новую тему Ответ Часовой пояс GMT +4, время: 22:32.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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