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

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

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

Регистрация: May 2018
Сообщений: 27
По умолчанию Эффект печати текста

Нашёл урок по эффекту печати текста на Ютьюбе: https://youtu.be/rjCo0w3u2cg
Помогите усовершенствовать мой исходник.
Мне нужно, чтобы при нажатии клавиши переходило на другой кадр и в поле печатался другой текст.
Я в AS 3.0 плохо разбираюсь, поэтому просто пересоздал функцию и переменные с другими именами(добавил двойку в названия). Может это как то проще можно сделать?
Нужно что то вроде выбора вариантов ответа как в RPG, чтобы при нажатии клавиши A, B, C выбирался определённый вариант ответа и печатался определённый текст.
Так же подскажите, как можно изменить скорость печати текста.
Вложения
Тип файла: rar textTypingEffect.rar (9.3 Кб, 38 просмотров)

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

блогер
Регистрация: Feb 2004
Адрес: Украина
Сообщений: 1,180
Записей в блоге: 3
Отправить сообщение для Жень Шень с помощью ICQ
Лучше сделать в одном кадре:
(ждёт нажатия клавиши А,В или С)

Код AS3:
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.
Старый 18.12.2018, 20:48
deepNoise вне форума Посмотреть профиль Отправить личное сообщение для deepNoise Найти все сообщения от deepNoise
  № 3  
Ответить с цитированием
deepNoise

Регистрация: May 2018
Сообщений: 27
Спасибо, всё работает)
А что означает строчка tf.text=""; ? Это для того, чтобы сделать поле пустым?

Я заменил A, B, C на 1, 2, 3, чтобы было проще выбирать.
А возможно как то поместить текстовое поле в отдельный клип, разбить там всё по кадрам, и чтобы в каждом кадре был отдельный текст, который должен печататься при переходе на этот кадр? Т.е. чтобы текст для печати брался не из скрипта, а из самого текстового поля.

И возможно ли изменить скорость печати текста?

Старый 18.12.2018, 22:03
Жень Шень вне форума Посмотреть профиль Отправить личное сообщение для Жень Шень Найти все сообщения от Жень Шень
  № 4  
Ответить с цитированием
Жень Шень
 
Аватар для Жень Шень

блогер
Регистрация: Feb 2004
Адрес: Украина
Сообщений: 1,180
Записей в блоге: 3
Отправить сообщение для Жень Шень с помощью ICQ
1.
tf.text=""; - очищает поле перед выводом нового текста, если нажать другую клавишу (А,В,С или как вы переделали 1…3 или вооще другую).
2.
Код AS3:
function on_keyDown(e:KeyboardEvent):void {
      removeEventListener(Event.ENTER_FRAME, frameLooper);
Здесь removeEventListener нужен по той же причине – остановить обработчик события.
3.
Чтобы текст брался из текстового поля «ИмяТекстовогоПоля», достаточно написать:
Код AS3:
myString = ИмяТекстовогоПоля.text;
4.
Чтобы замедлить скорость печать просто уменьшите fps ролика.

Старый 19.12.2018, 05:07
deepNoise вне форума Посмотреть профиль Отправить личное сообщение для deepNoise Найти все сообщения от deepNoise
  № 5  
Ответить с цитированием
deepNoise

Регистрация: May 2018
Сообщений: 27
Цитата:
Чтобы замедлить скорость печать просто уменьшите fps ролика.
А по другому нельзя как нибудь сделать? Например, можно ли как то событие Event.ENTER_FRAME преобразовать в переменную и вычесть из этой переменной какое нибудь значение?
Т.е. можно ли задать переменную, которая будет равна скорости печати? Например её значение может быть скорость fps минус какое нибудь число?

Старый 19.12.2018, 13:18
Bletraut вне форума Посмотреть профиль Отправить личное сообщение для Bletraut Найти все сообщения от Bletraut
  № 6  
Ответить с цитированием
Bletraut
 
Аватар для Bletraut

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 566
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
Цитата:
А по другому нельзя как нибудь сделать?
Можно, для этого нужно поставить таймер. Переменная delay это скорость печати в миллисекундах

Код AS3:
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();
    }
}
__________________
Я заклинаю вас действовать иначе.

Старый 19.12.2018, 15:27
deepNoise вне форума Посмотреть профиль Отправить личное сообщение для deepNoise Найти все сообщения от deepNoise
  № 7  
Ответить с цитированием
deepNoise

Регистрация: May 2018
Сообщений: 27
Bletraut У меня почему то не работает. Выдаёт ошибку "Обращение несуществующего свойства timer."
Вы это тестили?

Жень Шень
Цитата:
Чтобы текст брался из текстового поля «ИмяТекстовогоПоля», достаточно написать:

Код AS3:
myString = ИмяТекстовогоПоля.text;
Попробовал сделать вот так:
Код AS3:
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);
}
Почему то не работает. Что нужно исправить?
Вложения
Тип файла: rar textTypingEffectV3.rar (5.4 Кб, 36 просмотров)

Старый 19.12.2018, 23:56
Жень Шень вне форума Посмотреть профиль Отправить личное сообщение для Жень Шень Найти все сообщения от Жень Шень
  № 8  
Ответить с цитированием
Жень Шень
 
Аватар для Жень Шень

блогер
Регистрация: Feb 2004
Адрес: Украина
Сообщений: 1,180
Записей в блоге: 3
Отправить сообщение для Жень Шень с помощью ICQ
textTypingEffect - пример с ENTER_FRAME.
textTypingEffect2 - пример с таймером.
Не понял, для чего брать текст с кадров клипа и печатать в режиме машинки в другое текстовое поле.
В примерах просто показал как брать с текстового поля и "посылать на печать" в другое текстовое поле.
Советую чётко продумать структуры своего шедевра: цель, последовательность действий программы и пользователя, итог работы кода и т.д.
Успеха.
Вложения
Тип файла: rar textTypingEffect.rar (96.0 Кб, 31 просмотров)

Старый 20.12.2018, 01:57
deepNoise вне форума Посмотреть профиль Отправить личное сообщение для deepNoise Найти все сообщения от deepNoise
  № 9  
Ответить с цитированием
deepNoise

Регистрация: May 2018
Сообщений: 27
Цитата:
Не понял, для чего брать текст с кадров клипа и печатать в режиме машинки в другое текстовое поле.
Я хотел не с одного поля в другое, а просто одно поле, в которое напечатать текст вручную в исходнике, и он появится с эффектом печати при запуске мувика) В поле печатать, чтобы было нагляднее, сразу был виден результат.
Хотя и так тоже сойдёт, просто можно поле из которого берётся текст за экран поставить.
А для чего можно использовать: можно сделать просто тест с эффектом печати, или интерактивную новеллу, или RPG с диалогами, да много чего)

Последний вопрос: переменная delay ведь отвечает за скорость? Я пытался изменить её для установления скорости печати для каждого варианта, но скорость почему то не меняется.

Код AS3:
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.
Старый 20.12.2018, 11:36
Swer вне форума Посмотреть профиль Отправить личное сообщение для Swer Найти все сообщения от Swer
  № 10  
Ответить с цитированием
Swer
 
Аватар для Swer

Регистрация: Feb 2014
Сообщений: 33
Код AS3:
if (e.keyCode==49||e.keyCode==50||e.keyCode==51) {
        myArray=myString.split("");
        timer1.delay = delay;
        timer1.start();
 
 }

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

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

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


 


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


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