|
|
|||||
Регистрация: May 2018
Сообщений: 27
|
Эффект печати текста
Нашёл урок по эффекту печати текста на Ютьюбе: https://youtu.be/rjCo0w3u2cg
Помогите усовершенствовать мой исходник. Мне нужно, чтобы при нажатии клавиши переходило на другой кадр и в поле печатался другой текст. Я в AS 3.0 плохо разбираюсь, поэтому просто пересоздал функцию и переменные с другими именами(добавил двойку в названия). Может это как то проще можно сделать? Нужно что то вроде выбора вариантов ответа как в RPG, чтобы при нажатии клавиши A, B, C выбирался определённый вариант ответа и печатался определённый текст. Так же подскажите, как можно изменить скорость печати текста. |
|
|||||
Лучше сделать в одном кадре:
(ждёт нажатия клавиши А,В или С) stop(); var myStringArray:Array=[]; myStringArray[0]="1 Вариант 1\nПроверка текста\nЕщё проверка текста"; myStringArray[1]="2 Вариант 2\nПроверка текста\nЕщё проверка текста"; myStringArray[2]="3 Вариант 3\nПроверка текста\nЕщё проверка текста"; var myString:String; var myArray=[]; addEventListener(Event.ENTER_FRAME, frameLooper); function frameLooper(event:Event):void { if (myArray.length>0) { tf.appendText(myArray.shift()); } else { removeEventListener(Event.ENTER_FRAME, frameLooper); } } stage.addEventListener(KeyboardEvent.KEY_DOWN, on_keyDown); function on_keyDown(e:KeyboardEvent):void { removeEventListener(Event.ENTER_FRAME, frameLooper); if (e.keyCode==65) {//A tf.text=""; myString=myStringArray[0]; } else if (e.keyCode == 66) {//B tf.text=""; myString=myStringArray[1]; } else if (e.keyCode == 67) {//C tf.text=""; myString=myStringArray[2]; } if (e.keyCode==65||e.keyCode==66||e.keyCode==67) { myArray=myString.split(""); addEventListener(Event.ENTER_FRAME, frameLooper); } } Последний раз редактировалось Жень Шень; 18.12.2018 в 18:18. |
|
|||||
Регистрация: May 2018
Сообщений: 27
|
Спасибо, всё работает)
А что означает строчка tf.text=""; ? Это для того, чтобы сделать поле пустым? Я заменил A, B, C на 1, 2, 3, чтобы было проще выбирать. А возможно как то поместить текстовое поле в отдельный клип, разбить там всё по кадрам, и чтобы в каждом кадре был отдельный текст, который должен печататься при переходе на этот кадр? Т.е. чтобы текст для печати брался не из скрипта, а из самого текстового поля. И возможно ли изменить скорость печати текста? |
|
|||||
1. tf.text=""; - очищает поле перед выводом нового текста, если нажать другую клавишу (А,В,С или как вы переделали 1…3 или вооще другую). 2. function on_keyDown(e:KeyboardEvent):void { removeEventListener(Event.ENTER_FRAME, frameLooper); 3. Чтобы текст брался из текстового поля «ИмяТекстовогоПоля», достаточно написать: Чтобы замедлить скорость печать просто уменьшите fps ролика. |
|
|||||
Регистрация: May 2018
Сообщений: 27
|
Цитата:
Т.е. можно ли задать переменную, которая будет равна скорости печати? Например её значение может быть скорость fps минус какое нибудь число? |
|
|||||
Цитата:
stop(); var myStringArray:Array=[]; myStringArray[0]="1 Вариант 1\nПроверка текста\nЕщё проверка текста"; myStringArray[1]="2 Вариант 2\nПроверка текста\nЕщё проверка текста"; myStringArray[2]="3 Вариант 3\nПроверка текста\nЕщё проверка текста"; var myString:String; var myArray=[]; var delay:int = 500; var timer1:Timer = new Timer(delay); timer1.addEventListener("timer", frameLooper); timer1.start(); function frameLooper(event:TimerEvent):void { if (myArray.length>0) { tf.appendText(myArray.shift()); } else { timer.stop(); } } stage.addEventListener(KeyboardEvent.KEY_DOWN, on_keyDown); function on_keyDown(e:KeyboardEvent):void { timer1.stop(); if (e.keyCode==65) {//A tf.text=""; myString=myStringArray[0]; } else if (e.keyCode == 66) {//B tf.text=""; myString=myStringArray[1]; } else if (e.keyCode == 67) {//C tf.text=""; myString=myStringArray[2]; } if (e.keyCode==65||e.keyCode==66||e.keyCode==67) { myArray=myString.split(""); timer1.start(); } }
__________________
Я заклинаю вас действовать иначе. |
|
|||||
Регистрация: May 2018
Сообщений: 27
|
Bletraut У меня почему то не работает. Выдаёт ошибку "Обращение несуществующего свойства timer."
Вы это тестили? Жень Шень Цитата:
stop(); var myStringArray:Array=[]; //myStringArray[0]="1 Вариант 1\nПроверка текста\nЕщё проверка текста"; //myStringArray[1]="2 Вариант 2\nПроверка текста\nЕщё проверка текста"; //myStringArray[2]="3 Вариант 3\nПроверка текста\nЕщё проверка текста"; var myString:String; var myArray=[]; addEventListener(Event.ENTER_FRAME, frameLooper); function frameLooper(event:Event):void { if (myArray.length>0) { dialogs.tf.appendText(myArray.shift()); } else { removeEventListener(Event.ENTER_FRAME, frameLooper); } } stage.addEventListener(KeyboardEvent.KEY_DOWN, on_keyDown); function on_keyDown(e:KeyboardEvent):void { removeEventListener(Event.ENTER_FRAME, frameLooper); if (e.keyCode==49) {//1 dialogs.gotoAndStop(1); dialogs.tf.text=""; myString=dialogs.tf.text; } else if (e.keyCode == 50) {//2 dialogs.gotoAndStop(2); dialogs.tf.text=""; myString=myStringArray[1]; } else if (e.keyCode == 51) {//3 dialogs.gotoAndStop(3); dialogs.tf.text=""; myString=dialogs.tf.text; } if (e.keyCode==49||e.keyCode==50||e.keyCode==51) { myArray=myString.split(""); addEventListener(Event.ENTER_FRAME, frameLooper); } trace("Код нажатой клавиши: " + e.keyCode); } |
|
|||||
textTypingEffect - пример с ENTER_FRAME.
textTypingEffect2 - пример с таймером. Не понял, для чего брать текст с кадров клипа и печатать в режиме машинки в другое текстовое поле. В примерах просто показал как брать с текстового поля и "посылать на печать" в другое текстовое поле. Советую чётко продумать структуры своего шедевра: цель, последовательность действий программы и пользователя, итог работы кода и т.д. Успеха. |
|
|||||
Регистрация: May 2018
Сообщений: 27
|
Цитата:
Хотя и так тоже сойдёт, просто можно поле из которого берётся текст за экран поставить. А для чего можно использовать: можно сделать просто тест с эффектом печати, или интерактивную новеллу, или RPG с диалогами, да много чего) Последний вопрос: переменная delay ведь отвечает за скорость? Я пытался изменить её для установления скорости печати для каждого варианта, но скорость почему то не меняется. stop(); var myString:String; var myArray=[]; var delay:int = 100; //typing speed var timer1:Timer = new Timer(delay); stage.addEventListener(KeyboardEvent.KEY_DOWN, on_keyDown); timer1.addEventListener("timer", frameLooper); timer1.start(); function frameLooper(event:TimerEvent):void { if (myArray.length>0) { answer_tf.appendText(myArray.shift()); } else { timer1.stop(); } } function on_keyDown(e:KeyboardEvent):void { timer1.stop(); if (e.keyCode==49) {//1 delay = 10; dialogs.gotoAndStop(1); answer_tf.text=""; myString=dialogs.tf.text; } else if (e.keyCode == 50) {//2 delay = 50; dialogs.gotoAndStop(2); answer_tf.text=""; myString=dialogs.tf.text; } else if (e.keyCode == 51) {//3 delay = 100; dialogs.gotoAndStop(3); answer_tf.text=""; myString=dialogs.tf.text; } if (e.keyCode==49||e.keyCode==50||e.keyCode==51) { myArray=myString.split(""); timer1.start(); } } Последний раз редактировалось deepNoise; 20.12.2018 в 02:16. |
|
|||||
Регистрация: Feb 2014
Сообщений: 33
|
|
Часовой пояс GMT +4, время: 11:06. |
|
« Предыдущая тема | Следующая тема » |
|
|