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

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

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

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
Arrow "Метки-переменных" в XML

Такой вопрос: есть ли такая фича при написании строки в xml как то указывать не текст а "метку" которая будет говорить компилятору, чтобы он искал в пределах данного класса переменную и подставлял её вместо метки в результирующую строку? Или это можно сделать только при помощи методов класса String?

Старый 10.04.2012, 14:33
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 2  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Вас непонятно. Вы компилируете xml?
__________________
...вселенская грусть

Старый 10.04.2012, 14:37
Universe вне форума Посмотреть профиль Отправить личное сообщение для Universe Найти все сообщения от Universe
  № 3  
Ответить с цитированием
Universe
 
Аватар для Universe

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
я загружаю строку из xml, но хочу чтобы в ней содержалась ссылка на переменную которая есть у меня в классе, в котором я эту строку использую. Т.е. вот строка из xml
"Попробуйте ещё раз! У вас осталось %tries% попытки!"
Переменная tries у меня объявлена в классе сверху. Хочется чтобы получилось как то вот так:
"Попробуйте ещё раз! У вас осталось" + tries + "попытки!"

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код AS3:
<xml>{this.variable}</xml>
?

EDIT: А... XML уже готовый? Ну тогда нет, нет ничего специально заготовленного, надо самому.
__________________
Hell is the possibility of sanity

Старый 10.04.2012, 14:43
Universe вне форума Посмотреть профиль Отправить личное сообщение для Universe Найти все сообщения от Universe
  № 5  
Ответить с цитированием
Universe
 
Аватар для Universe

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
регулярным выражением, через replace ? А как перевести в строку имя переменной?

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Переменные бывают связаными в лексическом окружении и статическом / динамически (lexical binding and static / dynamic binding). Первый случай - внутри функции аргументы и локальные переменные связаны лексически с контекстом функции. Имена таких переменных не хранятся в скомпилированом коде. Статически / динамически связанные переменные - например, поля класса, их, естественно, можно получить как объект[имя свойства], т.как имена хранятся в скомпилированом коде.
Так что если речь о лексической привязке - то только вручную, типа: string.replace(/variable/g, variable);
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 10.04.2012 в 15:00.
Старый 10.04.2012, 14:56
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 7  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Ну при таком раскладе тебе нужно что-то вроде своего мета-языка небольшого изобрести. То есть смотри как - есть 2 вещи:
- xml с заготовками
- хранилище данных (оттуда берем данные для подстановки)

так вот, имея xml вида:
Код AS3:
<node>У Вас осталось [player.numTries] попыток</node>
Вот тут нужно вычленить все "выражения" (то что внутри []-скобочек) и скомпилировать их. Копиляция - довольно простая вешь - есть хранилище данных, есть имя свойства (указанное как [player.numTries]).
То есть берем наше хранилище, берем у него свойство player, у того что получили берем свойство numTries. То что получили - кладем в xml вместо выражения [player.numTries]. Ну и выводим результат уже с подстановкой.
Кстати, очень крутая система, туда же можно прикрутить условия, вычисления и локализацию. Даже вызовы методов можно. Главное задать "контекст исполнения" - в рассмотренном выше примере это хранилище данных.
__________________
...вселенская грусть

Старый 10.04.2012, 15:03
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 8  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
вот у темя есть нужная для вас функция:
Код AS3:
static public function printfwv(string:String, vars:Object):String {
			if (vars == null) return string;
 
			const NOT_EXIST:int = -1;
 
			const ALPHABET:String = "qwertyuiopasdfghjklzxcvbnm_";
			const S_TEXT:int = 1;
			const S_VAR:int = 2;
			const PREFIX:String = "%";
 
			//быстрая проверка на содержание двух %
			var iof:int = string.indexOf(PREFIX);
			if (iof == NOT_EXIST) {
				return string;
			}else {
				if (string.indexOf(string, iof++) == NOT_EXIST) return string;
			}
			//
 
			var src:String = string;
			var buffer:String = "";
			var state:int = S_TEXT;
			var var_buff:String = "";
			var c:String;
 
			for (var i:int = 0, len:int = src.length; i < len; i++) {
				c = src.charAt(i);
 
				switch(state) {
					case S_TEXT:
						if (PREFIX == c) {
							state = S_VAR;
						}else {
							buffer += c;
						}
						break;
 
					case S_VAR:
						if (ALPHABET.indexOf(c) != -1) {
							var_buff += c;
						}else {
							if (c == PREFIX) {
								if (vars[var_buff] == undefined) {
									buffer += PREFIX + var_buff;
									var_buff = "";
									i--;
									state = S_TEXT;
								}else {
									buffer += vars[var_buff];
								}
							}else{
								buffer += PREFIX + var_buff + c;
							}
							var_buff = "";
							state = S_TEXT;
						}
						break;
				}
			}
 
			if (state == S_VAR) {
				buffer += PREFIX + var_buff;
			}
 
			return buffer;
		}
первым параметром вы передаете строку типа "bla bla %var% bla bla %var% bla bla %var2%", а вторым объект, если объект содержит переменные с именем var и var2, то вы функция вернет, то что вам нужно

Добавлено через 49 секунд
правда никакой привязки к xml нет, поэтому из xml вам самому придется выдрать строку-шаблон

Старый 10.04.2012, 16:44
Universe вне форума Посмотреть профиль Отправить личное сообщение для Universe Найти все сообщения от Universe
  № 9  
Ответить с цитированием
Universe
 
Аватар для Universe

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
о, супер, большое спасибо ramshteks! Сейчас попробую!))

Добавлено через 21 минуту
чтото не пашит(((
Засунул вашу функцию в свой класс MyUtils, вызываю следующим образом
Код AS3:
MyUtils.stringVars("a123 %tries% vsvs", this);
var tries в классе есть, пробовал её делать и публичной и статической, но всё равно возвращает не изменённую строку((

Старый 10.04.2012, 17:17
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 10  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
метод писался под такое использование:
printfwv("a123 %tries% vsvs", {tries:"TEST String"});

Для вашего варианта, даже не проверялось, так что подсказать не могу

тоесть должен работать вот такой вариант:
printfwv("a123 %tries% vsvs", {tries:String(this.tries)});

Добавлено через 10 минут
Я прошу прощения, сейчас обнаружил, что функция действительно не корректно работает

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

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

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


 


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


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