Расставить переносы в текстовом поле. @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 30 ] 
*   Список форумов / Технологии изображения / Flash » ответить » создать топик « | »
Автор Сообщение
nuran
«Лектор»
46
Сообщения: 1569
Зарегистрирован: 21.05.04
Заголовок сообщения: Расставить переносы в текстовом поле.
Сообщение Добавлено: 20 Декабрь 2005, 00:38:56 
Дано -- текстовое поле которое само переносит слов, нужно получить текст с переносами (\r) из этого текстового поля. Есть у кого-нибудь готовые функции? Я проблему решил но слишком зависима моя функция от количества текста. При объёме в страницу уже тормозит.

_________________
blog : flash / unity
@st@l@vist@
участник
70
Сообщения: 1606
Зарегистрирован: 20.03.03
Откуда: St.Petersburg
Сообщение Добавлено: 20 Декабрь 2005, 01:51:24 
А оно и будет тормозить при размере текста "в страницу" :), чего ты хотел? - строки, текстовые поля … сам знаешь, что это есть такое.

Теоретически, я разбил бы строку на массив слов, сделал бы поле высотой в одну строку и с автосайзом, ну и прибавлял по слову, высота поля изменилась - значит фигачим newline, но вот только смотри выше насчет скорости ;)
nuran
«Лектор»
46
Сообщения: 1569
Зарегистрирован: 21.05.04
Сообщение Добавлено: 20 Декабрь 2005, 04:41:12 
@st@l@vist@, твоё теоретически у меня уже работает, но читай в первом посту с чем проблемы возникают.

Вот функция, достаточно дурацкая на вид (писал недавно просто как начальный вариант) :) Первоначально все ручные переносы должны быть расставлены как \r.

Код:
_global.TextField.prototype.N_T = function (text:String)
{
   var txt = this;
   if (!txt.multiline)
   {
      return;
   }
   var pt:String = txt.text;
   var w:Array = text.split ("\r").join (" \r ").split (" ");
   var f:Array = [];
   for (var i = 0; i < w.length; i++)
   {
      f.push (w[i]);
      if (i < w.length - 1)
      {
         f.push (" ");
      }
   }
   w = f;
   var r:Array = [];
   txt.text = "";
   for (var i = 0, s = 0, th = txt.textHeight; i < w.length; i++)
   {
      var sym:String = w[i];
      txt.text += sym;
      var sn = false;
      if (txt.textHeight > th)
      {
         th = txt.textHeight;
         if (s > 0)
         {
            sn = true;
         }
      }
      if (!sn)
      {
         s++;
      }
      else
      {
         r.push ("\r");
         s = 0;
      }
      r.push (sym);
   }
   var rez:Array = [];
   for (var i = 0; i < r.length; i++)
   {
      if (r[i + 1] != "\r")
      {
         rez.push (r[i]);
      }
   }
   txt.text = pt;
   var pp = rez.join ("").split ("\r ").join ("\r");
   return pp;
};


НУЖНО ЧТО-ТО ЛУЧШЕЕ ПО-СКОРОСТИ !

_________________
blog : flash / unity
@st@l@vist@
участник
70
Сообщения: 1606
Зарегистрирован: 20.03.03
Откуда: St.Petersburg
Сообщение Добавлено: 20 Декабрь 2005, 05:18:53 
Код:

   var text = "Use movie clip symbols to create reusable pieces of animation. Movie clips have their own multiframe Timeline that is independent from the main Timeline - think of them as nested inside a main Timeline that can contain interactive controls, sounds, and even other movie clip instances. You can also place movie clip instances inside the Timeline of a button symbol to create animated buttons."
   var words = text.split(" ");
   
   createTextField("t" , 1, 100 ,100 ,300, 20);
   t.autoSize = "left";
   t.multiline = true;
   t.wordWrap = true;
   t.border = true;
   t.text = words[0];
   
   var h = t._height;
   var result = t.text;
   
   for(var i = 1; i < words.length; i++)
   {
      t.text += " " + words[i];
      
      if(t._height > h)
      {
         h = t._height;
         result += "\n";
      }
      else
      {
         result += " ";
      }
      
      result += words[i];
   }
   
   createTextField("t2" , 2, 420 ,100 ,300, 20);
   t2.autoSize = "left";
   t2.multiline = true;
   t2.wordWrap = false;
   t2.border = true;
   t2.text = result;
   


Ну это не теоретически (правда откинем всякие табуляции и т д) :), просто практического применения я не вижу, это делали еще в 5-ке с помощью Selection - определяли где переход на новую строку …

А проблемы - повторю, сам все видишь : words.length и сложение строк в цикле, ни кто ничего нового тебе не даст! :)
nuran
«Лектор»
46
Сообщения: 1569
Зарегистрирован: 21.05.04
Сообщение Добавлено: 20 Декабрь 2005, 06:05:28 

@st@l@vist@ писал(а):
просто практического применения я не вижу



В чём именно практического применения не видешь? В том что это медленно или в том что это ненужная функция? Я юзаю её для текстовых эффектов в сайтах.

_________________
blog : flash / unity
nuran
«Лектор»
46
Сообщения: 1569
Зарегистрирован: 21.05.04
Сообщение Добавлено: 20 Декабрь 2005, 06:10:02 
p.s. А как определить с помощью Selection где переход на новую строчку? :confused:

_________________
blog : flash / unity
nuran
«Лектор»
46
Сообщения: 1569
Зарегистрирован: 21.05.04
Сообщение Добавлено: 20 Декабрь 2005, 06:12:59 

@st@l@vist@ писал(а):
ни кто ничего нового тебе не даст! :)



Да не скажи, может какой-нить гений уже что-то изабрёл, каким-нибудь хитрым алгоритмом перебор или ещё чего :)

_________________
blog : flash / unity
Король Муж.
участник
18
Сообщения: 1352
Зарегистрирован: 24.07.04
Сообщение Добавлено: 20 Декабрь 2005, 06:23:00 
не знаю - намного ли это быстрее - но я бы облегчил цикл так -


Цитата:

for(var i = 1; i < words.length; i++)
{
t.text += " " + words[i];

if(t._height > h)
{

result += "\n";

t.text = ""
}
else
{
result += " ";
}

result += words[i];
}



-----------

эксперимент показал - так быстрее: средний getTimer() в конце цикла - меньше. Увеличим текст в 5 раз - и получаем 5000 мсек при коде Забора и 350 при моем.
дальше нуран сам думай, я спать пошел

ПС - я на маке - так что может это только у меня такая серьезная разница

_________________
Здравствуй, Олимпийский!
BlooDHounD Муж.
соучастник
0
Сообщения: 585
Зарегистрирован: 12.03.04
Откуда: Беларусь - Борисов
Сообщение Добавлено: 20 Декабрь 2005, 09:17:54 
не будет быстрее. увы.
Король Муж.
участник
18
Сообщения: 1352
Зарегистрирован: 24.07.04
Сообщение Добавлено: 20 Декабрь 2005, 10:58:10 
я долго думал - чему мне верить: своему трейсу или тебе - и предпочел трейс

_________________
Здравствуй, Олимпийский!
BlooDHounD Муж.
соучастник
0
Сообщения: 585
Зарегистрирован: 12.03.04
Откуда: Беларусь - Борисов
Сообщение Добавлено: 20 Декабрь 2005, 13:18:04 
Король, это не тебе адрессовывалось :) просто темы была открыта, а пока я про неё вспомнил тут уже накатали :)
@st@l@vist@
участник
70
Сообщения: 1606
Зарегистрирован: 20.03.03
Откуда: St.Petersburg
Сообщение Добавлено: 20 Декабрь 2005, 13:32:09 
Король, да так будет быстрее, но я и не претендую на оптимизированный, законченный код - это иллюстрация к разговору :), а самое убойное - это количество слов в "странице текста" …
То что встроенный wordWrap чудным образом тормозит, это мы уже выяснили с Eduard'ом и его БЫрками :)

nuran, в 5-ке делали текстовое поле высотой в одну строку, и дальше с помощью Selection.setSelection гуляли по строке (можно переходить по тем же пробельным символам), если значение scroll изменилось - значит перешли на новую строку.

Кстати, а зачем вешать эффекты на целую страницу текста? :)
Король Муж.
участник
18
Сообщения: 1352
Зарегистрирован: 24.07.04
Сообщение Добавлено: 20 Декабрь 2005, 22:12:40 
В растр ее! В растр!

_________________
Здравствуй, Олимпийский!
nuran
«Лектор»
46
Сообщения: 1569
Зарегистрирован: 21.05.04
Сообщение Добавлено: 21 Декабрь 2005, 00:25:08 

@st@l@vist@ писал(а):
Кстати, а зачем вешать эффекты на целую страницу текста?



Ну мало ли =)

_________________
blog : flash / unity
nuran
«Лектор»
46
Сообщения: 1569
Зарегистрирован: 21.05.04
Сообщение Добавлено: 21 Декабрь 2005, 00:28:01 

Король писал(а):
В растр ее! В растр!



В этом случае уже не получиться "Текстовых эффектов" :)

_________________
blog : flash / unity
@st@l@vist@
участник
70
Сообщения: 1606
Зарегистрирован: 20.03.03
Откуда: St.Petersburg
Сообщение Добавлено: 21 Декабрь 2005, 01:31:10 
Кстати, зря смеешся :)
Вот тебя все 3D в директоре интересовало, а если б побольше узнал о Imaging Lingo - то увидел бы массу классных текстовых эффектов.

Ну а сейчас, с появлением BitmapData сам бог велел, положил в библиотеку битмап со всем алфавитом, и давай выводить текст на манер AE эффектов :)
nuran
«Лектор»
46
Сообщения: 1569
Зарегистрирован: 21.05.04
Сообщение Добавлено: 21 Декабрь 2005, 02:08:21 
оффтопик:
Директор я забросил тогда, когда у тебя распрашивал про него :chih:

_________________
blog : flash / unity
@st@l@vist@
участник
70
Сообщения: 1606
Зарегистрирован: 20.03.03
Откуда: St.Petersburg
Сообщение Добавлено: 21 Декабрь 2005, 02:15:22 
Да я не про Директор, … сам его пару раз открывал с тех пор :)
Я про то что народ почему то не шевелится в направлении текстовых эффектов основанных на битмапах, так что у тебя есть отличный шанс собрать все лавры ;)
Король Муж.
участник
18
Сообщения: 1352
Зарегистрирован: 24.07.04
Сообщение Добавлено: 21 Декабрь 2005, 02:25:23 
Именно - открываем пример по работе с растром в Директоре (коих в нете - тысяча) - и смотрим код. теперь практически всё (кроме quad к сожалению) доступно в флеше

_________________
Здравствуй, Олимпийский!
Король Муж.
участник
18
Сообщения: 1352
Зарегистрирован: 24.07.04
Сообщение Добавлено: 21 Декабрь 2005, 02:32:34 
далеко ходить не надо - http://director-online.com/buildArticle.php?id=1029

_________________
Здравствуй, Олимпийский!
@st@l@vist@
участник
70
Сообщения: 1606
Зарегистрирован: 20.03.03
Откуда: St.Petersburg
Сообщение Добавлено: 21 Декабрь 2005, 02:34:21 
Ну если не гнушаться чужого, действительно качественного кода, то и, почти, Quad в наших руках :)

http://lab.andre-michelle.com/ (linear.texture и mode7)
Король Муж.
участник
18
Сообщения: 1352
Зарегистрирован: 24.07.04
Сообщение Добавлено: 21 Декабрь 2005, 02:44:08 
результат действительно похож на то что в директоре можно сделать с quad (самый ярый - в примере 3dImage) но что-то мне подсказывает, что там не обошлось описанием четырех точек как в shockwave

_________________
Здравствуй, Олимпийский!
Король Муж.
участник
18
Сообщения: 1352
Зарегистрирован: 24.07.04
Сообщение Добавлено: 21 Декабрь 2005, 02:46:43 
ой сколько там всего ещё...

_________________
Здравствуй, Олимпийский!
nuran
«Лектор»
46
Сообщения: 1569
Зарегистрирован: 21.05.04
Сообщение Добавлено: 21 Декабрь 2005, 03:25:51 
@st@l@vist@, текстурки эти делаються по обычным алгоритмам http://algolist.manual.ru/graphics/3dfaq/index.php :) Ну а mode7 — это пол из одной текстуры + картинка супермарио. :cool: Короче ничего сложного. Но он опятьже никуда не ушёл от кубиков во флеше =)))))))))

_________________
blog : flash / unity
nuran
«Лектор»
46
Сообщения: 1569
Зарегистрирован: 21.05.04
Сообщение Добавлено: 21 Декабрь 2005, 03:29:40 
Король, там идёт просто разбитие на множество треугольников которые размещаються как http://www.nuran.org/lab/flash/0003.htm четырёхуголники, чем их больше — тем точнее результат, забыл как это по-русски называеться правильно, по-инглишу это звучит как PLANAR DISTORTION — типа искажение на плоскости, алгоритм простой и имееться в гугле .

_________________
blog : flash / unity
Король Муж.
участник
18
Сообщения: 1352
Зарегистрирован: 24.07.04
Сообщение Добавлено: 21 Декабрь 2005, 03:40:16 
ну поэтому это и не настоящий quad - в директоре ты задаешь битмапу 4 точки - и он тянет его по ним сам. как тут - http://ctart.ru/swf/presentations/gorod.dcr
а во флеше можно только бить на огромное количество кусков и выкладывать их

_________________
Здравствуй, Олимпийский!


Последний раз редактировалось Король 21 Декабрь 2005, 03:44:59, всего редактировалось 1 раз.
@st@l@vist@
участник
70
Сообщения: 1606
Зарегистрирован: 20.03.03
Откуда: St.Petersburg
Сообщение Добавлено: 21 Декабрь 2005, 03:43:12 
оффтопик:
nuran, - "кубики" - злопамятный ;)


Это понятно :) … мы просто о том, что в Lingo есть в API -> Quad(0,20,100,30), на подобии Point, Rect и т д - удобно пользоваться :)

Так, что и тут ты можешь проявить себя со своими знаниями на благо общественности ;) - Даешь Quad во флеше! :)
@st@l@vist@
участник
70
Сообщения: 1606
Зарегистрирован: 20.03.03
Откуда: St.Petersburg
Сообщение Добавлено: 21 Декабрь 2005, 03:44:54 
Король, просто вся тягомотина с "кусками" в директоре на низком уровне организована … а так, все тоже самое, только быстрее в сотни раз :)
Король Муж.
участник
18
Сообщения: 1352
Зарегистрирован: 24.07.04
Сообщение Добавлено: 21 Декабрь 2005, 03:48:57 
ну все правильно - директор то изначально растровый а во флеш работу с растром впихнули для кучи

_________________
Здравствуй, Олимпийский!
Король Муж.
участник
18
Сообщения: 1352
Зарегистрирован: 24.07.04
Сообщение Добавлено: 21 Декабрь 2005, 03:50:36 
правда примеры все равно клево выглядят

_________________
Здравствуй, Олимпийский!
*   Список форумов / Технологии изображения / Flash « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 30 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100