![]() |
|
||||||||||
|
|
|
|||||
|
Бьюсь вот пару дней с одной казалось бы простой задачей.
Есть задача сделать эффект *печатная машинка* для текста + с перебором символов для каждой буквы. Понятное дело, что эффект простейший, и делается минут 10. Но есть загвоздка для html текста. В метод запуска эффекта мы передаем текстовое поле и текст который будем печатать, текст у нас будет например такой . Собственно как делается эффект понятно, строка режется на символы index,index+1 и добавляется в текстовое + уже набранное значение. Если мы говорим так tf.htmlText = remain + newLetter , то символы от html просто режутся , тоесть рассматриваться как текст не будет, но будут проходить в памяти, что будет тормозить эффект в местах перехода. Единственный вариант который я вижу, нужно сделать как то так // до начала эффекта tf.htmlText = str; format = tf.getTextFormat(); // во время эффекта tf.setTextFormat(format, index - 1 , index ) Есть ли какие нибудь решения данного вопроса, без таких конструкций ? Хочется привязаться к текст формату, думаю там есть развязка
__________________
Марк Tween |
|
|||||
|
Подобная тема
http://www.flasher.ru/forum/showthread.php?t=174291 А с перебором символов package { import flash.display.*; import flash.text.*; import flash.events.*; import flash.ui.*; import flash.utils.*; public class Main extends Sprite { private var srcTF:TextField = new TextField(); private var resTF:TextField = new TextField(); private var timer:Timer = new Timer(100); private var abcd:String = 'qwertyuiopasdfghjklzxcvbnm'; public function Main():void { srcTF.multiline = true; srcTF.htmlText = "<b>bold</b> <i><font color='#FF0000' size='16'>red</font></i><br>next line<br><b>bold</b> <i><font color='#FF0000' size='16'>red</font></i><br>next line<br>"; srcTF.autoSize = TextFieldAutoSize.LEFT; resTF.multiline = true; resTF.autoSize = TextFieldAutoSize.LEFT; resTF.y = 100; addChild(srcTF); addChild(resTF); timer.addEventListener(TimerEvent.TIMER, timer_timer); timer.start(); } private function timer_timer(e:TimerEvent):void { resTF.text = randomString(srcTF.text.substr(0, resTF.text.length + 1)); for (var i:int = 0; i < resTF.text.length; i++) resTF.setTextFormat(srcTF.getTextFormat(i, i + 1), i, i + 1); if (srcTF.length == resTF.length) { timer.stop(); resTF.text = srcTF.text.substr(0, resTF.text.length + 1); for (var i:int = 0; i < resTF.text.length; i++) resTF.setTextFormat(srcTF.getTextFormat(i, i + 1), i, i + 1); } } private function randomString(s:String):String { var i:int; var rs:String = ''; for (i = 0; i < s.length; i++) { if (abcd.indexOf(s.charAt(i)) != -1) rs += abcd.charAt(int(Math.random() * abcd.length)) else rs += s.charAt(i); } return rs; } } }
__________________
Гоночка Последний раз редактировалось Alex Lexcuk; 19.06.2012 в 20:53. |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:32. |
|
|
« Предыдущая тема | Следующая тема » |
|
|