Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Что то не то с function() (http://www.flasher.ru/forum/showthread.php?t=78988)

Therion 29.04.2006 03:26

Что то не то с 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()
                       
                }

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

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
Твой последний вариант мне очень подошел:)


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

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