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

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

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

Регистрация: Mar 2010
Сообщений: 30
Question Почему я не могу обратиться к мувику?(область видимости)

привет! есть код:

Код AS1/AS2:
function createObj(){
	function initObjFromLib(iName,iLib,iNew,xCoord,yCoord){
		iName=attachMovie(iLib,iNew,_root.getNextHighestDepth());
		iName._x=xCoord;
		iName._y=yCoord;
	}
	function initEmptyObj(iName,xCoord,yCoord){
		_root.createEmptyMovieClip(iName,_root.getNextHighestDepth());
		iName._x=xCoord;
		iName._y=yCoord;
	}
	initObjFromLib(buttonNext,"mc","smc",365,255);
	initObjFromLib(buttonBack,"mc","smc2",485,255);
	initEmptyObj(frameForShow,100,100);
	trace(buttonNext);
 
}
 
createObj();
результат работы trace: undefined, а я хочу что бы был _level0.smc.

почему так выходит? как сделать лучше, если я хочу сделать код более удобным, логичным, но не хочу заморачиваться с ООП на ас2?

Старый 23.04.2010, 21:46
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 2  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
А что такое buttonNext? И зачем вы функции в функцию позасовывали?

Старый 23.04.2010, 21:53
Blackjack1616 вне форума Посмотреть профиль Отправить личное сообщение для Blackjack1616 Найти все сообщения от Blackjack1616
  № 3  
Ответить с цитированием
Blackjack1616

Регистрация: Mar 2010
Сообщений: 30
buttonNext - это предполагаться быть кнопкой.

от функции initObjFromLib я хочу создание мувиКлипа с заданными параметрами(как называется, объект из библиотеки, новое имя, икс, игрек) и последующим к нему обращением.

а что функции нельзя объявлять в функции?

Добавлено через 4 минуты
я хотел что бы
это:
Код AS1/AS2:
nextButton=attachMovie("mc","smc",_root.getNextHighestDepth());
nextButton._x=100;
nextButton._y=100;
было в более(как на мой непрофессиональный взгляд) удобной форме

Код AS1/AS2:
function initObjFromLib(iName,iLib,iNew,xCoord,yCoord){
		iName=attachMovie(iLib,iNew,_root.getNextHighestDepth());
		iName._x=xCoord;
		iName._y=yCoord;
	}
initObjFromLib(buttonNext,"mc","smc",365,255);
Добавлено через 9 минут
да я помню, что могу обратиться к новому имени(attachMovie("mc","НОВОЕ_ИМЯ", _root.getNextHigestDepth()) ), но мне кажется, что логичнее обращаться к имени переменной(buttonNext)

я опять велосипед изобретаю?


Последний раз редактировалось Blackjack1616; 23.04.2010 в 22:04.
Старый 23.04.2010, 22:05
AzagThoth вне форума Посмотреть профиль Отправить личное сообщение для AzagThoth Найти все сообщения от AzagThoth
  № 4  
Ответить с цитированием
AzagThoth
 
Аватар для AzagThoth

блогер
Регистрация: Sep 2009
Сообщений: 309
Записей в блоге: 4
Отправить сообщение для AzagThoth с помощью ICQ
Ого Вы жжёте.
Код AS1/AS2:
MovieClip.attachMovie()
Доступность
Flash Player 5.
 
Синтаксис
my_mc.attachMovie(idName:String, newName:String, depth:Number [, initObject:Object]) : MovieClip
 
Параметры
idName Linkage name (имя для линковки) символа мувиклипа в Библиотеке, используемое для присоединения (attach) мувиклипа на Сцену. Это имя вводится в поле Identifier диалогового окна Linkage Properties. 
 
newname Уникальное имя присоединяемого мувиклипа. 
 
depth Число, определяющее глубину присоединяемого мувиклипа.
 
initObject (поддерживается, начиная с Flash Player 6) Объект, содержащий свойства, передаваемые присоединенному мувиклипу. Это свойство позволяет динамически создавать мувиклипы, получающие параметры. Если initObject не объект, параметр игнорируется. Все свойства initObject копируются в только что созданный мувиклип. Свойства, определенные в initObject, доступны функции-конструктору. Этот параметр является необязательным.
 
Возвращает
Ссылку на созданный объект .
 
Описание
Метод; берет символ из Библиотеки и присоединяет (attach) к мувиклипу my_mc на Сцене. Используйте MovieClip.removeMovieClip() или MovieClip.unloadMovie() для удаления мувиклипа, присоединенного с помощью attachMovie().
 
Вы можете расширять методы и обработчики событий класса MovieClip, создавая его подклассы. Для более подробной информации смотри "Присвоение класса мувиклип-символу " в Использовании ActionScript во Flash.
 
Пример
В примере ниже присоединяет символ с linkage identifier “circle” к мувиклипу на Сцене:
 
this.attachMovie("circle", "circle1_mc", this.getNextHighestDepth());
this.attachMovie("circle", "circle2_mc", this.getNextHighestDepth(), {_x:100, _y:100});
 
См. также
MovieClip.removeMovieClip(), MovieClip.unloadMovie(), removeMovieClip()
Добавлено через 1 минуту
Т.е. в Вашем случае достаточно одной строки.
__________________
Играй. Это жизнь.
Всё повторяется. Играй.

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

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
а что функции нельзя объявлять в функции?
Много чего можно, особенно в AS1, но это не значит, что нужно так делать.

Код AS1/AS2:
function initObjFromLib(parent, iLib, iNew, xCoord, yCoord)
{
	var iName = parent.attachMovie(iLib, iNew, parent.getNextHighestDepth());
	iName._x = xCoord;
	iName._y = yCoord;
	return iName;
}
 
function initEmptyObj(parent, iName, xCoord, yCoord)
{
	var mc = parent.createEmptyMovieClip(iName, parent.getNextHighestDepth());
	mc._x = xCoord;
	mc._y = yCoord;
	return mc;
}
 
var buttonNext = initObjFromLib(_root, "mc", "smc", 365, 255);
var buttonBack = initObjFromLib(_root, "mc", "smc2", 485, 255);
var frameForShow = initEmptyObj(_root, "smc3", 100, 100);
 
trace(buttonNext + " " + buttonBack + " " + frameForShow);

Старый 23.04.2010, 22:07
Blackjack1616 вне форума Посмотреть профиль Отправить личное сообщение для Blackjack1616 Найти все сообщения от Blackjack1616
  № 6  
Ответить с цитированием
Blackjack1616

Регистрация: Mar 2010
Сообщений: 30
Цитата:
Сообщение от udaaff Посмотреть сообщение
И зачем вы функции в функцию позасовывали?
я подумал. что было бы не плохо функции определенного типа, держать в одном месте.

Добавлено через 4 минуты
Всем большое спасибо!

Добавлено через 23 минуты
...но если я вдруг сделаю так:
Код AS1/AS2:
function initObjFromLib(iParent,iLib,iNew,xCoord,yCoord){
		var iName;
		iName=attachMovie(iLib,iNew,iParent.getNextHighestDepth());
		iName._x=xCoord;
		iName._y=yCoord;
		return iName;
		//trace(buttonNext);
}
function createObj(){
 
	buttonNext = initObjFromLib(_root,"mc","smc",365,255);
 	buttonBack = initObjFromLib(_root,"mc","smc3",465,255);
 
 
	trace("внутри: "+buttonNext);
}
function controlObj(){
        buttonNext+=10;
        trace("Получиться?");
}
trace("снаружи: "+buttonNext);
createObj();
controlObj();
Получиться, или избегать так делать?

Старый 23.04.2010, 22:32
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 7  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
Сообщение от Blackjack1616 Посмотреть сообщение
я подумал. что было бы не плохо функции определенного типа, держать в одном месте.
Тогда вам класс нужно писать, и данные функции делать методами этого класса, читай типа.

Цитата:
Получиться, или избегать так делать?
Получится. Только += 10 нужно не к мувику прибавлять, видимо.
И
Код AS1/AS2:
trace("снаружи: "+buttonNext);
у вас еще до создания объекта идет. Внимательнее как-то надо быть.


Последний раз редактировалось udaaff; 23.04.2010 в 22:40.
Старый 23.04.2010, 22:40
Blackjack1616 вне форума Посмотреть профиль Отправить личное сообщение для Blackjack1616 Найти все сообщения от Blackjack1616
  № 8  
Ответить с цитированием
Blackjack1616

Регистрация: Mar 2010
Сообщений: 30
Цитата:
читай типа.
Проще вроде уже АС3 читать, он под это более заточен, не?


Цитата:
buttonNext у вас объявляется как локальная переменная и снаружи функции ее не видно, соответственно.
ох.. Спасибо за помощь!

Цитата:
у вас еще до создания объекта идет. Внимательнее как-то надо быть.
Черт! И точно!


Последний раз редактировалось Blackjack1616; 23.04.2010 в 22:44.
Старый 23.04.2010, 22:43
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 9  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Не как локальная Я уже исправил. Если бы var был, то локальной была бы.

Старый 23.04.2010, 22:55
Blackjack1616 вне форума Посмотреть профиль Отправить личное сообщение для Blackjack1616 Найти все сообщения от Blackjack1616
  № 10  
Ответить с цитированием
Blackjack1616

Регистрация: Mar 2010
Сообщений: 30
Блин! Все работает!
И все по стопочкам лежит! большое-большое спасибо!

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

Теги
function , undefined , область видемости

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

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


 


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


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