Интерфейс, который также является экранным объектом - PullRequest
1 голос
/ 16 ноября 2011

У меня есть несколько классов, которые реализуют интерфейс, но также расширяют класс Sprite:

package {
    public interface IState {
        function addMonster():void;
    }
}

package {
    public class Fuzzy extends Sprite implements IState {
        public function addMonster():void {

        }
    }
}

package {
    public class LizardSkin extends Sprite implements IState {
        public function addMonster():void {

        }
    }
}

// Document class 

package {
    public class Main extends MovieClip {
        private var state:IState;
        public function Main():void {
            state = new Fuzzy();

            addChild(state);
        }
    }
}

Когда я пытаюсь добавить addChild (состояние), я получаю сообщение об ошибке 1067: неявное приведение значения типа IState к несвязанному типу flash.display: DisplayObject.

Теперь я знаю, что видел примеры, когда класс расширяет MovieClip / Sprite и реализует интерфейс ... что я могу сделать, чтобы сделать его таким, чтобы я мог добавлять «состояние» на сцену, но также реализовывать нужные мне методы?

Ответы [ 2 ]

5 голосов
/ 16 ноября 2011

Простой каст должен делать это большую часть времени:

addChild(state as DisplayObject);

Компилятор вызывает эту ошибку в противном случае, потому что он не предполагает, что IState всегда реализуется чем-то, что является DisplayObject, но если вы можете гарантировать это условие, вы всегда можете выполнить приведение.

2 голосов
/ 16 ноября 2011

В таких ситуациях я использую интерфейс IDisplayable, который выглядит следующим образом:

public interface IDisplayable
{
   function get displayObject():DisplayObject;
}

, а его реализация в Sprite или MovieClip просто выглядит так:

public function get displayObject():DisplayObject
{
     return this;
}

Ваши объекты IState могут быть добавлены на сцену с помощью addChild(state.displayObject);, когда ваш интерфейс IState расширяет IDisplayable.

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