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