PDA

Просмотр полной версии : Что то не то с function()


Therion
29.04.2006, 03:26
Итак, есть код который не работает...вернее исполнение 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()

}
помогите пожалуйста.

sergwizard
29.04.2006, 05:04
Это ты что-то непонятное намутил... Ты, наверное хотел сделать что-то подобное этому?
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();

etc
29.04.2006, 15:00
Therion, разберись с областями видимости. Проверь, к чему относится this внутри fun()

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

Бармалей
29.04.2006, 16:27
Ты сам понял что в коде намутил? Ты внутри функции 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 для решения проблемы с областями видимости. Покрайней мере мой вариант работает и без этого. =)

etc
29.04.2006, 16:44
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();
};
Если уж на то пошло...

Therion
29.04.2006, 18:05
хм...
только пример который дал sergwizard работает как надо:bye:
в осталтных случаях уменшается все сцена, а мне надо чтобы
под this._width this._height понимались параметры мувика к которому я приписываю эту функцию.
К сожелению с командой "Movieclip.prototype" я незнаком:(

sergwizard
30.04.2006, 05:13
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. Вариант, который он предложил, - неудобен тем, что функция написана только для ОДНОГО мувиклипа. Если на сцене есть несколько клипов, и я захочу применить эту функцию для других, то ничего не получится.
Так что лучше использовать прототипы, или функцию, которую я привел выше.

etc
30.04.2006, 10:54
По постам автора догадаться, что у него несколько мувиков будет работать с функцией, довольно сложно. Я лишь поправил предыдущий вариант.
Вариантов сделать так, чтобы функцию можно было использовать для нескольких мувиков -- масса.

Therion
30.04.2006, 17:32
Всем спосибо за помошь
sergwizard
Твой последний вариант мне очень подошел:)