Text Write

исходники и примеры в формате .capx

Сообщение Text Write
» 16 янв 2013, 18:04

В старом Констракте у объекта Text было такое действие, как Write text. При этом в объект Text посимвольно заносился заранее определенный текст, т.е. просто печатался с определенной скоростью текст. В C2 такого действия я не нашел. Но в одном из моих проектов (которые, кстати были заморожены в CC, но вновь появилось желание закончить их уже в C2 :blush: ) печатание текста поддерживает заданную атмосферу. :biggrin:

Поэтому я решил написать код, который бы имитировал описанную выше функцию.

Код получился донельзя компактный и состоит всего лишь из 1 события и 2ух подсобытий. (Но в реальности скорее всего будет чуток больше :cool: ).

Я представляю вам исходник с комментариями. В исходнике 2 листа событий: 1ый - с указанием вашего собственного текста и комментариями, 2ой - чистый, голый именно "печатающий" скрипт.

По управлению: Для переноса строки используйте символ "|". :ok:

TextWriting.capx
(6.63 КБ) Скачиваний: 534
C2 - Release 114r
Аватара пользователя

Игродел
Сообщений: 405
Я тут с 08 янв 2013
Откуда: Мск
Репутация 210 [ ? ]

Сообщение Re: Text Write
» 01 фев 2013, 08:39

А объясни пожалуйста, что здесь "right(left(TextBox.Text, len(TextBox.Text)-Text.Write), 1)" происходит? Как работают эти выражения? Я понял только TextBox.Text )))))
Большое спасибо всем, кто пишет мне респекты в ЛС! Очень рад, что до сих пор мои советы, примеры и уроки пользуются спросом... Но, к сожалению, я уже давно не занимаюсь разработкой игр и программированием вообще, поэтому я уже не лучший советчик в этом деле, да и времени совсем нет. Здесь на форуме я уже практически не бываю, но всегда открыт для общения в ВК: vk.com/virusfun
Но хоть меня здесь почти нет, мне все равно будут приятны ваши отзывы и плюсы [+]
Аватара пользователя

Игродел
Сообщений: 893
Я тут с 23 сен 2012
Откуда: Хабаровск
Репутация 127 [ ? ]

Сообщение Re: Text Write
» 03 фев 2013, 02:27

Это выражение возвращает символ, идущий под номером равным значению переменной Write.
Сначала происходит взятие левой части строки:
left(TextBox.Text, len(TextBox.Text)-Text.Write)
Т.е. первый аргумент - TextBox.Text - это та строка из которой мы будем брать левую часть
второй аргумент - len(TextBox.Text)-Text.Write - это количество символов, которые останутся слева
 Примеры
Выражение left("Привет, мир!!!", 7) - вернет "Привет,"
left("Привет, мир!!!", 3) - вернет "При"
left("ScirraConstruct2", 1) вернет "S"


Допустим в объекте TextBox записан следующий текст: "К нам едет ревизор!"
тогда вместо TextBox.Text будет записано "К нам едет ревизор!"
вместо len(TextBox.Text) будет 19 (длина строки в символах)
если Text.Write = 18, тогда len(TextBox.Text)-Text.Write вернет 19-18=1,
и тогда выражение left(TextBox.Text, len(TextBox.Text)-Text.Write) будет эквивалентно
left("К нам едет ревизор!", 19-18) т.е. "К"

если Text.Write = 16, тогда это выражение будет таким: left("К нам едет ревизор!", 19-16) т.е. "К н"
и т.д.

соотвественно right(String, Number) возвращает Number количество символов справа строки String.
 Примеры
right("Багровый закат.", 6) = "закат."
right("Багровый закат.", 8) = "й закат."
right("Багровый закат.", 2) = "т."


Итак, вернемся к примеру, когда Text.Write = 18,
когда left(TextBox.Text, len(TextBox.Text)-Text.Write) возвращает нам "К".
Теперь смотрим на внешнюю часть выражения (напомню, выражение было таким - right(left(TextBox.Text, len(TextBox.Text)-Text.Write), 1))
Получается, что вместо right(left(TextBox.Text, len(TextBox.Text)-Text.Write), 1) выделенного можно подписать "К". Тогда получается следующее выражение: right("К", 1), которое возвращает нам "К".

Теперь, вариант, когда Text.Write = 16.
left(TextBox.Text, len(TextBox.Text)-Text.Write) = "К н"
тогда все выражение будет таким: right("К н", 1) т.е. "н".
Если посмотреть, то получится, что все это выражение возвращает символ, идущий под номером = Text.Write начиная слева, а поскольку в исходнике это выражение стоит в цикле, то от переменной Write с каждым витком цикла отнимается 1, а значит номер символа с каждым витком цикла увеличивается (у нас ведь len(...)-Text.Write), а не просто Text.Write)

Ну вот как-то примерно так, надеюсь теперь стало немного понятнее :biggrin:
Аватара пользователя

Игродел
Сообщений: 405
Я тут с 08 янв 2013
Откуда: Мск
Репутация 210 [ ? ]

Сообщение Text Write
» 11 авг 2017, 18:25

Есть способ легче, если кому то нужно.
1. Делаем 2 текста, 1 это болванка где хранится текст он за экраном, 2 это сам текст куда нужно писать.
2. Делаем Event, Every *time* second > НашТекст > set text >
Код: Выделить всё
left(Макет.Text, len(НашТекст.Text) +1)

3. Проверяем всё должно работать, не забудьте написать текст в болванке а то нечего не будет.

*time* - время любое, я брал 0.05
Аватара пользователя

Участник
Сообщений: 23
Я тут с 09 янв 2017
Откуда: г.Екатеринбург
Двиг: C2,CC,MF2.5
Лицензия: Free,CFD2.5
Репутация 6 [ ? ]



Вернуться в Исходники и Примеры для Construct 2

Сейчас эту тему просматривают

Зарегистрированные пользователи: нет зарегистрированных пользователей

Наверх