Форум 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=215707)

Appleman 11.04.2019 10:11

Символы для парсера
 
Друзья!

Я помню, этот вопрос уже мельком поднимался, но сейчас он окончательно передо мной встал, поэтому прошу совета.

В моей игре, сделанной в виде текстового квеста, подбор фраз - ключевой момент Вью, т.к. фактически это главный способ обратной связи. Изначально планировал формировать по кусочкам, но проблема возникает с их стыковкой с учётом родов/падежей, тавтологии, в общем, полный швах. Сейчас избрал другой подход - заранее заготавливать более крупные куски фраз, и снабжать их "тегами", увидив которые, парсер будет подменять их на более мелкие словесные вставки, обусловленные контекстом. Что-то типа:

%ACTOR_NAME% замахнулся и %ATTACK_STRENGTH% ударил врага %EQUIPPED|P5%

Таким образом, я рассчитываю получить более-менее связный текст с нужной степенью разнообразия. Вопрос. Каким образом вы порекомендуете обозначать начало и окончание каждого такого тега в тексте, чтобы не влепиться в какие-нибудь зарезервированные кем-то комбинации?

Спасибо.

СлаваRa 11.04.2019 11:41

Что такое зарезервированная комбинация? и кто в вашем проекте их резервирует?

Appleman 11.04.2019 12:00

Я имею в виду не в моём проекте, а в более широком пространстве: среда выполнения, операционка и т.п.

СлаваRa 11.04.2019 12:34

Или я вас не понимаю или вы что-то "накрутили" себе в голове :)

caseyryan 11.04.2019 21:51

Цитата:

Сообщение от Appleman (Сообщение 1206447)
Я имею в виду не в моём проекте, а в более широком пространстве: среда выполнения, операционка и т.п.

Внутри строк нет ничего зарезервированного. Можно их вообще никак не обозначать специально.
Код AS3:

var someText:String = "SOME_ACTOR замахнулся на ANOTHER_ACTOR и ударил его";
// дальше получаешь нужный результат
someActor = someActore.replace("SOME_ACTOR", actor1Name).replace("ANOTHER_ACTOR", actor2Name);

Можешь и %% использовать с двух сторон. Это всё только для того, чтобы ты сам зрительно видел, что это именно переменная. Никакой роли это не играет. Кто-то делает, например {{someVar}} и парсят формат. В некоторых языках подобный функционал поддерживается из коробки (но не в ас3). Можешь не опасаться, что использование %% дернет какую-то переменную среды в системе) ас3 никуда просто так не вылезет из своей песочницы. Да и не только as3.

Appleman 11.04.2019 23:50

caseyryan, большое спасибо. Я именно об этом и спрашивал.

Твой вариант не пойдёт, т.к. конструкции могут быть разной длины. Например, прямо в тексте содержать вариант для мужского и женского рода. Поэтому потребуется чётко обозначать начало и конец фрагмента.

caseyryan 12.04.2019 09:23

Я сразу не обратил внимание, что у тебя там составные переменные внутри. В этом случае тебе придется регулярками искать ограниченную с двух сторон часть, поэтому с % могут возникать проблемы, когда у тебя там будут показаны проценты, ну типа %FOR|VALUE%%. Лучше используй какой-то другой ограничитель, которого в простом тексте точно не будет. Например, {{тут составная переменная}} или <<тут составная переменная>>
Но, в принципе, можно проценты в тексте передавать как PERCENT, а потом уже менять на % при парсинге. В общем, вариантов решения можно придумать много

ZergMaster 12.04.2019 13:47

я что-то забыл, а в as3 разве нет такого синтаксиса, как в js
Код AS3:

var someText: String = `${ACTOR_NAME} замахнулся и ${ATTACK_STRENGTH} ударил врага ${this.getEQUIPPED()}`

?

СлаваRa 12.04.2019 13:59

Интерполяции строк в as3 никогда не было.

Appleman 03.07.2019 18:32

Друзья!

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

Теперь возник вопрос с вёрсткой. Какой-то текст нужно выделить жирным, другой - "покрасить" в цвет персонажа. Пока планирую повторить разметку html с тегами в угловых скобках. В частности, для жирного текста ставить теги <b> и </b>, а для текста главного героя ставить <pl> и </pl>. Что думаете по этому поводу?

Возможно, кто-то решал подобные задачи и нашёл более эффективный метод. Тексты живут в файлах XML.

caseyryan 03.07.2019 23:14

У текстфилда есть свойство htmlText. Вот туда можно теги встроить. Там даже есть небольшая поддержка css (очень урезанная, но с такой задачей справится)

Appleman 04.07.2019 20:34

Век живи - век учись. Я и не знал, что есть такой встроенный функционал. Правда, неясно, как совместить готовые теги html с "кастомными", например, присвоения шрифту определённого (неизвестного заранее) цвета?

caseyryan 05.07.2019 13:21

Вложений: 1
Цитата:

Сообщение от Appleman (Сообщение 1206562)
Век живи - век учись. Я и не знал, что есть такой встроенный функционал. Правда, неясно, как совместить готовые теги html с "кастомными", например, присвоения шрифту определённого (неизвестного заранее) цвета?

С помощью CSS. На сколько я помню, там нормально работают простые селекторы.
Вот пример класса Stats, который раньше часто использовали для замеров производительности. В нем есть хороший пример исползования html текста с css, который как раз задает цвета тексту
Собственно, можешь придумать свои теги для каждого типа текста, и задать им особые цвета. В этом классе можешь глянуть тег fps. Такого тега нет в html по умолчанию, но тут он создается и стилизуется без проблем

Appleman 05.07.2019 15:41

merci, будем посмотреть.

Appleman 19.07.2019 00:15

Пока ничего не получилось по причине того, что все тексты хранятся в XML. Получается, что угловые скобки, обозначающие стили, воспринимаются парсером XML в качестве разметки - как ещё один уровень вложенности. Получается фигня. :(

Вот пример:
Код AS3:

<lowEnergy> <!-- Специальная фраза при высоком штрафе от усталости) </!-->
        <phrase id="adverb"> <!-- Стыковка в форме наречия, можно ставить деепричастный оборот </!-->
                <option>Валясь с ног от <b>сильнейшей усталости</b>, </option>
        </phrase>
</lowEnergy>


ZergMaster 19.07.2019 12:07

А если заменить их на
Код:

вместо " писать &quot;
вместо ' писать &apos;
вместо < писать &lt;
вместо > писать &gt;
вместо & писать &amp;

тоже не сработает?

Wolsh 19.07.2019 12:45

HTML надо в CDATA пихать((

Appleman 30.07.2019 21:53

Всем привет, Wolsh, ZergMaster, рад вас видеть!

Вообще пока не получается. Мало того, что с XML проблема, так ещё и метод textAppend оказывается недоступным при использовании стилей. А у меня сообщения в поле именно добавляются, а не заменяются одно другим. Так что по всей видимости буду сам заниматься велоизобретательством и парсить руками. А жаль...

caseyryan 01.08.2019 11:58

Вместо appendText можешь попробовать просто
Код AS3:

textField.htmlText += "еще текст";

По сути разница втом, что appendText внутри использует стринг билдер, а += будет создавать новую строку. Но в твоем случае это не критично


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

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