Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.12.2008, 23:17
Юрий01 вне форума Посмотреть профиль Отправить личное сообщение для Юрий01 Найти все сообщения от Юрий01
  № 1  
Ответить с цитированием
Юрий01
 
Аватар для Юрий01

Регистрация: 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?

Старый 15.12.2008, 23:25
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

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

Старый 16.12.2008, 07:39
Юрий01 вне форума Посмотреть профиль Отправить личное сообщение для Юрий01 Найти все сообщения от Юрий01
  № 3  
Ответить с цитированием
Юрий01
 
Аватар для Юрий01

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

Старый 16.12.2008, 11:14
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Только не передавайте конструктору ХМЛя уже готовый ХМЛ, а так все более менее нормально =) Ну и parseInt() было бы логичнее в этом случае использовать, чем конвертацию.

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


Последний раз редактировалось wvxvw; 16.12.2008 в 11:16.
Старый 16.12.2008, 15:00
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 5  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
еще некоторые точки над 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;
}

Старый 16.12.2008, 21:28
Юрий01 вне форума Посмотреть профиль Отправить личное сообщение для Юрий01 Найти все сообщения от Юрий01
  № 6  
Ответить с цитированием
Юрий01
 
Аватар для Юрий01

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

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:41.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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