Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Эффект печати текста (http://www.flasher.ru/forum/showthread.php?t=215681)

Жень Шень 20.12.2018 14:29

Цитата:

Сообщение от deepNoise (Сообщение 1206215)
Я хотел не с одного поля в другое, а просто одно поле, в которое напечатать текст вручную в исходнике, и он появится с эффектом печати при запуске мувика)

После компиляции это будет стринговая константа - те же яйца, только в профиль, то есть первый вариант с массивом.
Может надо (я вангую) вопрос и на него печатать ответ, то это надо организовать два массива: один с вопросами, другой с ответами. По одному индексу выбирать вопрос/ответ. Где-то так. Но это вам решать.

deepNoise 30.12.2018 06:39

Вложений: 1
Подскажите как сделать, чтобы текст из поля печатался со всеми переносами строк? А то сейчас он печатается в одну строку без переносов.

Код AS3:

stop();
var myString:String;
var myArray=[];
var delay:int = 100;
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=20; //скорость печати
            dialogs.gotoAndStop(1);
        answer_tf.text="";
        myString=dialogs.tf.text;
    } else if (e.keyCode == 50) {//2
            delay=20; //скорость печати
            dialogs.gotoAndStop(2);
        answer_tf.text="";
        myString=dialogs.tf.text;
    } else if (e.keyCode == 51) {//3
            delay=20; //скорость печати
            dialogs.gotoAndStop(3);
        answer_tf.text="";
        myString=dialogs.tf.text;
        } else if (e.keyCode == 52) {//4
            delay=20; //скорость печати
            dialogs.gotoAndStop(4);
        answer_tf.text="";
        myString=dialogs.tf.text;
    }
    if (e.keyCode==49||e.keyCode==50||e.keyCode==51||e.keyCode==52) {
        myArray=myString.split("");
                timer1.delay = delay;
        timer1.start();
    }
}


Swer 30.12.2018 19:22

Код AS3:

//answer_tf.width  = 500; 
//answer_tf.height = 500; 
answer_tf.wordWrap = true; // перенос по словам - если нужно
answer_tf.multiline  = true;

Еще можно знак "\n" в тексте ставить.
Код AS3:

answer_tf.appendText( "Hellow \n world" );


deepNoise 30.12.2018 23:24

Код AS3:

answer_tf.wordWrap = true; // перенос по словам - если нужно
answer_tf.multiline  = true;

А куда именно это нужно поставить?
Пробовал после answer_tf.appendText(myArray.shift()); ставить и в функцию нажатия клавиши, но почему то текст продолжает печататься без переносов.
А способ с \n наверно подходит только, если текст берётся из скрипта, а не из текстового поля.

Swer 31.12.2018 09:08

Можно попробовать так :
- кликаешь на нужное текстовое окно
- справа сверху есть ярлыки properties и library - выбираешь properties
- ищешь paragraph там есть поле behavior - устанавливаешь multiline.
У меня работает.

Мне кажется сначала надо продумать структуру, я не читал но может быть тебе поможет -
http://www.flasher.ru/forum/blog.php?b=691

Наверное переменная myArray лишняя.
Код AS3:

stop();
var myString:String = "";
var delay:int = 100;
var timer1:Timer = new Timer(delay);
var nextCharIndex:int = 0;
var lengthString:int = 0;
 
 
stage.addEventListener(KeyboardEvent.KEY_DOWN, on_keyDown);
timer1.addEventListener("timer", frameLooper);
 
timer1.start();
 
function frameLooper(event:TimerEvent):void {
    if ( nextCharIndex < lengthString ) {
        answer_tf.appendText( myString.charAt( nextCharIndex ) );
                ++nextCharIndex;
    } else {
        timer1.stop();
    }
}
 
function on_keyDown(e:KeyboardEvent):void {
        timer1.stop();
    if (e.keyCode==49) {//1
            delay=20; //скорость печати
            dialogs.gotoAndStop(1);
        answer_tf.text="";
        myString=dialogs.tf.text;
    } else if (e.keyCode == 50) {//2
            delay=20; //скорость печати
            dialogs.gotoAndStop(2);
        answer_tf.text="";
        myString=dialogs.tf.text;
    } else if (e.keyCode == 51) {//3
            delay=20; //скорость печати
            dialogs.gotoAndStop(3);
        answer_tf.text="";
        myString=dialogs.tf.text;
        } else if (e.keyCode == 52) {//4
            delay=20; //скорость печати
            dialogs.gotoAndStop(4);
        answer_tf.text="";
        myString=dialogs.tf.text;
    }
    if (e.keyCode==49||e.keyCode==50||e.keyCode==51||e.keyCode==52) {
                nextCharIndex = 0;
                lengthString = myString.length;
                timer1.delay = delay;
        timer1.start();
    }
}


deepNoise 31.12.2018 15:04

Цитата:

Мне кажется сначала надо продумать структуру, я не читал но может быть тебе поможет -
http://www.flasher.ru/forum/blog.php?b=691
Я в AS 3.0 то почти не разбираюсь, а тут ещё какое то XML. Почитал, не понял что такое id в каждой строке и lock="false".
Да и варианты ответа у меня нужно выбирать именно нажатием клавиши, а не мышью, а то бы я просто много кнопок наделал да и всё)
Думаю попробую сделать через переменные и if.

Жень Шень 31.12.2018 21:49

Цитата:

Сообщение от deepNoise (Сообщение 1206239)
А куда именно это нужно поставить?

Никуда ничего не надо вставлять. Просто надо "отловить" символ переноса строки 13 и вместо него подсунуть стринг "\n". Вот весь код первого кадра:
Код AS3:

stop();
var myString:String;
var myArray=[];
var delay:int=100;
var timer1:Timer=new Timer(delay);
var first_symbol:String;
stage.addEventListener(KeyboardEvent.KEY_DOWN, on_keyDown);
timer1.addEventListener("timer", frameLooper);
 
timer1.start();
 
function frameLooper(event:TimerEvent):void {
    if (myArray.length>0) {
        first_symbol=myArray.shift();
        //trace(first_symbol, first_symbol.charCodeAt());
        if (first_symbol.charCodeAt() == 13){
            answer_tf.appendText("\n");
        } else {
            answer_tf.appendText(first_symbol);
        }
    } else {
        timer1.stop();
    }
}
 
function on_keyDown(e:KeyboardEvent):void {
    timer1.stop();
    if (e.keyCode==49) {//1
        delay=20;//скорость печати
        dialogs.gotoAndStop(1);
        answer_tf.text="";
        myString=dialogs.tf.text;
    } else if (e.keyCode == 50) {//2
        delay=20;//скорость печати
        dialogs.gotoAndStop(2);
        answer_tf.text="";
        myString=dialogs.tf.text;
    } else if (e.keyCode == 51) {//3
        delay=20;//скорость печати
        dialogs.gotoAndStop(3);
        answer_tf.text="";
        myString=dialogs.tf.text;
    } else if (e.keyCode == 52) {//4
        delay=20;//скорость печати
        dialogs.gotoAndStop(4);
        answer_tf.text="";
        myString=dialogs.tf.text;
    }
    if (e.keyCode==49||e.keyCode==50||e.keyCode==51||e.keyCode==52) {
        myArray=myString.split("");
        timer1.delay=delay;
        timer1.start();
    }
}

Обрати внимание на новую переменную first_symbol. Это и есть очередной допечатываемый символ. Вот его и анализирует
Код AS3:

if (first_symbol.charCodeAt() == 13){
...


Swer 01.01.2019 19:35

Цитата:

Сообщение от Жень Шень (Сообщение 1206248)
Просто надо "отловить" символ переноса строки

Если символ переноса есть в тексте, то почему он не применяется ?

Жень Шень 02.01.2019 01:13

Символ "Возврат каретки" имеет ASCII код 13.
Метод appendText(newText:String) добавляет строку, указанную параметром newText, в конец текста в текстовом поле. То есть по сути ничего не добавит в случае с символом ASCII 13. Надо сделать ещё "Перевод каретки" - ASCII код 10.
А этот код:

Код AS3:

answer_tf.appendText("\n");

можно заменить таким кодом:
Код AS3:

answer_tf.appendText(String.fromCharCode(10));

Всё бы прекрасно работало без всех этих премудростей (я про метод appendText и "ловлю" переноса строки, если был бы такой код:
Код AS3:

answer_tf.text = answer_tf.text + first_symbol;

Здесь добавляется не преобразованный в пустой стринг символ "Возврат каретки", а именно перенос строки.

Swer 02.01.2019 09:45

Но если передать всю строку, то перенос строки будет применяться
Код AS3:

answer_tf.text = "";
answer_tf.appendText( myString );

Наверное проблема именно в посимвольной передачи.


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

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