У меня есть png-изображение в библиотеке, которое я объявил через класс «Свойства как фон», который расширяет BitmapData. Когда я печатаю:
var BMDClass:Class = getDefinitionByName("Background") as Class;
Я получаю: переменная Фон не определен !! Но когда я: trace(getQualifiedClassName(new Background(0,0)));
Я получаю: Фон !! Я не могу понять причину ошибки.Почему я получаю эту ошибку
ответ
Я считаю, что это потому, что вам нужно иметь ссылку на класс 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;
}
}
}
Используя эти внешние классы будут дают вам немного больше контроля над тем, откуда появляются изображения. Вы можете загружать их внешние, внедрять их, используя метаданные встраивания и даже загружать их со сцены.
- 1. Почему я получаю эту ошибку?
- 2. Почему я получаю эту ошибку?
- 3. Почему я получаю эту ошибку?
- 4. Почему я получаю эту ошибку?
- 5. Почему я получаю эту ошибку?
- 6. Почему я получаю эту ошибку?
- 7. Почему я получаю эту ошибку
- 8. Почему я получаю эту ошибку?
- 9. Почему я получаю эту ошибку?
- 10. Почему я получаю эту ошибку?
- 11. Почему я получаю эту ошибку
- 12. Я получаю эту ошибку
- 13. я получаю эту ошибку
- 14. Почему я получаю эту ошибку в stackoverflow?
- 15. Почему я получаю эту ошибку исключения?
- 16. CakePHP почему я получаю эту ошибку?
- 17. Почему я получаю эту ошибку HTAccess
- 18. Почему я получаю эту ошибку в Python?
- 19. Почему я получаю эту ошибку, это необычно
- 20. Почему я получаю эту ошибку в osm?
- 21. Почему я получаю эту ошибку выполнения Javascript?
- 22. Почему я получаю эту ошибку? strcpy
- 23. почему я получаю эту ошибку с cgcontext
- 24. Почему я получаю эту ошибку sqlite?
- 25. Почему я получаю эту ошибку синтаксического анализа?
- 26. Почему я получаю эту ошибку маршрутизации?
- 27. Почему я получаю эту ошибку com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException?
- 28. Почему я получаю эту ошибку преобразования типа
- 29. Почему я получаю эту ошибку конкатенации python?
- 30. Почему я получаю эту ошибку в Django?
Я думаю, что вы правы. Я тестирую его, как вы предлагаете и работали! Но теперь гибкость getDefinitionByName заблокирована, так как мне придется создавать экземпляр класса, но я хотел бы получить его экземпляр по его имени, чтобы использовать файл конфигурации. Можете ли вы предложить решение? – Ponty
Я попытался дать более подробный ответ о том, как вы можете это сделать с вашим конфигурационным файлом. Дайте мне знать, если это имеет смысл. –
эй человек очень благодарен за много идей! У меня еще один вопрос: вы пишете: import com.somedomain.backgrounds. *; но как вы помещаете свои изображения в этот пакет? Я имею в виду, что я использую либо флэш-библиотеку, либо конвертирую изображение в пользовательский подкласс BitmapData или (как раз перед тем, как немного я нашел) тег Embed, например [Embed (source = "image.png")] public Background1: Класс . Как вы достигаете, чтобы удовлетворить все ваши пользовательские графические классы в пакете? Как вы определяете интерфейс, если классы созданы только что я вам говорил раньше? Использовать интерфейс как маркер? Можешь ли ты показать мне? – Ponty