|
|
|||||
Регистрация: Feb 2008
Сообщений: 14
|
Цвет фона задается из внеш. XML
Требуется создать *.swf приложение, где цвет фона был бы указан в находящемся рядом XML файле.
Удалось загрузить данные из XML, скажем <XMLdata><backgroundColor>0xd7a4c7</backgroundColor></XMLdata> trace(externalXML.backgroundColor); — дает нам: 0xd7a4c7 Но graphics.beginFill(externalXML.backgroundColor, 1); выдает TypeError: Error #1009: Cannot access a property or method of a null object reference., что резонно, ведь externalXML.backgroundColor не uint. Создание переменной не помогает bgColor=externalXML.backgroundColor; trace(bgColor); выдает 14132423, т.е. десятичное число. Создание промежуточной переменной типа String, тоже не помогает trace(parseInt(bgString, 16)); все то же 14132423 Как передать данные в graphics.beginFill? |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Ошибка говорит о том, что вы пытаетесь обратиться к объекту, которого не существует, а не о несоответствии типов.
Почему вы решили, что parseInt не помог? Он вывел число в десятичном представлении, а не NaN, это говорит о том, что парсинг прошёл успешно. Если вы хотите видеть в трейсе число в иной системе счисления, то метод toString вам поможет. |
|
|||||
Регистрация: Feb 2008
Сообщений: 14
|
Есть ответ. Все было просто и легко. Вот как на этот вопрос ответил один мой знакомый:
var externalXML:XML = new XML( <XMLdata><backgroundColor>0xd7a4c7</backgroundColor></XMLdata>); trace(externalXML.backgroundColor); // Выдаёт 0xd7a4c7 var convert:uint = uint(externalXML.backgroundColor); // Конвертируем строковое значение в uint trace("uint interpretation: ", convert); // Выводит 14132423 - Это не число целое ,беззнаковое, типа uint. this.graphics.beginFill(convert,1); // И его можно использовать для вставки в методы beginFill и т.д. this.graphics.drawRect(0,0,550,400); this.graphics.endFill(); // В финале всё рисуется как надо. // Вывод такой: в uint данные не хранятся в шестнадцатеричном виде - мы их туда ПЕРЕДАЁМ в таком виде, // потому, что для нас удобнее цвет определять в 16 - ти разрядном формате. Они потом конвертируются // автоматически в десятичный формат. У вас есть значение типа uint и метод beginFill в который нужно // передать значение такого типа. Ну и передаём его, не обращая внимание на другую систему исчисления. |
|
|||||
Modus ponens
|
Только не передавайте конструктору ХМЛя уже готовый ХМЛ, а так все более менее нормально =) Ну и parseInt() было бы логичнее в этом случае использовать, чем конвертацию.
>> trace("uint interpretation: ", convert); // Выводит 14132423 - Это не число целое ,беззнаковое, типа uint. ну и это не верно. 14132423 - это целое положительное число, которое можно описать в 4 байтах. Т.е. вполне себе uint.
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 16.12.2008 в 11:16. |
|
|||||
еще некоторые точки над i
исходный затык, как тебе сразу сказали, в отсутствии либо graphics либо externalXML там где ты к ним обращаешься.. а как флеш хранит uint здесь как бы не при делах совсем beginFill съест (и походу сам попытается привести к uint) фактически любой объект |
|
|||||
Регистрация: Feb 2008
Сообщений: 14
|
14132423 - Это не число целое ,беззнаковое, типа uint.
ну и это не верно — Спасибо, а то меня уже начали одолевать сомнения еще некоторые точки над i — Спасибо. Теперь-то уж точно все ясно (сохраню на будущее) у вас ...:Object, а у меня было ...:XML, ведь задача состояла в том, чтобы цвет хранился снаружи и при замене в XML-ке менялся и в SWF-ке без компиляции, что и было догстигнуто |
Часовой пояс GMT +4, время: 20:13. |
|
« Предыдущая тема | Следующая тема » |
|
|