Показать сообщение отдельно
Старый 04.01.2019, 17:33
deepNoise вне форума Посмотреть профиль Отправить личное сообщение для deepNoise Найти все сообщения от deepNoise
  № 26  
Ответить с цитированием
deepNoise

Регистрация: May 2018
Сообщений: 27
Код AS3:
import flash.ui.Keyboard;
 
stop();
 
var keysMap:Object = {};//код клавиши : номер кадра;
keysMap[Keyboard.NUMBER_1] = 1;
keysMap[Keyboard.NUMBER_2] = 2;
keysMap[Keyboard.NUMBER_3] = 3;
keysMap[Keyboard.NUMBER_4] = 4;
 
var timer1:Timer = new Timer(delay);
timer1.addEventListener(TimerEvent.TIMER, frameLooper);
 
stage.addEventListener(KeyboardEvent.KEY_DOWN, on_keyDown);
 
var text:String = "";
var currentSymbol:int = 0;
var pattern:RegExp = new RegExp(String.fromCharCode(13),"g");//регулярка, ищущая все возвраты каретки в строке
var repl:String = String.fromCharCode(10);//символ переноса \n
var way = "1";//переменная порядка ветки событий
var wayX = way;//переменная текущего значения ветки
var delay:int = 100; //скорость печати
 
 
timer1.start();
 
function frameLooper(event:TimerEvent):void
{
	if (currentSymbol < text.length)
	{
		answer_tf.appendText(text.charAt(currentSymbol++));
	}
	else
	{
		timer1.stop();
	}
}
 
function on_keyDown(e:KeyboardEvent):void
{
		if (way == wayX)
	{//назначения порядкого номера ветки событий
		if (e.keyCode == 49)
		{//1
			way = wayX+"-1";
		}
		else if (e.keyCode == 50)
		{//2
			way = wayX+"-2";
		}
		else if (e.keyCode == 51)
		{//3
			way = wayX+"-3";
		}
		else if (e.keyCode == 52)
		{//4
			way = wayX+"-4";
		}
		wayX=way;
		trace("way="+way);
	}
 
	if(way == "1-1"){
		delay=20;
	}else if(way == "1-2"){
		delay=40;
	}else if(way == "1-3"){
		delay=60;
	}else if(way == "1-4"){
		delay=80;
	}
 
	if (keysMap.hasOwnProperty(e.keyCode))
	{
		answer_tf.text = "";
		way1.gotoAndStop(keysMap[e.keyCode]);
		text = way1.tf.text.replace(pattern,repl);
		currentSymbol = 0;
		timer1.delay = delay;
		timer1.start();
	}
 
}
В общем я задал переменную way, которая отслеживает текущую ветку события в игре.
Для каждой ветки я задал свою скорость печати.
Клип dialogs переименовал в way1. Теперь буду плодить клипы с названиями текущих веток событий:
way1-1, way1-2, way1-3 и т.д., в которых будут по кадрам выставлены варианты для переходов к последующим веткам. Таким образом собираюсь сделать разветвлённую сеть дерева событий для игры.

Сейчас скорость печати задаётся конкретно для каждой ветки. А можно как то задать скорость печати и время паузы с помощью символов в тексте, как это делалось ранее для переносов символом /n? Например, если будет написано:
Цитата:
/sВы пошли налево./speed=40/pause=1,5 /sКуда теперь?/speed=20

/s1. Пойти налево. 3. Пойти вверх.
2. Пойти направо. 4. Пойти вниз. /speed=0
то это будет означать, что "Вы пошли налево" будет печататься с delay=40, "Куда теперь?" c delay=20, а после "Вы пошли налево" будет пауза 1,5 секунды.

"1. Пойти налево. 3. Пойти вверх. 2. Пойти направо. 4. Пойти вниз." соответственно будут печататься без задержки, то есть моментально. Как это можно реализовать?