связывание библиотечного класса с расширенным классом и базовым классом - PullRequest
1 голос
/ 23 января 2011

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

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» - это также элемент библиотеки, который я хочу добавить на сцену. Я пробовал несколько установок, но не могу заставить его работать.

Самым логичным для меня кажется следующее [свойства элемента библиотеки]: Класс: 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 Ответ

1 голос
/ 24 января 2011

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

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

(из Adobe Developer Connection )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...