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

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

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

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
По умолчанию Обращение к функции внутри функции

Как можно обратиться к функции которая находится внутри другой функции?
К примеру
Код AS3:
function addAmmo():void
{
	for(var j:uint = 0; j<maxAmmo; j++)
	{
		ammoElement_mc = new AmmoElement();
		ammo_mc.addChild(ammoElement_mc);
		ammoElement_mc.x += 3 * j;
		ammoElement_mc.name = "ammoElement" + j;
	}
}
 
addAmmo();
 
function downAmmo(e:MouseEvent):void
{
	ammoTimer.addEventListener(TimerEvent.TIMER, removeAmmo);
	ammoTimer.start();
 
	stage.addEventListener(MouseEvent.MOUSE_UP, holdAmmo);
 
	function holdAmmo(e:Event):void
	{
		ammoTimer.removeEventListener(TimerEvent.TIMER, removeAmmo);
	}
 
	function removeAmmo(e:Event):void
	{
		if(currentElement >= 0)
		{
			ammo_mc.removeChild(ammo_mc.getChildByName("ammoElement" + currentElement));
			trace("Gun Fire!");
			currentElement--;
		}
		else if(currentElement < 0)
		{
			reloadTimer.addEventListener(TimerEvent.TIMER, reloadAmmo);
			reloadTimer.start();
			stage.removeEventListener(MouseEvent.MOUSE_DOWN, downAmmo);
		}
	}
	function reloadAmmo(e:Event):void
	{
		trace("Sound Playing");
		addAmmo();
		currentElement = maxAmmo - 1;
		reloadTimer.removeEventListener(TimerEvent.TIMER, reloadAmmo);
		stage.addEventListener(MouseEvent.MOUSE_UP, holdAmmo);
		stage.addEventListener(MouseEvent.MOUSE_DOWN, downAmmo);
	}
}
 
function reloadOnDemand(e:KeyboardEvent):void
{
	if(e.keyCode == 87)
	{
	trace(e.keyCode);
	}
}
stage.addEventListener(MouseEvent.MOUSE_DOWN, downAmmo);
stage.addEventListener(KeyboardEvent.KEY_DOWN, reloadOnDemand);
Вот мне надо обратится к функции ReloadAmmo в функции ReloadOnDemand!
И ещё один вопрос, можно как то использовать одну и туже функцию при нажатии на клавиатуре и просто вызывая её из другой функции. В примере - функция ReloadAmmo, можно ли с ней так, или обязательно оборачивать её в ещё одну функцию, которая будет вызывать нужное событие?

Старый 11.03.2010, 00:24
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Никогда не создавайте функции в функциях.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
почему?

Добавлено через 2 минуты
И ответ на второй вопрос можно?

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

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от Universe Посмотреть сообщение
почему?
Потому что вы не можете к ним обратиться в последствии, если события, обработчиками которых они являются, не возникнут. Ну а про отсутствие доступа вне родительской функции и говорить не приходится. Зачем вы себе положили такие огромные грабли и с удовольствием на них прыгаете, остается загадкой.

Старый 11.03.2010, 12:10
ivanov660 вне форума Посмотреть профиль Отправить личное сообщение для ivanov660 Найти все сообщения от ivanov660
  № 5  
Ответить с цитированием
ivanov660

Регистрация: Mar 2010
Сообщений: 3
почитай про ООП :-)

Старый 11.03.2010, 14:13
chabapok вне форума Посмотреть профиль Отправить личное сообщение для chabapok Найти все сообщения от chabapok
  № 6  
Ответить с цитированием
chabapok

Регистрация: Jul 2009
Сообщений: 240
Записей в блоге: 1
попробуйте downAmmo.prototype.reloadAmmo() или downAmmo.reloadAmmo(), одно из двух (точно не помню) должно сработать, по идее.

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

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от chabapok Посмотреть сообщение
попробуйте downAmmo.prototype.reloadAmmo() или downAmmo.reloadAmmo(), одно из двух (точно не помню) должно сработать, по идее.
Ни то, ни другое работать не будет.

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

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
ок, переделал структуру!

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

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

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


 


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


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