Почему я получаю эту ошибку - PullRequest
0 голосов
/ 06 июля 2010

У меня есть изображение png в библиотеке, которое я объявил через свойства как класс фона, который расширяет BitmapData Когда я печатаю:
var BMDClass:Class = getDefinitionByName( "Background" ) as Class; я получаю: переменная Фон не определен !! Но, когда я делаю: trace( getQualifiedClassName( new Background(0,0) ) ); я получаю: Фон !! Я не могу выяснить причину ошибки.

1 Ответ

1 голос
/ 06 июля 2010

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

попробуйте что-то вроде ...

import com.somedomain.Background;
Background;

Это должно создать ссылку на ваш класс и обеспечить его компиляцию в ваш SWF.

Изменить, чтобы показать использование нескольких классов.

Если у вас есть несколько фоновых классов, я бы рекомендовал попытаться заставить их придерживаться интерфейса. Затем я бы также создал фоновый класс фабрики, который позволял бы вам создавать фоновые экземпляры из вашего файла конфигурации. Это также означает, что вы сможете поместить все свои ссылки на свои фоновые классы в класс фабрики. Вот как могла бы выглядеть фабрика.

// let the compiler know we need these background classes
import com.somedomain.backgrounds.*;
DarkBackground;
LightBackground;
ImageBackground;

class BackgroundFactory
{
    public function create(type:String):Background
    {
        var bgClass:Class = getDefinitionByName(type) as Class;
        return new bgClass();
    }
}

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

// parse your config file...not sure what format you've got it in.

// instantiate a background factory and create an instance based on the name from your config. 
var bgFactory:BackgroundFactory = new BackgroundFactory();
var bg:Background = bgFactory.create(someStr);

Изменить, чтобы расширить пример

package com.somedomain.background
{
    interface Background
    {
        function get img():Bitmap;
    }
}

package com.somedomain.background
{
    class SomeImageBackground extends Sprite implements Background
    {
        protected var _img:Bitmap;

        public function SomeImageBackground():void
        {
            _img = new SomeAssetFromLibrary();
        }

        public function get img():Bitmap
        {
            return _img;
        }
    }
}

Использование этих внешних классов даст вам немного больше контроля над тем, откуда берутся изображения. Вы можете загружать их извне, вставлять их с помощью метаданных и даже загружать их со сцены.

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