Перейти к основному содержимому

19.3. Как сделать так, чтобы текст появлялся на экране постепенно? По буквам?

В: Как сделать так, чтобы текст появлялся на экране постепенно? По буквам?

О: В самом простом виде это можно реализовать через цикл с задержкой:

! вносим текст в переменную

$stroka='А можно ли сделать так, чтобы текст появлялся постепенно?'
! выставляем счётчик

i=1
loop local i=1 while i<len($stroka)+1 step i+=1:
! пока значение счётчика не превысило длину строки

! задержка 250 мс

wait 250
! выводим следущую букву из нашей строки

*p $mid($stroka,i,1)
end

Однако оператор wait "подвешивает" игру на время задержки, в результате чего игрок не может ничего сделать, пока текст не будет выведен полностью. Если нужно вывести текст побуквенно, но при этом сохранить для игрока возможность взаимодействовать с игрой, необходимо использовать локацию-счётчик.

Для начала нужно создать локацию-счётчик (если ещё не создана):

  • создаём локацию, название может быть любым, например "реалтайм".
  • указываем плееру, какую локацию ему нужно использовать, как локацию-счётчик. Пишем, например, на самой первой локации в игре:
    $counter="реалтайм"

На локации-счётчик можно написать вот такой код:

if $stroka<>'':
! если в переменной строка есть какое либо значение

! выставляем контрольную переменную (она же значение таймера)

control=50
! выставляем период обращения к локации-счётчику

settimer control
! выводим первую букву из оставшейся строки

*p $mid($stroka,1,1)
! если длина строки больше 1

if len($stroka)>1:
! вырезаем из неё все буквы, начиная со второй

! и присваиваем той же переменной

$stroka=$mid($stroka,2)
else
! иначе

! выводим перевод строки

*pl
! присваиваем пустое значение

$stroka=''
end
elseif control=50:
! иначе если в контрольной переменной стоит значение 50

! меняем значение контрольной переменной

control=500
! выставляем период обращения к локации-счётчику

settimer control
end

Теперь, чтобы строка вывелась побуквенно, достаточно присвоить текст переменной $stroka на любой локации:

$stroka = "А можно ли сделать так, чтобы текст появлялся постепенно, но игрок продолжал взаимодействовать с игрой?"