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

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

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

Регистрация: Aug 2005
Сообщений: 785
По умолчанию Что то не то с function()

Итак, есть код который не работает...вернее исполнение fun() в S1
я знаю, что ответ прост, но я его найти немогу
во содственно скрипт
Код:
_root.onEnterFrame= function() {
function fun() {
	X=_xmouse-this._x
	Y=_ymouse-this._y
	D=Math.sqrt(X*X+Y*Y)
	if(D<63){
		this._width+=(272-this._width)/5
		this._height+=(272-this._height)/5}
		else{
			this._width+=(140-this._width)/10
		this._height+=(150-this._height)/10}}
}
		
		S1.onEnterFrame= function(){
		 fun()
			 
		}
помогите пожалуйста.
__________________
Нано-флешер (в отставке)

Старый 29.04.2006, 05:04
sergwizard вне форума Посмотреть профиль Отправить личное сообщение для sergwizard Посетить домашнюю страницу sergwizard Найти все сообщения от sergwizard
  № 2  
Ответить с цитированием
sergwizard
 
Аватар для sergwizard

Регистрация: Jan 2002
Адрес: СПб-Denver-Лермонтов
Сообщений: 1,525
Это ты что-то непонятное намутил... Ты, наверное хотел сделать что-то подобное этому?
Код:
MovieClip.prototype.fun = function() {
	this.onEnterFrame= function() {
	X=_xmouse-this._x
	Y=_ymouse-this._y
	D=Math.sqrt(X*X+Y*Y)
	if(D<63){
	      this._width+=(272-this._width)/5
	      this._height+=(272-this._height)/5
                   }else{
	             this._width+=(140-this._width)/10
		this._height+=(150-this._height)/10
	}
         }

}
S1.fun();
__________________
Для того чтобы узнавать, есть два способа: - задавать вопросы и пытаться самому на них ответить. Второй способ более продуктивный.
(S.Wizard)

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

Регистрация: Sep 2002
Сообщений: 30,784
Therion, разберись с областями видимости. Проверь, к чему относится this внутри fun()

Старый 29.04.2006, 15:19
pkfun вне форума Посмотреть профиль Отправить личное сообщение для pkfun Посетить домашнюю страницу pkfun Найти все сообщения от pkfun
  № 4  
Ответить с цитированием
pkfun

Регистрация: Feb 2006
Сообщений: 580
Есть очень полезный инструмент, trace назвается. Очень многое можно узнать о работе кода используя его. Напр. у меня если что-то не работает как нужно, я сразу начинаю трэйсить те или иные строчки и все становится понятно. Напиши напр. внутри своей функции, после строчки if(D<63){ строку trace(this) и тебе многое станет понятно.

Старый 29.04.2006, 16:27
Бармалей вне форума Посмотреть профиль Отправить личное сообщение для Бармалей Посетить домашнюю страницу Бармалей Найти все сообщения от Бармалей
  № 5  
Ответить с цитированием
Бармалей
 
Аватар для Бармалей

Регистрация: Jun 2005
Адрес: Москва
Сообщений: 784
Отправить сообщение для Бармалей с помощью ICQ
Ты сам понял что в коде намутил? Ты внутри функции onEnterFrame создаешь локальную функцию fun(), которая существует только внутри _root.onEnterFrame. И ее нельзя вызывать из S1.onEnterFrame, потому что _root и S1 - это совсем разные клипы.

Попробуй вот так:

Код:
function fun() {
	X = _xmouse-this._x;
	Y = _ymouse-this._y;
	D = Math.sqrt(X*X+Y*Y);
	if (D<63) {
		this._width += (272-this._width)/5;
		this._height += (272-this._height)/5;
	} else {
		this._width += (140-this._width)/10;
		this._height += (150-this._height)/10;
	}
	trace("Работаю");
}
S1.onEnterFrame = function() {
	fun();
};

2 sergwizard, думаю не стоит добавлять новый метод в класс MovieClip для решения проблемы с областями видимости. Покрайней мере мой вариант работает и без этого. =)
__________________
Garbage Collector || AIR (Apollo) Docs


Последний раз редактировалось Бармалей; 29.04.2006 в 16:30.
Старый 29.04.2006, 16:44
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Код:
function fun() {
	X = _xmouse-S1._x;
	Y = _ymouse-S1._y;
	D = Math.sqrt(X*X+Y*Y);
	if (D<63) {
		S1._width += (272-S1._width)/5;
		S1._height += (272-S1._height)/5;
	} else {
		S1._width += (140-S1._width)/10;
		S1._height += (150-S1._height)/10;
	}
	trace("Работаю");
}
S1.onEnterFrame = function() {
	fun();
};
Если уж на то пошло...


Последний раз редактировалось etc; 29.04.2006 в 16:49.
Старый 29.04.2006, 18:05
Therion вне форума Посмотреть профиль Отправить личное сообщение для Therion Найти все сообщения от Therion
  № 7  
Ответить с цитированием
Therion
 
Аватар для Therion

Регистрация: Aug 2005
Сообщений: 785
хм...
только пример который дал sergwizard работает как надо
в осталтных случаях уменшается все сцена, а мне надо чтобы
под this._width this._height понимались параметры мувика к которому я приписываю эту функцию.
К сожелению с командой "Movieclip.prototype" я незнаком
__________________
Нано-флешер (в отставке)

Старый 30.04.2006, 05:13
sergwizard вне форума Посмотреть профиль Отправить личное сообщение для sergwizard Посетить домашнюю страницу sergwizard Найти все сообщения от sergwizard
  № 8  
Ответить с цитированием
sergwizard
 
Аватар для sergwizard

Регистрация: Jan 2002
Адрес: СПб-Denver-Лермонтов
Сообщений: 1,525
Цитата:
2 sergwizard, думаю не стоит добавлять новый метод в класс MovieClip для решения проблемы с областями видимости. Покрайней мере мой вариант работает и без этого. =)
Перед тем, как что-то советовать, стоит проверить, работает ли твой вариант, или нет. Судя по тому, что ты накропал, твой вариант – нерабочий (что и подтверждает Therion).
Можно, конечно, кое-что подправить в твоем варианте, чтобы он стал валидным для MovieClip(a) "S1". Вот таким вот образом: S2.onEnterFrame = fun;. А иначе, ты вызываешь эту функцию для _root.
Ну, уж если тебе не нравится прототипы, то хотя бы напиши функцию более функционально, включи событие onEnterFrame в тело функции. Примерно так:
Код:
 function fun(targ) {
	targ.onEnterFrame = function(){
	X = _xmouse-this._x;
	Y = _ymouse-this._y;
	D = Math.sqrt(X*X+Y*Y);
	if (D<63) {
		this._width += (272-this._width)/5;
		this._height += (272-this._height)/5;
	} else {
		this._width += (140-this._width)/10;
		this._height += (150-this._height)/10;
	}
	}
}
fun(S1);
Кстати, это касается и ETC. Вариант, который он предложил, - неудобен тем, что функция написана только для ОДНОГО мувиклипа. Если на сцене есть несколько клипов, и я захочу применить эту функцию для других, то ничего не получится.
Так что лучше использовать прототипы, или функцию, которую я привел выше.
__________________
Для того чтобы узнавать, есть два способа: - задавать вопросы и пытаться самому на них ответить. Второй способ более продуктивный.
(S.Wizard)

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

Регистрация: Sep 2002
Сообщений: 30,784
По постам автора догадаться, что у него несколько мувиков будет работать с функцией, довольно сложно. Я лишь поправил предыдущий вариант.
Вариантов сделать так, чтобы функцию можно было использовать для нескольких мувиков -- масса.

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

Регистрация: Aug 2005
Сообщений: 785
Всем спосибо за помошь
sergwizard
Твой последний вариант мне очень подошел
__________________
Нано-флешер (в отставке)

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

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

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


 


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


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