Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Error #2012: Obj_mc class cannot be instantiated. (http://www.flasher.ru/forum/showthread.php?t=90812)

farmonol 18.01.2007 17:38

Error #2012: Obj_mc class cannot be instantiated.
 
Имеется класс Gm :
Код:

package {
                import flash.display.*;       
                import Obj_mc;       

        public class Gm extends MovieClip
        {
       
                public function Gm():void
                {
                          var obj:Obj_mc = new Obj_mc();

                }
}

и класс Obj_mc:

Код:

package
{
        import flash.display.*;
        import flash.events.*;
       
        public class Obj_mc extends DisplayObject
       
        {
                public function Obj_mc() {
               
               
                }
        }
               
}

После компиляции получаю сообщение:
ArgumentError: Error #2012: Obj_mc class cannot be instantiated.

в чем затык?

etc 18.01.2007 18:38

В том, что нельзя наследоваться от DisplayObject. Потому как это абстрактный класс.

Цитата:

Сообщение от Flex 2 Reference
DisplayObject is an abstract base class; therefore, you cannot call DisplayObject directly. Invoking new DisplayObject() throws an ArgumentError exception. All display objects inherit from the DisplayObject class. If you create a custom subclass of the DisplayObject class, it must extend a subclass of the DisplayObject class that has a valid new constructor.


farmonol 18.01.2007 19:16

Не совсем понял что имеется ввиду здесь:
If you create a custom subclass of the DisplayObject class, it must extend a subclass of the DisplayObject class that has a valid new constructor.

Хорошо, допустим я создал экземпляр movieclip:

Код:

var obj:DisplayObject;
obj=inst.addChild(new mc);

как obj наделить новыми свойствами и методами?

etc 18.01.2007 19:20

Ты можешь расширять только те классы, которые уже наследуются от DisplayObject.

farmonol 18.01.2007 19:51

Цитата:

Сообщение от __etc
Ты можешь расширять только те классы, которые уже наследуются от DisplayObject.

Тогда делаю так:
Код:

package {
                import flash.display.*;
                import flash.filters.DisplacementMapFilter;       
       
        public dynamic class Gm extends Sprite
{
public function Gm():void
                {       
var q:Mcobj;
q=stage.addChild(new mc);

                }
}

}

класс Mcobj:
Код:

package
{
        import flash.display.*;

        public dynamic class Mcobj extends Sprite
        {
                public function Mcobj():void
                {
                }
               
      public function Some_fn():void {}
        }
}

получаю ошибку:
TypeError: Error #1034: Type Coercion failed: cannot convert mc@1156431 to Mcobj

почему ругается на тип, если Mcobj наследуется от Sprite?
как мне в таком случае добавлять методы к экземпляру мувика?:umnik2:

etc 18.01.2007 19:57

Потому что две строки в конструкторе Gm неверны.

Код:

var q:Mcobj = stage.addChild(new Mcobj());
q.Some_fn();

Кстати, зачем такие жуткие названия классов, переменных и имена методов?

farmonol 18.01.2007 20:11

а с мувиклипом mc что делать? мне нужно метод Some_fn() повесить на его экземпляр. Как мне прописать это?

Nirth 18.01.2007 20:16

Купи себе книжку колина мука, и 90% вопросов пропадут=)

farmonol 18.01.2007 20:18

ну ребят, а форум для чего тогда?
знаю что незнаю
подскажите плиз

etc 18.01.2007 20:26

Цитата:

Сообщение от farmonol
а с мувиклипом mc что делать? мне нужно метод Some_fn() повесить на его экземпляр. Как мне прописать это?

Ты можешь это сделать, объявив публичную переменную Some_fn типа Function. Но так не делают в AS3.


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

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