Форум 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)
-   -   Ошибка с расширением класса. (http://www.flasher.ru/forum/showthread.php?t=90946)

pkfun 21.01.2007 21:10

Ошибка с расширением класса.
 
Код:

var mn:MovieClip = this;
var tree:Number = setInterval(create, 1000);
//
function create():Void {
        var mc:mcExtended = mn.attachMovie('anc', 'anc', mn.getNextHighestDepth());
        clearInterval(tree);
}

Этот код выдает такую ошибку:
Цитата:

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 5: Type mismatch in assignment statement: found MovieClip where mcExtended is required.
var mc:mcExtended = mn.attachMovie('anc', 'anc', mn.getNextHighestDepth());

Total ActionScript Errors: 1 Reported Errors: 1
Файл с расширением класса лежит в папке classes. Classes лежит в той же папке что и что и fla с ошибкой. В настройках публикации fla указан путь к классу: classes

Код as файла расширения класса:
Код:

/**
класс mcExtended
*/
class mcExtended extends MovieClip {
        public var mcNumber:Number;
}

Мувиклип в библиотеке создан стандартным способом, класс as2 не подписан.
Но, вот такой код работает нормально. Ошибок не выдает.
Код:

var mc:mcExtended = this.attachMovie('anc', 'anc', this.getNextHighestDepth());
Подскажите, где ошибка?

pkfun 21.01.2007 21:18

Вот такой код тоже работает:
Код:

var mn:MovieClip = this;
var tree:Number = setInterval(this, 'create', 1000);
//
function create():Void {
        var mc:mcExtended = this.attachMovie('anc', 'anc', this.getNextHighestDepth());
}

Чувствую все дело в:
Код:

var mn:MovieClip = this;

Ventur 21.01.2007 21:25

Код:

this.createEmptyMovieClip("mn",this);
var tree:Number = setInterval(this, 'create', 1000);
//
function create():Void {
        var mc:mcExtended = mn.attachMovie('anc', 'anc', this.getNextHighestDepth());
        mc._x+=Math.random()*10;
}


pkfun 21.01.2007 21:38

Ventur
А можите объяснить в чем ошибка моя? Мне хочется понять теоретически. Прочувствовать, так сказать. :)

silin 21.01.2007 21:48

Код:

var mc:mcExtended = this.attachMovie('anc', 'anc', this.getNextHighestDepth());
проходит потому что this undefined в этом контексте, присваивай кому хошь..
Код:

var mc:mcExtended = mn.attachMovie('anc', 'anc', mn.getNextHighestDepth());
попытка присвоить MovieClip переменной с типом mcExtended
чтоб не ругался:
Код:

var mc:mcExtended = mcExtended(mn.attachMovie('anc', 'anc', mn.getNextHighestDepth()));
но anc тогда должен быть залинкован в библиотеке на mcExtended.as, иначе это бред выходит..

зы: классы с прописной именовать принято..

Ventur 21.01.2007 21:51

>но anc тогда должен быть залинкован в библиотеке на mcExtended.as

Совершенно да

pkfun 21.01.2007 22:02

Цитата:

Сообщение от silin
проходит потому что this undefined в этом контексте, присваивай кому хошь..

А это как объяснить тогда?
Код:

var tree:Number = setInterval(this, 'create', 1000);
//
function create():Void {
        trace(typeof(this)) //movieclip
        var mc:mcExtended = this.attachMovie('anc', 'anc', this.getNextHighestDepth());
}

И это:
Код:

var mn:MovieClip=this
 var tree:Number = setInterval(this, 'create', 1000);
//
function create():Void {
        trace(typeof(mn)) //movieclip
        var mc:mcExtended = this.attachMovie('anc', 'anc', this.getNextHighestDepth());
}


silin 21.01.2007 22:08

setInterval(this, 'create', 1000) и setInterval(create, 1000) разные вещи: у первой create есть this (первый параметр setInterval) у второй нет..
в примере Ventur компилятор не ругается, потому как он не знает тип this, то что выдает trace это уже рантайм, (да и в твоем примере с this наверное тоже, а не потому что undefined)
зы: вся эта типизация в AS2 весьма условная штука - только на уровне отслеживания ошибок компилятором, естестественно только там где он может это сделать..

pkfun 21.01.2007 22:19

silin
Честно говоря, не понимаю. Вы скажите mn и this в моем примере это одно и тоже или нет. Если нет, то чем отличаются друг от друга. Сейчас я думаю, что mn и this это одно и то же - объект типа MovieClip указывающий на основную временную диаграмму. :umnik2:

Цитата:

в примере Ventur компилятор не ругается, потому как он не знает тип this, то что выдает trace это уже рантайм, (да и в твоем примере с this наверное тоже, а не потому что undefined)
Вы хотите сказать, что в строке:
Код:

var mn:MovieClip=this
компилятор отслеживает тип this, а в строке:
Код:

var mc:mcExtended = this.attachMovie('anc', 'anc', this.getNextHighestDepth());
просто считает, что у this нет типа(не задан)? Как же быть? Как мне корректно сделать этот код?

silin 21.01.2007 22:33

в твоем примере mn типизованная переменная, компилятор знает ее тип, потому и ругается
в функции
Код:

function create():Void {
        this.attachMovie('anc', 'anc', mn.getNextHighestDepth());
}

на что указывает this выяснится в рантайме (эту create можно ведь приложить к любому объекту или к разным..), компилятор не может знать тип this в create поэтому на всякий случай за ошибку не считает..


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

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