Связывание библиотечного класса с расширенным классом и базовым классом

Использование библиотечных классов смущает меня еще раз. У меня следующая ситуация:

package com.op_pad.pages
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;

/**
 * ...
 * @author Martino Wullems
 */
public class Page extends MovieClip 
{
    public var currentPage:String = ""; //help page label
    public var testvar:int = 0;
    var helpPage:HelpPage;

    public function Page(PAGENAME:String = null):void {

        //tweening etc
        addEventListener(Event.ADDED_TO_STAGE, onStage);

        trace("currentPage: " + currentPage);
        trace("testvar: " + testvar);
    }

    private function onStage(e:Event):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, onStage);

        trace("on stgae called");

        try { terug.addEventListener(MouseEvent.CLICK, goback, false, null, true) } catch (e) {  };
        try{homebutton.addEventListener(MouseEvent.CLICK, goHome, false, 0, true)}catch (e) { };
        try { stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown, false, 0, true) } catch (e) { trace("back button fail"); };
        try { help.addEventListener(MouseEvent.CLICK, showHelpPage, false, 0, true) } catch (e) { trace("help not found") };
    }

    public function addListeners():void {

        //try{terug.addEventListener(MouseEvent.CLICK, goback, false, null, true)}catch(e){};
        //try{homebutton.addEventListener(MouseEvent.CLICK, goHome, false, 0, true)}catch (e) { };
        //try{stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown, false, 0, true)}catch (e) {trace("back button fail"); };
    }

    public function goback(e:MouseEvent):void 
    {
        try { MovieClip(parent).loading = false } catch (e) { trace("loading boolean not existent");}
        MovieClip(parent).removeChild(this);
    }

    private function goHome(e:MouseEvent):void 
    {
        try { MovieClip(parent).loading = false } catch (e) { trace("loading boolean not existent");}
        MovieClip(parent).removeChild(this);
    }

    private function showHelpPage(e:MouseEvent):void 
    {
        helpPage = new HelpPage();
        addChild(helpPage);
        helpPage.gotoAndStop(currentPage);

        trace("help page called, currentPage: " + currentPage);
    }

    private function onKeyDown(e:KeyboardEvent):void 
    {   
        //when keyboard back is pressed
        if (e.keyCode == Keyboard.BACK) {

        e.preventDefault();
        e.stopImmediatePropagation();
            goback(null);
        }
    }   
}   
}

Небрежный код, все еще нуждается в очистке.

Дочерний класс, который наследует класс Page

package
{
import com.op_pad.pages.Page;

/**
 * ...
 * @author Martino Wullems
 */
public class FavorietenPage extends Page
{

    public function FavorietenPage():void
    {
        trace("favorietenpage called");

        super();
        currentPage = "favorieten";
    }   
}
}

"FavorietenPage" - это также элемент библиотеки, который я хочу добавить на сцену. Я пробовал несколько установок, но не могу заставить его работать.

Наиболее логичным для меня кажется следующее [свойства элемента библиотеки]: Class: com.op_pad.pages.FavorietenPage BaseClass: com.op_pad.pages.Page;

Я не могу вставить ни один базовый класс при использовании класса, поэтому я вынужден удалить базовый класс. При использовании только класса я получаю целую кучу ошибок, которые вообще не имеют никакого смысла, и все равно появляются, даже если я закомментирую весь код в классе Page.

com\op_pad\pages\FavorietenPage.as:7: 1152: A conflict exists with inherited definition com.op_pad.pages:Page.help in namespace public.

com\op_pad\pages\FavorietenPage.as:12: 1152: A conflict exists with inherited definition com.op_pad.pages:Page.terug in namespace public.

com\op_pad\pages\FavorietenPage.as:21: 1152: A conflict exists with inherited definition com.op_pad.pages:Page.home in namespace public.

Это не имеет никакого смысла для меня вообще. Любая идея, как эта ситуация должна быть использована? Спасибо заранее

1 ответ

Вы неправильно поняли значение полей "класс" и "базовый класс" на панели свойств:

Значение базового класса по умолчанию равно flash.display.MovieClip, Используйте это значение по умолчанию, если только вы не используете автоматически сгенерированный класс, который использует функциональные возможности внешнего класса. Базовый класс не является синонимом расширения; если вы указываете пользовательский класс, который сам расширяет другой класс, нет необходимости указывать этот суперкласс в качестве базового класса. В этой ситуации по умолчанию flash.display.MovieClip достаточно. Однако, если вы хотите, чтобы два символа, RedFish и BlueFish, работали одинаково, но имели разные скины, вы можете использовать инструмент разработки для создания разных видов, затем установите для их базового класса значение Fish и используйте класс Fish во внешнем Fish.as. файл, чтобы обеспечить функциональность для обеих рыб.

(из Adobe Developer Connection)

Другие вопросы по тегам