Активы классовые звонки не работают

Я создаю класс, который включает все необходимые мне ресурсы, иконки, шрифты, изображения и т. Д.; Я взял это из ответа Адриана здесь.

Это в значительной степени структура, которую он имеет:

public class Assets 
{
    [Embed(source = "../assets/images/imageBG.png")]
    private static var imageBG:Class;

    [Bindable]
    private var imageName:Class;//There wasn't a ";" here, no error but I added it just in case

    public static function setImage(newImageName:Class):void
    {
        imageName = newImageName:Class;
    }
}

И я должен использовать что-то подобное из другого класса в том же пакете для вызова нужного мне ресурса (хотя он должен работать в любом другом классе)

    image = new Assets.setImage(imageBG) as Bitmap;

Как бы то ни было, он выдает "Метка должна быть простым идентификатором".

если я изменю

imageName = newImageName:Class;

в

imageName = newImageName; //The "Class" part was pointed as the error

он выдает это "Доступ к неопределенному свойству imageName".

когда вызывается на функцию, и это от того, где она называется

"Метод не может быть использован в качестве конструктора".

указал сразу после "Активов". часть.

Я явно делаю что-то не так, но я не знаю, что это, если кто-нибудь может помочь, пожалуйста.

Кроме того, хорошо, если я спрашиваю, как я могу изменить вещи, чтобы я мог вызвать актив, передавая его имя в виде строки? или я должен задать другой вопрос?

Заранее спасибо.

1 ответ

Решение

imageName не является статическим и поэтому не существует в статической области видимости.

Ответ, на который вы ссылаетесь, был принят, несмотря на наличие ошибок. Также это было только для проектов Flex. Это то же самое, но исправлено:

public class Assets 
{
    static private var assetref:Object = {};

    [Embed(source = "../assets/images/imageBG.png")]
    private static var imageBG:Class; 

    assetref["imageBG"] = imageBG;   

    public static function getImage(newImageName:String):Bitmap
    {
        if(assetref[newImageName])
        {
            return new assetref[newImageName]();
        }
        return null;
    }
}

просто передайте имя актива, которое вам нужно, в виде строки, и, если он существует, вы получите растровое изображение, готовое к отображению.

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