Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Цвет фона задается из внеш. XML (http://www.flasher.ru/forum/showthread.php?t=119242)

Юрий01 15.12.2008 23:17

Цвет фона задается из внеш. 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?

etc 15.12.2008 23:25

Ошибка говорит о том, что вы пытаетесь обратиться к объекту, которого не существует, а не о несоответствии типов.
Почему вы решили, что parseInt не помог? Он вывел число в десятичном представлении, а не NaN, это говорит о том, что парсинг прошёл успешно. Если вы хотите видеть в трейсе число в иной системе счисления, то метод toString вам поможет.

Юрий01 16.12.2008 07:39

Есть ответ. Все было просто и легко. Вот как на этот вопрос ответил один мой знакомый:

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 в который нужно
// передать значение такого типа. Ну и передаём его, не обращая внимание на другую систему исчисления.

wvxvw 16.12.2008 11:14

Только не передавайте конструктору ХМЛя уже готовый ХМЛ, а так все более менее нормально =) Ну и parseInt() было бы логичнее в этом случае использовать, чем конвертацию.

>> trace("uint interpretation: ", convert); // Выводит 14132423 - Это не число целое ,беззнаковое, типа uint.
ну и это не верно. 14132423 - это целое положительное число, которое можно описать в 4 байтах. Т.е. вполне себе uint.

silin 16.12.2008 15:00

еще некоторые точки над i
исходный затык, как тебе сразу сказали, в отсутствии либо graphics либо externalXML там где ты к ним обращаешься..
а как флеш хранит uint здесь как бы не при делах совсем

beginFill съест (и походу сам попытается привести к uint) фактически любой объект
Код AS3:

var data:Object = {
        str16:"0xFF0000",
        str10:"16711935",
        xml:<data>0x0000FF</data>,
        number:64000.5,
        number16:0x00FFFF,
        mc:this
}
var x0:int = 0;
for(var key:String in data)
{
        graphics.beginFill(data[key], 1);
        graphics.drawRect(x0, 0, 20, 20);
        graphics.endFill();
        x0 += 30;
}


Юрий01 16.12.2008 21:28

14132423 - Это не число целое ,беззнаковое, типа uint.
ну и это не верно — Спасибо, а то меня уже начали одолевать сомнения :)

еще некоторые точки над i — Спасибо. Теперь-то уж точно все ясно (сохраню на будущее) у вас ...:Object, а у меня было ...:XML, ведь задача состояла в том, чтобы цвет хранился снаружи и при замене в XML-ке менялся и в SWF-ке без компиляции, что и было догстигнуто :)


Часовой пояс GMT +4, время: 10:50.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.