2013-08-11 3 views
0

Я пытаюсь встроить изображение в конструкторе моего класса RangedItemфлэш вложения изображения из параметра строки

public class RangedItem extends Item{ 

    public var speed:Number; 
    public function RangedItem(s:Number, n:String, d:Number, path:String):void{ 
     super(n, d); 
     speed = s; 
     [Embed(source=path, mimeType="image/png")] const IMAGE:Class; 
    } 
} 

Вот код, я использую для построения предмета

items.push(new RangedItem(item.speed, item.name, item.damage, '/img/gun.png')); 

Но я получаю эти ошибки

col: 4: Error: unable to resolve 'path' for transcoding 
col: 4: Error: Unable to transcode path. 

IMG/gun.png существует точно, потому что, если я заменю путь с «Img/gun.p «Все работает отлично.

Я использую инфраструктуру flashpunk, если это что-то меняет.
Что я делаю неправильно? Спасибо заранее!

ответ

1

Метаданные [Embed], используется во время компиляции, а не время запуска. Таким образом, переменная интерполяции, что вы пытаетесь сделать здесь с path не будет работать:

[Embed(source=path, mimeType="image/png")] const IMAGE:Class; 

Компилятор ожидает символьной строки с указанием пути к изображению:

[Embed(source="path/to/my/image.png", mimeType="image/png")] const IMAGE:Class; 

Что вы могли бы рассмотрите возможность создания класса Singleton (или вашего любимого шаблона), который содержит все ваши встроенные изображения. Затем ваши классы могут ссылаться на активы в классе singleton и даже передавать ссылки на них в конструкторах других классов.